added: 'export' plugin can make use of some meta informations (from items)

additional export currently


git-svn-id: svn://ttmath.org/publicrep/winix/trunk@777 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
Tomasz Sowa 2011-12-01 20:45:06 +00:00
parent 024ce8e73c
commit 92f7c11999
3 changed files with 95 additions and 0 deletions

View File

@ -123,6 +123,17 @@ return false;
}
void ExportInfo::ResetRecurrenceCheck()
{
recurrence_check.clear();
}
bool ExportInfo::HasRecurrenceId(long id)
{
return (std::find(recurrence_check.begin(), recurrence_check.end(), id) != recurrence_check.end());
}
void ExportInfo::SendFile(const Item & item, bool thumb)
{
@ -131,6 +142,14 @@ void ExportInfo::SendFile(const Item & item, bool thumb)
if( !exp_dir )
return;
if( HasRecurrenceId(item.id) )
{
log << log1 << "Export: recurrence found on item.id: " << item.id << ", url: " << item.url << " (skipping)" << logend;
return;
}
recurrence_check.push_back(item.id);
msg.Clear();
system->dirs.MakePath(item.parent_id, msg.path);
msg.path += item.url;
@ -190,6 +209,14 @@ void ExportInfo::SendDir(const Item & item)
if( !exp_dir )
return;
if( HasRecurrenceId(item.id) )
{
log << log1 << "Export: recurrence found on item.id: " << item.id << ", url: " << item.url << " (skipping)" << logend;
return;
}
recurrence_check.push_back(item.id);
msg.Clear();
system->dirs.MakePath(item.id, msg.path);
@ -218,6 +245,7 @@ void ExportInfo::SendDir(const Item & item)
msg.path.insert(0, L"/");
export_thread->AddMessage(msg);
AdditionalExport(item);
}
}
}
@ -255,5 +283,51 @@ void ExportInfo::SendAllFilesFromDir(long dir_id)
void ExportInfo::AdditionalExport(const Item & item)
{
for(size_t i=0 ; i<item.meta.spaces.size() ; ++i)
{
if( item.meta.spaces[i]->name == L"export" )
AdditionalExport(item, *item.meta.spaces[i]);
}
}
void ExportInfo::AdditionalExport(const Item & item, Space & meta)
{
if( meta.ListText(L"additional_export", additional_export) )
{
for(size_t i=0 ; i<additional_export.size() ; ++i)
{
log << log1 << "exportuje dodatkowo takiego swiniaka: " << additional_export[i] << logend;
AdditionalExport(additional_export[i]);
}
}
}
void ExportInfo::AdditionalExport(const std::wstring & path)
{
int res = system->FollowAllLinks(path, additional_export_dir_tab, additional_export_item);
if( res == 0 )
{
// directory
SendDir(*additional_export_dir_tab.back());
}
else
if( res == 1 )
{
// file
// !! uwaga jesli to bedzie plik statyczny (moze dwa razy uzyc raz false i raz true?)
SendFile(additional_export_item);
}
else
{
log << log1 << "Export: incorrect path for additional export: " << path << logend;
}
}
} // namespace

View File

@ -47,6 +47,8 @@ public:
void SendDir(long dir_id);
void SendAllFilesFromDir(long dir_id);
void ResetRecurrenceCheck();
private:
System * system;
@ -64,9 +66,18 @@ private:
std::vector<ExportDir> export_dirs;
DbItemQuery iq_dir;
std::vector<Item> dir_items;
std::vector<std::wstring> additional_export;
std::vector<Item*> additional_export_dir_tab;
Item additional_export_item;
std::vector<long> recurrence_check;
bool SkipDir(long dir_id, std::wstring & dir);
void AdditionalExport(const Item & item);
void AdditionalExport(const Item & item, Space & meta);
void AdditionalExport(const std::wstring & path);
bool HasRecurrenceId(long id);
};
}

View File

@ -65,6 +65,7 @@ void SendDir(PluginInfo & info)
if( dir )
{
export_info.ResetRecurrenceCheck();
export_info.SendDir(*dir);
export_info.SendAllFilesFromDir(dir->id);
}
@ -85,6 +86,7 @@ void SendFileAdded(PluginInfo & info)
}
else
{
export_info.ResetRecurrenceCheck();
export_info.SendFile(*item);
export_info.SendDir(item->parent_id);
@ -101,6 +103,7 @@ void SendFileChanged(PluginInfo & info)
if( item )
{
export_info.ResetRecurrenceCheck();
export_info.SendFile(*item);
export_info.SendDir(item->parent_id);
@ -117,6 +120,7 @@ void SendFileCopied(PluginInfo & info)
if( item )
{
export_info.ResetRecurrenceCheck();
export_info.SendDir(item->parent_id);
if( item->file_type == WINIX_ITEM_FILETYPE_NONE )
@ -139,6 +143,7 @@ void SendFileResized(PluginInfo & info)
if( item )
{
export_info.ResetRecurrenceCheck();
export_info.SendFile(*item);
export_info.SendDir(item->parent_id);
}
@ -151,6 +156,7 @@ void SendFileThumb(PluginInfo & info)
if( item )
{
export_info.ResetRecurrenceCheck();
export_info.SendFile(*item, true);
export_info.SendDir(item->parent_id);
}
@ -164,7 +170,10 @@ void SendFilePrepareMove(PluginInfo & info)
if( item )
{
if( item->file_type == WINIX_ITEM_FILETYPE_NONE )
{
export_info.ResetRecurrenceCheck();
export_info.SendAllFilesFromDir(item->parent_id);
}
}
}
@ -175,6 +184,7 @@ void FileRemoved(PluginInfo & info)
if( item )
{
export_info.ResetRecurrenceCheck();
export_info.SendDir(item->parent_id);
if( item->file_type == WINIX_ITEM_FILETYPE_NONE )