diff --git a/plugins/export/exportinfo.cpp b/plugins/export/exportinfo.cpp index e177aa6..77fd7f3 100755 --- a/plugins/export/exportinfo.cpp +++ b/plugins/export/exportinfo.cpp @@ -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 ; iname == 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 ; iFollowAllLinks(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 diff --git a/plugins/export/exportinfo.h b/plugins/export/exportinfo.h index 614d1ab..b31f990 100755 --- a/plugins/export/exportinfo.h +++ b/plugins/export/exportinfo.h @@ -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 export_dirs; DbItemQuery iq_dir; std::vector dir_items; + std::vector additional_export; + std::vector additional_export_dir_tab; + Item additional_export_item; + std::vector 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); }; } diff --git a/plugins/export/init.cpp b/plugins/export/init.cpp index 3179aa6..d747163 100755 --- a/plugins/export/init.cpp +++ b/plugins/export/init.cpp @@ -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 )